我有一些大约 2k kbps 的流撕裂,我想减少。
ffmpeg -ss 4:00 -to 4:10 -i in.mp4 -an -vcodec libx265 -crf 26 -preset slow 26s.mp4
ffmpeg -ss 4:00 -to 4:10 -i in.mp4 -an -vcodec libx265 -crf 26 -preset slow -vf fps=30 26sr.mp4
Run Code Online (Sandbox Code Playgroud)
第一个是 60 fps 和 839 KB。第二个是 30 fps 和 807 KB。为什么差别这么小?
Mar*_*ler 12
因为在视频编解码器中,记录帧之间的差异,很少记录完整帧。在现代视频编解码器中,尤其是x265,预测技术(主要是运动预测)用于甚至不存储场景元素何时以与之前相同的速度移动。
\n因此,通过删除帧,您可以使彼此跟随的帧更加独立,从而包含更多信息,即使信息只有一半。
\n特别是:您特别要求编码器大致实现相同的视觉质量 \xe2\x80\x93 CRF \xe2\x80\x93 ,这意味着如果一个帧与其他帧更加不同,它将使用更高的量化进行编码,产生更多位。这正是您通过 CRF 设置表达的意图!如果您想要较小的文件,请减少 CRF 设置,或通过运行来获取平均比特率设置
\n-b:v {desired bitrate, e.g. 200k} -x265-params pass=1 -f null /dev/null
在第一次通过时,并且-b:v {same as above} -x265-params pass=2 26s.mp4
在第二次通过时。另一个技巧,特别是在运动可能是零星的视频材料中(视频通话参与者的视频!但可能更重要的是监控视频、动物园网络摄像头),是根本不指定帧速率 \xe2\x80\x93对于场景中某些部分没有太大变化,而在其他部分,出现快速视觉差异 \xe2\x80\x93 但使用自适应帧速率的情况非常有用。对于 ffmpeg 中的 x265,就是这样-vsync 2
;当然,您需要将-vf fps=...
其删除才能正常工作。