FFmpeg 中用于最快转换为 h264 的线程计数选项?

Posted

技术标签:

【中文标题】FFmpeg 中用于最快转换为 h264 的线程计数选项?【英文标题】:Thread count option in FFmpeg for FASTEST conversion to h264? 【发布时间】:2011-11-14 20:25:06 【问题描述】:

在使用 FFmpeg 将视频转换为 h264 时,我需要最大化速度

任何输入格式的源视频 用户的机器可以有任意数量的内核 电源和内存消耗不是问题

当然,有很多选项可以调整,但这个问题特别是关于选择最佳 -thread <count> 选项。我试图找到一个理想的线程数作为

的函数 没有。核心数 输入视频格式 h264 友好值可能吗? 上面还有什么遗漏的吗?

我知道默认的-thread 0 遵循每核一个线程的方法,这应该是最佳的。但我不确定这是时间优化还是空间优化。此外,在某些测试用例中,我看到更多线程(比如我的双核测试机器上的 4 个线程)比默认完成更快。

任何其他方向,比如配置选项 w.r.t。线程,值得追求吗?

【问题讨论】:

是 -threads x 不是 -thread x。 【参考方案1】:

我已经对线程 0、6、12、24 进行了彻底的试验,它在帧速率、整体处理时间或 CPU 利用率方面没有任何区别。请注意,我的系统也有 12 个物理内核。一般来说,在不指定线程的情况下使用你的处理能力似乎做得很好,我的 12 个内核在观看顶部/系统监视器期间基本上被 98-99% 使用。

我希望有一个灵丹妙药,但目前没有其他方法可以加快速度,因为我认为 ffmpeg 目前优化得非常好。唯一的选择就是获得更多的计算能力或进行分布式处理。

*注意我所有的测试都是使用 ffmpeg 版本 3.3.1

【讨论】:

【参考方案2】:

我发现threads 没有很好地利用所有内核,根本没有使用超线程。我可以提出的一种解决方案是并行运行 3 到 4 个 ffmpeg 进程,请参阅:https://superuser.com/questions/538164/how-many-instances-of-ffmpeg-commands-can-i-run-in-parallel/547340#547340 这种方法最终会完全使用所有内核,并且比单个命令选项中的单个输入、多个输出更快。

【讨论】:

您是明确将threads 锁定为 1 还是将其保留为 0(有人称之为自动或“最佳”)?【参考方案3】:

如果您的“双核”具有超线程,那么 2x 内核可能是正确的。超出虚拟内核的数量(包括超线程)不太可能获得收益,但可能由于 FFmpeg 的内部问题,这可能是真的。

【讨论】:

以上是关于FFmpeg 中用于最快转换为 h264 的线程计数选项?的主要内容,如果未能解决你的问题,请参考以下文章

PHP FFMPEG - 将.mov转换为.mp4(H264)

将视频转换为 H264 时出现无法识别的选项“c:v”ffmpeg 错误

使用FFMPEG从NV12原始数据转换为H264时出现颜色不匹配

如何将yuv编码为h264,自己编码或者ffmpeg都可以。

将 H264 视频转换为原始 YUV 格式

视频学习笔记:Android ffmpeg解码多路h264视频并显示