使用avs脚本自适应去掉视频重复帧

来源:互联网 发布:友价源码怎么样 编辑:程序博客网 时间:2024/06/05 04:36

本来是录屏来着,后来发现由于电脑问题,录制下来的视频有明显的卡顿


后来就想到要抽取视频操作中画面相同的帧(不是普通的间隔抽帧),不高兴自己写程序了

就想到ae或者edius中处理,但是发现没有可用的插件


于是继续往上找旁门左道


发现avs(AviSynth)可以脚本控制视频压缩,另外也可以下载到一个插件进行抽帧dedup

下载了插件,然后发现AviSynth没有界面,无奈再下个软件megui进行视频转换


LoadPlugin("C:\Program Files\avisynth 2.5\plugins\dedup.dll")avisource("C:\test.avi")DupMC(log="log.txt")DeDup(threshold=0.00001, trigger2=100, show=false, dec=true, maxcopies=20, maxdrops=20, log="log.txt", times="times.txt")

上面就是自适应抽重复帧的代码,网上找的,开始发现也比较不靠谱

后来试了好一会才成功,

主要错误有

first pass missed frame 0

这个是由于没有生成log文件造成的,


这里面需要用两部分进行,第一步是检测帧之间的相同率,第二部才是抽帧和转换


第一步,有时候也会就是在avs中写脚本,其实后来发现不用……直接用记事本就行了,改个后缀avs,(中间还下了个AVSWriter,发现完全没必要)

开始时代码中的前三句就成,然后改好了需要处理视频的地址后

直接拖入script之后成功 就自动回跳出视频,如果有不成功的,就会爆各种错,一般是avi格式有问题,丢到各种转换视频工具里转个标准avi格式出来吧

此时不要关闭跳出来的视频,什么的都不动的情况下,你会发现目录中多了一个log文件,没错就是log.txt记录帧与帧之间的差异的

打开看看发现里面只有几行

所以现在要做的就是把进度条拉到开始,进行播放就行了,播放完了后 ,log里面记录就全了

如下

...

frm 50: diff from frm 51 = 21.6560% at (224,224)
frm 38: diff from frm 39 = 0.0382% at (448,0)
frm 32: diff from frm 33 = 6.5185% at (448,192)
frm 25: diff from frm 26 = 0.3250% at (512,224)
frm 20: diff from frm 21 = 12.3163% at (480,224)
frm 15: diff from frm 16 = 13.6303% at (512,256)
frm 12: diff from frm 13 = 12.7086% at (512,288)
frm 10: diff from frm 11 = 11.5168% at (512,288)
frm 8: diff from frm 9 = 5.3191% at (544,288)
frm 6: diff from frm 7 = 0.4933% at (96,224)

...


然后把视频关了,其他什么都别动,把脚本三句脚本最后一句删了,改成上面四句的最后一句,

再次拖进去,一般不会报错,如果有错,看看log文件生成对了吗,对了一般就没错了


然后就能选右下角自动编码了,一路点下去,最好也导出avi的,最后确认就行了



抽完之后的视频明显流畅很多了,

不满意的话还能调节DeDup参数,扩大阈值就会抽掉更多,但是每次最多只能抽20,这个比较怨念,但也容易解决






0 0
原创粉丝点击