高动态1080p视频的戏剧性质ffmpeg / x264编码

时间:2011-11-25 19:10:15

标签: video encoding ffmpeg h.264 x264

我一直在努力使用FFMPEG和x264对视频进行编码。在Quicktime中播放时输出会断断续续,而在VLC中,它会在同一位置Quicktime断断续续地显示大量压缩瑕疵。因此,看起来Quicktime是口吃的,因为它试图压制腐败/文物。

视频中有很多随机动作,包括75%像素将以随机间隔变化的帧(视频是软件生成的,因此它是真正的伪随机)。压缩似乎在这些可能检测到场景切换的地方窒息。不正确。它似乎也会定期窒息,我猜它正在做一个关键帧。

我的编码预设基于FFMPEG附带的x264-hq预设。我尝试关闭场景剪切检测,并使用keyint / gkeyint_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

1 个答案:

答案 0 :(得分:2)

如果可能,使用多遍编码,这将使H264有机会检测场景变化并为它们做好准备。

为什么要将sc_threshold设置为零?

不要过于宽容大文件大小,如果瞬时比特率超过存储设备(包括网络)的传输速率,就会发生口吃。 1080p内容应该在10mbit / sec以下轻松编码。