【问题标题】:ffmpeg and gnu parallelffmpeg 和 gnu 并行
【发布时间】:2013-08-16 03:38:35
【问题描述】:

我的工作需要我在几天内编码几千部电影。每部电影都需要以 3 种不同的格式进行编码。我使用 ffmpeg 将这些格式与输入源的单次读取并行输出,如下所述:http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs

此外,我正在使用 GNU Parallel 对多个视频文件进行并行编码。我们有四个不同配置(48、32、16 和 16 核)的刀片服务器并行编码视频。理想情况下,我们应该能够并行编码 112 个视频。

但是,似乎在内核较少的机器上编码完成得更快。我在大约 4 个小时内在 16 个核心服务器上完成了 16 个编码,而在 48 个核心系统上完成 48 个编码需要将近 10 个小时。瓶颈可能是什么?一个典型的encode命令如下:

ffmpeg -i sample.mpg -y -vcodec libx264 -vprofile baseline -level 30 -acodec libfdk_aac -ab 128k -ac 2 -b:v 500K -threads 1  encoded/sample_enc.mp4

高度赞赏任何指针。谢谢!

【问题讨论】:

  • 存储可能是瓶颈。它看起来像是您正在使用的某种共享存储。是 NFS 共享吗?查看刀片上的 CPU 负载结构,以检查进程是否正在等待 IO 或忙于等待其他操作系统资源。
  • 确实,我猜存储是一个瓶颈。不幸的是,我没有时间从收到的便携式驱动器中复制内容。复制 TB 的数据本身需要一段时间。我只是将它们附加到服务器并开始编码。现在,我正在尝试 alexbuisson 的建议。几个小时后会更新。

标签: parallel-processing ffmpeg gnu-parallel


【解决方案1】:

在几个 n 核上分割 1 个编码是可以的,但 n 个并行编码每个核 1 会导致带宽饱和...

尝试为每个转码器激活 4 个线程以加快 1 个视频的吞吐量,并将并行编码的视频数量限制为 2 或 3 个,但这取决于您拥有的内存、带宽和视频(SD与高清为例)

【讨论】:

  • 谢谢!将立即尝试并在此处发布结果。任何最佳并行编码的经验法则和每个编码使用的线程数,还是我需要通过反复试验来找到正确的数字?非常感谢您的帮助。
  • 如果存在规则一定是复杂的,因为有很多关于分布式编码的论文......
  • 我敢打赌,这会很复杂。好吧,我听从了你的建议,到目前为止效果很好。我现在使用带有“-threads 4”选项的 ffmpeg,并使用带有“-j 25%”选项的 gnu 并行,并且能够每小时在 16 个内核上生成 4 个完整的编码(所有三种格式)。谢谢!
  • 正如 Dmitri 所建议的,IO 可能很快成为瓶颈,因为我观察到对于 32 或 48 核系统,使用上述参数和来自同一源磁盘的编码会降低平均值 - 我不每小时获得 8 或 12 个完整的编码,但需要更长的时间。但是,无论如何,它比我最初发布的旧方案要快。
  • 感谢您的消息,看来您已经准备好监控和优化您的系统了。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2014-04-20
  • 2012-08-31
  • 2018-06-09
  • 2019-09-23
相关资源
最近更新 更多