我一直在努力使用FFMPEG和x264对视频进行编码。在Quicktime中播放时输出会断断续续,而在VLC中,它会在同一位置Quicktime断断续续地显示大量压缩瑕疵。因此,看起来Quicktime是口吃的,因为它试图压制腐败/文物。
视频中有很多随机动作,包括75%像素将以随机间隔变化的帧(视频是软件生成的,因此它是真正的伪随机)。压缩似乎在这些可能检测到场景切换的地方窒息。不正确。它似乎也会定期窒息,我猜它正在做一个关键帧。
我的编码预设基于FFMPEG附带的x264-hq预设。我尝试关闭场景剪切检测,并使用keyint
/ g
和keyint_min
选项进行播放。将g
设置为1会使其工作,但会使文件大小失效。我尝试过无损预设,但他们在Quicktime中根本无法播放。奇怪的是,在使用分辨率较低的测试视频(1440x810)时,我没有遇到任何问题。
这是我现在拥有的预设,它有效,但产生的文件比(非工作)hq预设产量大约60%。有没有办法改善这个?文件大小并不重要,我只想要一些可以在任何地方播放并且质量非常高的东西。
coder=1 flags=+loop cmp=+chroma partitions=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8 me_method=umh subq=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 refs=4 trellis=1 flags2=+dct8x8+wpred+bpyramid+mixed_refs wpredp=2
这是命令:
ffmpeg \ -r 60 -i "frame-%06d.tiff" \ -vcodec libx264 -vpre my_preset \ -threads 0 \ -r 60 -an -f out.mp4
答案 0 :(得分:2)
如果可能,使用多遍编码,这将使H264有机会检测场景变化并为它们做好准备。
为什么要将sc_threshold
设置为零?
不要过于宽容大文件大小,如果瞬时比特率超过存储设备(包括网络)的传输速率,就会发生口吃。 1080p内容应该在10mbit / sec以下轻松编码。