;

1.前言 需要下载个视频文件发现只有腾讯视频有,浏览器中播放器有个下载按钮,不错哦,下载腾讯播放器才能下载。 播放器下载完,视频下载下来后发现是qlv格式,播放必须要用腾讯播放器,根本无法传播。 2.进入浏览器播放器分析真正的视频地址 video标签中有个src属性,直接用新标签打开就能下载,这是一段5分钟的mp4,每5分钟这个地址会修改,挨个打开即可。 3.mp4片段合并 本来想着pr拼接后导出简简单单,然后发现比特率调为1了竟然还有400多M,足足比原视频大了4倍,不能忍。 接着百度搜视频在线合成网站,国内的要么限制尺寸,要么上传下载处理都超级慢,根本没法用。 找找国外网站,前面几个都还不错,等视频下载大大的水印把字幕都盖住了,真他娘的都是坑爹货。 看来还得自己动手。 4.ffmpeg出马 下载地址:http://ffmpeg.org/download.html 思路: 1.先将MP4文件转化为同样编码形式的ts流(ts流支持concate) 2.第二步,连接(concate)ts流 3.最后,把连接好的ts流转化为MP4. ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts ffmpeg -i 2.mp4 -vcodec copy -acodec c…

下载腾讯视频并合成为mp4 2020年5月22日
;

步骤一:肤色和背景分离 1.ctrl+l(打开色阶)->自动(恢复照片原有色彩) 2.选择->色彩范围->肤色->检测人脸->ctrl+j(复制图层) 3.选择背景图层->选择->色彩范围->反相->ctrl+j(复制图层)

ps人像调色 2020年5月22日
;

1.srt字幕导入后乱码 字幕文件用记事本打开,选择另存为,编码选择utf-8 2.srt字幕导入后后半部分内容丢失 因为字幕时间点中出现了起始值相同的项目,修改后即可

premiere字幕相关问题总结 2020年5月17日
;

