我一直在努力使用 FFMPEG 和 x264 对视频进行编码。在 Quicktime 中播放时输出会卡顿,而在 VLC 中,它会在 Quicktime 卡顿的相同位置显示大量压缩伪影。因此,Quicktime 似乎结结巴巴,因为它试图抑制损坏/伪影。
视频中有很多随机运动,包括 75% 的像素将以随机间隔变化的帧(视频是软件生成的,因此它是真正的伪随机)。在这些可能错误地检测到“场景剪辑”的地方,压缩似乎令人窒息。它似乎也每隔一段时间就会窒息,我猜它正在做一个关键帧。
我的编码预设基于 FFMPEG 附带的 x264-hq 预设。我试过关闭场景切换检测,并使用 keyint
/g
和 keyint_min
选项。设置g
到 1 使它工作,但吹出文件大小。我已经尝试过无损预设,但它们在 Quicktime 中根本无法播放。奇怪的是,在处理较低分辨率的测试视频 (1440x810) 时,我没有遇到任何问题。
这是我现在拥有的预设,它可以工作,但产生的文件比(非工作)hq 预设产生的文件大约大 60%。有什么办法可以改善这一点吗?文件大小并不重要,我只想要可以在任何地方播放并且质量非常高的东西。
编码器=1
标志=+循环
cmp=+色度
分区=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8
我的方法=嗯
子q=8
me_range=16
g=1
keyint_min=1
sc_threshold=0
i_qfactor=0.71
b_strategy=1crf=20
qcomp=0.6
qmin=20
qmax=51
qdiff=4
BF=16
引用=4
格子=1
flags2=+dct8x8+wpred+bpyramid+mixed_refs
wpredp=2
这是命令:
ffmpeg\
-r 60 -i "frame-%06d.tiff"\
-vcodec libx264 -vpre my_preset\
-线程0\
-r 60 -an -f out.mp4
最佳答案
如果可能,使用多 channel 编码,这将使 H264 有机会检测场景变化并为它们做好准备。
你为什么要设置 sc_threshold
归零?
不要太容忍大文件,如果瞬时比特率超过存储设备(包括网络)的传输率,就会发生卡顿。 1080p 内容应该很容易以低于 10mbit/sec 的速度进行编码。
关于video - 高动态 1080p 视频的影院质量 ffmpeg/x264 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8273322/