2

我一直在努力使用 FFMPEG 和 x264 对视频进行编码。在 Quicktime 中播放时输出会卡顿,而在 VLC 中,它会在 Quicktime 卡顿的相同位置显示大量压缩伪影。因此,Quicktime 似乎结结巴巴,因为它试图抑制损坏/伪影。

视频中有很多随机运动,包括 75% 的像素将以随机间隔变化的帧(视频是软件生成的,因此它是真正的伪随机)。在这些可能错误地检测到“场景剪辑”的地方,压缩似乎令人窒息。它似乎也每隔一段时间就会窒息,我猜它正在做一个关键帧。

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

1 回答 1

2

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

你为什么把你的设置sc_threshold为零?

不要太容忍大文件大小,如果瞬时比特率超过存储设备(包括网络)的传输率,就会发生卡顿。1080p 内容应该很容易以低于 10mbit/sec 的速度进行编码。

于 2011-12-02T20:53:41.910 回答