注释: 混合模式的数学计算公式,另外还介绍了不透明度。 这些公式仅适用于RGB图像,对于Lab颜色图像而言,这些公式将不再适用。 在公式中 A 代表下面图层的颜色值; B 代表上面图层的颜色值; C 代表混合图层的颜色值; d 表示该层的透明度。 1.Opacity 不透明度 C=d×A+(1-d)×B 相对于不透明度而言,其反义就是透明度。 这两个术语之间的关系就类似于正负之间的关系:100%的不透明度就是0%的透明度。 该混合模式相对来说比较简单,在该混合模式下, 如果两个图层的叠放顺序不一样,其结果也是不一样的(当然50%透明除外)。 该公式也应用于层蒙板,在这种情况下,d代表了蒙板图层中给定位置图层的亮度(d=颜色值/255), 下同,不再叙述。 2.Darken 变暗 B=A 则 C=A 该模式通过比较上下层像素后取相对较暗的像素作为输出, 注意,每个不同的颜色通道的像素都是独立的进行比较,色彩值相对较小的作为输出结果。 下层表示叠放次序位于下面的那个图层, 上层表示叠放次序位于上面的那个图层,下同,不再叙述。 3.Lighten 变亮 BA 则 C=B 该模式和前面的模式是相似,不同的是取色彩值较大的(也就是较亮的)作为输出结果。 4.Multiply 正片叠底 C=(A×B)/255 该效果将两层像素的标准色彩值(基于0..1之…

PS图层混合模式的计算公式 2020年5月16日
;

1.选择工具 适用于轮廓明显,并且主体边缘较光滑。场景:大部分。 2.通道抠图 适合主体和背景反差大。场景:头发丝 3.蒙版抠图 适用于主体含透明部分,并且背景较干净。场景:玻璃杯,冰块。 4.钢笔工具 主体轮廓较光滑,但是背景复杂和主体难以区分开。场景:前面方法都无法使用的时候不得以用此方法。

PS抠图方法总结 2020年5月15日
;

J CUT 声音先进,视频后进。 L CUT 声音还没结束,视频切到别处。 1.时长显示为帧数改为时间 https://jingyan.baidu.com/article/e52e361501552c40c60c51b5.html

剪辑术语及常用设置 2020年5月14日
;

一、在图层上「Ctrl + 左键单击」建立的选区是该图像的Alpha通道 具体解释就是:根据该图像中每个像素的不透明度值,建立该图像Alpha通道的选择程度。(这种选区我一般叫“不透明度选区”) Alpha通道我们都知道,是一个包含了不透明度信息的通道,是用来描述像素不透明度的一个参数。 其次在图层上建立选区时要知道一个规则:只有不透明度≥50%的像素,才会被蚂蚁线包围,不透明度<50%的像素,不会显示蚂蚁线。(这条规则不仅对「Ctrl + 左键单击」生效,对任意能在图层上建立选区的操作都生效,我暂且叫它“蚂蚁线规则”) 那有人可能会问,不透明度<50%的像素就没有被选中了吗?并不是的。 前面说了,选区只是建立了一个选择程度,也就是说只要不透明度>0%的像素,都会被选中(即使没有被蚂蚁线包围的像素),只是选中的程度不一样而已。 假设建立的选区中,A像素的不透明度为100%,那A像素将会被选中100%;B像素的不透明度为49%,则B像素将会被选中49%,且B像素周围不会出现蚂蚁线。若再将建立的选区填充红色(R255,G0,B0),则A像素将会被填充不透明度为100%的红色(表现为完全不透明的红色),而B像素只会被填充不透明度为49%的红色(表现为半透明的红色),虽然他们的颜色值不变,仍然为(R255,G0,B0)。 说完了图层,我们就来谈谈通道…

PS中“选择像素”的原理是什么? 2020年5月11日
;

1、附近小程序 这个功能推出很久,但还是培育状态。虽然不多,但流量还是有的。普通二三线城市每年几十个流量还是妥妥的。随着这种习惯慢慢普及,流量会持续向上。 2、好友分享 好友分享,除了某个东西特别有意思、有趣、还能学到东西。还可以考虑裂变功能:砍价、拼团、助力等。好友看到,自己想要。又会形成二次裂变。 3.微信群聊入口 小程序可转发到微信聊天对话框,支持好友私聊和微信群分享,在社交场景中相互传播,形成多个入口。这个入口相信大家并不陌生,甚至曾经一度感到厌烦。 小程序游戏全面开放之初,微信群充满着各种小游戏的分享,僵尸群也活跃了起来,一度让小程序分享打扰到用户,腾讯快速对小程序游戏的分享做出规范,规范小游戏的滥用分享,但不得不说,正是因为分享,小游戏才有了瞬间爆发。 4.主界面下拉菜单 下拉可以在较短的时间内,通过用户的记忆留存,获得高曝光,因此有极高的几率吸引用户再次进入。 而且“我的小程序”可以像微信公众号一样被关注,不会被最近使用的小程序冲走。那些工具类小程序或者极具创意的小程序将是这个入口的最大获益者。 5.搜索入口 微信的搜一搜功能不仅可以找个人号、公众号,还可搜索小程序。输入相关关键词就能够找到相应的小程序。 大家知道,我们需要找什么东西的时候才会用到搜索,因此搜索场景来的流量都十分精准。而且今年下半年开放了“品牌搜索”和“服务搜索…

小程序入口列表 2020年5月4日
;

<view class="li" bindtap="connectWifi"> <image src="/images/wifi.png"></image> <text>连接WIFI</text> </view> connectWifi: function () { var that = this; //检测手机型号 wx.getSystemInfo({ success: function (res) { var system = ”; if (res.platform == ‘android’) system = parseInt(res.system.substr(8)); if (res.platform == ‘ios’) system = parseInt(res.system.substr(4)); if (res.platform == ‘android’ && system < 6) { wx.showToast({ title: ‘手机版本不支持’, }) return } if (res.platform == ‘ios’ && system < …

小程序一键连wifi 2020年5月4日
;

1.新建一个json文件,localstorage_b72da75d79277d2f5f9c30c9177be57e.json { "show": false, "currentCategory": "general", "compiler": { "clusterCompile": false, "autoPreview": false, "autoRemoteDebug": false }, "general": { "openLastModifiedProject": true, "autoPreviewType": "mobile", "autoRemoteDebugType": "mobile", "maxLogLength": 300, "enableNewFW": true, "enableGPU": false, "ignoreUnsafeProxy": false, "locale…

微信开发者工具突然黑屏无法启动 2020年4月23日
;

1.高德 http://bgc.amap.com/

地图标注 2020年4月21日
;

1.模糊查询 单字段 var keyWord = ‘abc’ const db = wx.cloud.database() const _ = db.command db.collection(‘product’).where({ title: { $regex: ‘.*’ + keyWord, $options: ‘i’ } }).get() 多字段 var keyWord = ‘abc’ const db = wx.cloud.database() const _ = db.command db.collection(‘product’).where(_.or([ { title: db.RegExp({ regexp: ‘.*’ + keyWord, options: ‘i’, }) }, { subtitle: db.RegExp({ regexp: ‘.*’ + keyWord, options: ‘i’, }) } ])).get() 2.多个条件中的一个 const _ = db.command db.collection(‘todos’).where({ progress: _.in([0, 100]) }) .get({ success: console.log, fail: console.error }) 3.基于时间范…

云函数数据库操作 2020年4月15日
;

1.登录到微信支付(https://pay.weixin.qq.com/),提交各种企业资料开通微信支付功能 2.获取商户号和API密钥(初次设置需要先设置操作密码) 小程序端: testWxCloudPay: function () { wx.cloud.callFunction({ name: ‘getPay’, // data: {body:"body",attach:"attach",total_fee:1}, // 可传入相关参数。 success: res => { console.log(res.result) if (!res.result.appId) return wx.requestPayment({ …res.result, success: res => { console.log(res) } }) } }) }, 云函数getPay: const key = "ABC…XYZ" //换成你的商户key,32位 const mch_id = "1413092000" //换成你的商户号 //以下全部照抄即可 const cloud = require(‘wx-server-sdk’) const rp = requi…

小程序云开发接入微信支付 2020年4月15日
;

环境初始化 1.创建新项目,启用云函数 2.所有文件复制后,云函数需要现在本地安装依赖包,再上传到云端 3.手动创建数据库,并确保权限无误,初始化config表 4.数据库设置索引,应为所有需要成为查询条件的字段建立索引 5.确保开发工具中的基础库版本一致 支付成功后发送提示消息 6.小程序后台添加订阅消息,注意不同行业消息字段不同 7.前端及云函数代码中都要填写模板ID,同时检查对应字段参数 客服 8.小程序后台添加客服,有新消息在“客服小助手”中回复 客服自动回复 9.云开发控制台->全局设置->添加消息推送配置->设置要触发的云函数(生效好像有延迟,刚添加不生效,等一会就好了) 小程序菊花码 10.images目录下小程序码更换 其他问题 11.如有奇怪问题可以查看基础库版本2.11.2

商城部署注意事项 2020年4月15日
;

1 背景 在PC端反抓取过程中为了识别爬虫,其中一种方式通过上报请求者的设备信息,通过设备信息来识别是否是一个爬虫。 当请求目标网站后,必须请求一个指纹计算脚本,该脚本收集设备信息,根据这些设备信息计算出一段数值并作为指纹,最终将计算结果发送给服务器。 浏览器设备信息包括navigator.userAgent、window.screen、navigator.languages等。抓取者在抓取时通常会自己构造请求、或使用无头浏览器工具,例如phantomJs。而这些工具的设备信息实际上会和真实浏览器有一定差异。因此根据这些差异达到识别的目的。 2 指纹脚本 以github上一个指纹库[1]为例,其中检测虚假浏览器的代码片段如下。 var getHasLiedBrowser = function () { var userAgent = navigator.userAgent.toLowerCase() var productSub = navigator.productSub // we extract the browser from the user agent (respect the order of the tests) var browser if (userAgent.indexOf(‘firefox’) >= 0) { b…

反爬虫之浏览器指纹上报代码的分析 2020年4月9日
;

Automated auditing, performance metrics, and best practices for the web https://github.com/GoogleChrome/lighthouse 1、在chrome开发者工具中使用lighthouse Lighthouse是直接集成到chrome开发者工具中的,位于‘Audits’面板下。 2、使用Node Cli npm install -g lighthouse lighthouse http://willless.com/

Lighthouse前端性能优化测试工具 2020年4月9日
;

1.下载 http://airtest.netease.com/changelog.html 2.手机开启usb调试 华为手机开启方式 https://jingyan.baidu.com/article/a3aad71a0a4c4eb1fb00963a.html 3.AirtestIDE中操作 http://airtest.netease.com/docs/cn/2_device_connection/1_android_phone_connection.html https://www.cnblogs.com/xieqiankun/p/use_airtest.html

AirtestIDE进行小程序ui测试 2020年4月8日
;

1.图片绘制到canvas <canvas type="2d" id="canvas"></canvas> <view catchtap="canvasSave">保存到相册</view> onLoad: function (options) { wx.createSelectorQuery() .select(‘#canvas’) .fields({ node: true, size: true, }) .exec(this.drawInit.bind(this)) }, drawInit: function (res) { const width = res[0].width const height = res[0].height const canvas = res[0].node const ctx = canvas.getContext(‘2d’) const dpr = wx.getSystemInfoSync().pixelRatio const canvasWidth = width * dpr const canvasHeight = height * dpr canvas.width = canvasWidth c…

小程序canvas生成分享图 2020年3月30日
;

1.单字段 var keyWord = ‘abc’ const db = wx.cloud.database() const _ = db.command db.collection(‘product’).where({ title: { $regex: ‘.*’ + keyWord, $options: ‘i’ } }).get() 2.多字段 var keyWord = ‘abc’ const db = wx.cloud.database() const _ = db.command db.collection(‘product’).where(_.or([ { title: db.RegExp({ regexp: ‘.*’ + keyWord, options: ‘i’, }) }, { subtitle: db.RegExp({ regexp: ‘.*’ + keyWord, options: ‘i’, }) } ])).get()

微信小程序云开发中模糊查询 2020年3月10日
;

说明:用户头像名称等作为公开数据以前需要通过wx.getUserInfo接口获取,这个过程中会有弹框让用户授权,估计是觉得这个流程小题大做了,因此现在这部分数据可以直接通过open-data组件展示,但是要进一步获取更多身份特征信息就需要用button组件。 方式一: <open-data type="userAvatarUrl"></open-data> <open-data type="userNickName"></open-data> 方式二: <button open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo">获取用户信息</button> onGotUserInfo: function (e) { console.log(e.detail.errMsg) console.log(e.detail.userInfo) console.log(e.detail.rawData) } 授权弹框中已经没有了拒绝按钮,因此可以重复弹出 其它: 云开发方式默认已经获取到了openid因此w…

wx.getUserInfo接口废弃,改用button和open-data 2020年3月2日
;

1.svg标签直接在页面中 svg { fill: currentColor; //currentColor为css变量,自动读取当前元素颜色 } 2.通过img引入的svg文件 此时css对svg文件无法生效,此时要用到CSS3滤镜filter中的drop-shadow,通过生产一个可指定颜色的阴影放置于svg的位置,并将原始svg移出视线 <img src="img/success.svg"> img{ position: relative; left: -80px; filter: drop-shadow(#fff 80px 0); } 备注:drop-shadow可用于png图片变色

通过img引入的svg如何改颜色? 2020年2月21日
;

1.问题描述 通过addEventListener添加事件,代码多次触发后会导致重复的click事件累加 2.问题原因 addEventListener对同一个事件是可以多次添加的,多次调用就会重复添加 3.解决方案一,每次添加后通过removeEventListener将其注销 var btn = document.getElementById(‘btn’); // 添加事件绑定 btn.addEventListener(‘click’, btnClick, false); // 按钮点击方法 function btnClick() { console.log(‘hello’); // 删除事件绑定 btn.removeEventListener(‘click’, btnClick, false); } 4.解决方案二,通过onclick的方式添加,这样的事件只会添加一次

js中click事件多次触发的处理 2020年2月19日
;

1.作用 元素内通过字符串添加节点 2.jquery中使用 $ele.append(‘<div id="two">two</div>’); 3.原生api var d1 = document.getElementById(‘one’); d1.insertAdjacentHTML(‘afterend’, ‘<div id="two">two</div>’); 第一个参数为插入的位置 <!– beforebegin –> <p> <!– afterbegin –> foo <!– beforeend –> </p> <!– afterend –> 4.其它方法appendChild 参数必须为node类型,通过createElement创建,遇到多层嵌套,较为繁琐 5.另一种方法innerHTML拼接 先获取本来的innerHTML和新追加的部分拼接到一起,再重新赋值给innerHTML 6.如何把字符串模板转为node节点 var str='<div><span>aaa</span></div>’; let tempNod…

原生js使用insertAdjacentHTML实现jquery中的append功能 2020年2月19日
;

1.问题描述 在不同的DOM元素之间通过拖拽实现内容交换,此时对正在交互中的元素用一个active类做标记,drag离开后取消active,需求本身很简单,但是实现过程中发现每次从对象元素进入子元素中也会触发dragleave。 dragenter,dragleave的触发类似于mouseover,mouseout而满足当前需求的mouseenter,mouseleave在drap中并没有 2.解决方案,在所操纵dom元素的子元素上添加元素穿透 .dom *{pointer-events: none;} 缺点:导致所有子元素上的事件失效 3.鼠标最终跑出父元素的上一个事件是dragenter,而目标恰好就是父元素自身 var lastenter = null; item.addEventListener(‘dragenter’,function(e){ lastenter = e.target; this.classList.add(‘active’); }); item.addEventListener(‘dragleave’,function(e){ if(lastenter==this){ this.classList.remove(‘active’); } }); 4.相关知识 drag事件 被我们拖的元素(按住鼠标) ondrags…

禁止dragleave事件在对象元素的子元素中触发 2020年2月18日