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>
选项。我试图找到一个理想的线程数作为
我知道默认的-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时出现颜色不匹配