使用 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制作视频格式转换器的问题

使用FFmpeg对视频进行编解码的一般流程

Libav(ffmpeg)将解码的视频时间戳复制到编码器

ffmpeg/avconv:使用相同的编解码器和参数作为输入进行转码

音频 MP2 编码和解码产生半数据 C++ 和 FFMPEG

没有解码/编码的FFmpeg remux