使用 ffmpeg 进行最快解码的编码
Posted
技术标签:
【中文标题】使用 ffmpeg 进行最快解码的编码【英文标题】:Encoding for fastest decoding with ffmpeg 【发布时间】:2014-01-24 15:05:22 【问题描述】:使用 ffmpeg 和 libx264 进行编码,是否有可以优化解码速度的预设或标志?
现在似乎使用 Qtkit 以非常不同的速度解码具有相似文件大小的视频转码,我想知道是否有编码选项以使解码速度达到最大。
【问题讨论】:
如果您使用切片编码,您的解码器可以利用多线程(假设您的解码器可能会因此而加速,例如,单个流的解码是多核 CPU 的瓶颈。 @AlexCohn - 你能指出任何关于 ffmpeg 的“切片编码”的引用吗? 见mewiki.project357.com/wiki/X264_Settings#slices 和mewiki.project357.com/wiki/X264_Settings#sliced-threads。这种方法可能会减少 75% 的解码时间,但会牺牲质量。它仅与高分辨率帧相关。例如。 BlueRay Disk 需要 4 片。 @Nathaniel,您能否更详细地描述您的问题,因为您提到了重新编码。您可以选择降低分辨率吗? 【参考方案1】:如果您想以质量/压缩效率为代价优化解码速度,x264 中有 --tune fastdecode
(或 -tune fastdecode
,如果使用 ffmpeg)。在 libx264 中,调整设置可用作 x264_param_default_preset 的参数之一。
【讨论】:
这绝对有帮助(将它从 2fps 提高到 9 fps),但它仍然与以 30fps 播放的原始视频不同。不知何故,重新编码搞砸了:( 原件是如何编码的?是h264吗?什么是分辨率和硝酸盐?也许 ffmpeg dump 可以帮助更好地理解这些变化。 看起来-tune fastdecode -tune zerolatency
有效!我会接受答案,但您可能想在其中添加zerolatency
。干杯!
恕我直言,零延迟调整没有太多要解码的东西。如果您的解码器不支持帧线程,因此可能有助于解码的唯一选项是“--sliced-threads”,因此需要独立的切片进行多线程解码和“--bframes 0”,但B帧不应该太多比 P 帧慢。
@nmxprime 在使用 x264_param_default_preset() 获取默认参数时指定它。或者自己更改所需的参数by looking which params it changes in libx264【参考方案2】:
我以前用过这个:
-b
(去除 B 帧计算)
-maxrate 8M
(我发现这很重要,因为有时平均值的比特率分布很大,因此如果将平均值设置为 8M,您可能仍会发现 15M 的峰值)
-tune fastdecode
(上面已经解释过了)
【讨论】:
以上是关于使用 ffmpeg 进行最快解码的编码的主要内容,如果未能解决你的问题,请参考以下文章
ffmpeg/avconv:使用相同的编解码器和参数作为输入进行转码