用于处理网络视频的 FFMPEG 性能设置

what FFMPEG performance settings to use for processing videos for the web

我有几个关于使用 ffmpeg 处理网络视频的问题。我是初学者所以请耐心等待(虽然我在互联网上阅读了一些文档)

性能

让我们假设以下场景。我有一个视频(全高清,无论使用什么编码器/压缩格式来获取视频),我想使用 mp4 格式(因此使用 libx264)调整(缩小)到各种尺寸(例如 240px、480px 和 720px 高度)使用 aac 编解码器)。

使用 ffmpeg,我看到我笔记本电脑的所有内核 (8) 都以 100% 使用,我想知道哪些场景可以提高整个处理任务的整体性能。所以这导致我们基本上有两种情况:假设上面提到的视频作为输入,为了获得 3 个输出视频(@240px、480px 和 720px 高度尺寸),我们:

  1. 处理输入视频,一次获取1个输出视频,让所有核心100%同时工作;
  2. 通过将每个输出视频绑定到将以 100% 工作的单个处理器内核来处理视频以并行获取所有输出视频;

所以这个问题其实就归结为ffmpeg程序的并行效率。

这意味着让 ffmpeg 处理任务 procVideo - 需要 1 个输入视频来产生 1 个单一输出视频(transcoding/downscaling 等等) - 在 N 个处理器内核上并不意味着它完成任务的速度比让它 运行 将同一任务绑定到单个内核快 N 倍。因此,如果效率小于 100%,最好并行执行 N procVideo 个任务,每个任务都绑定到一个内核,而不是对每个输出视频按顺序执行任务。


编解码器

除了上述性能问题外,编解码器的使用也让我很烦恼。由于 html5 浏览器中格式的广泛实施,我正在尝试获取 mp4 视频。

所以有一个视频作为任何格式的输入,我想将它转换为 mp4。所以我将 libx264 编解码器与 aac 一起使用。

此外,我想知道上述每种编解码器的许可费用是多少,因为这些编解码器的在线资源非常有限/难以理解。

如果有人能阐明这些问题,我将不胜感激!感谢您的宝贵时间!

这里有几个不相关的问题。

FFmpeg 性能

以下所有内容均基于我的个人经验,绝不是经验证据。

尽你所能,你会很难找到一个性能比 FFmpeg 更优化的软件。 另请记住,本例中的大部分工作将由 libx264 完成,它非常成熟且速度极快。 (只需尝试使用 ffmpeg 和尚未成熟的 x265 将等效视频编码为 H.265,您就会明白我的意思)。

所以总而言之,您可以假设单个编码在机器上尽可能快,并行化不会改进任何东西。

另一种测试解决方案是要求 ffmpeg 在一次调用中对多个文件进行编码,以便管道的解码部分只完成一次,如此处解释:https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs.

最后,您应该通过仔细测量每个场景的总编码时间来测试每个案例。

编解码器

x264 和 libx264 是一回事,区别在于后者是 ffmpeg 使用的,而不是一个独立的工具。 "h264",我不确定你的意思。在ffmpeg中,h264只是解码器,而libx264是编码器。你没有太多选择。

关于 AAC,所有重要信息都在该网页中:https://trac.ffmpeg.org/wiki/Encode/AAC 因此,如果您可以获得与 libfdk_aac 链接的 ffmpeg 构建,这是获得优质音频的最安全选择。

许可费

这是一个非常敏感的话题。大多数人会直接拒绝给你建议,我也不例外,因为任何法律建议都意味着在诉讼中承担责任。

总结一下,请参阅以下网址:

有些人可能会争辩说,理解信息的难度是故意的,目的是为了混淆一般人 public。