|
本帖最后由 孤雨独火 于 2021-3-29 02:25 编辑
我进行了一些判断测试,,最早那个楼层,你问我如何在vpy里直接限制触发帧率的条件,我没找到就引用这个了
把帧率条件写进vpy里就可以mpv.conf里常驻。实例我已经写进mvtools-fast.vpy,其它还没改。这样的话vs相当于始终挂机,切换到要用的片源的时候开始工作(少一点点频繁快捷键开启、关闭的卡顿时间)
然后这样的话我觉得引用的那层楼脚本可以修改的更加完善
- import vapoursynth as vs
- core = vs.core
- if (container_fps < 32):
- clip = video_in.resize.Bilinear(format=vs.YUV420P8)
- vden = 1000
- vfps = container_fps*vden
- dden = 1000
- dfps = container_fps*2*dden
- clip = core.std.AssumeFPS(clip, fpsnum=vfps, fpsden=vden)
- super = core.mv.Super(clip, pel=1, sharp=0, rfilter=2)
- mvfw = core.mv.Analyse(super, blksize=32, isb=False, search=2, searchparam=2)
- mvbw = core.mv.Analyse(super, blksize=32, isb=True, search=2, searchparam=2)
- mvfw = core.mv.Recalculate(super, mvfw, blksize=16, search=2, searchparam=1, thsad=200)
- mvbw = core.mv.Recalculate(super, mvbw, blksize=16, search=2, searchparam=1, thsad=200)
- clip = core.mv.BlockFPS(clip, super, mvbw, mvfw, num=dfps, den=dden)
-
- ##num/den=目标帧率
-
- clip.set_output()
复制代码
if (container_fps < 32): 这个判断条件的位置,如果写在 clip=video.in 这行后边,那么不管什么帧率的视频都要先进vs然后 clip.set_output() 滚一圈再出来(即使中间没有进行额外操作),实际表现是高码率视频会莫名其妙的丢帧。所以思路是写在前面,减少解码渲染中多余的操作。
关于帧率我也多留了一点冗余(实际31应该满足我的要求),因为之前测试的时候,我设置的小于30,但是实际遇到30帧的视频依旧补帧(可能是视频源问题我当时没有细纠)
|
|