用于处理网络视频的 FFMPEG 性能设置
what FFMPEG performance settings to use for processing videos for the web
我有几个关于使用 ffmpeg 处理网络视频的问题。我是初学者所以请耐心等待(虽然我在互联网上阅读了一些文档)
性能
- 首先,考虑到FFMPEG 100%利用所有内核,实际的并行效率是多少?
让我们假设以下场景。我有一个视频(全高清,无论使用什么编码器/压缩格式来获取视频),我想使用 mp4 格式(因此使用 libx264)调整(缩小)到各种尺寸(例如 240px、480px 和 720px 高度)使用 aac 编解码器)。
使用 ffmpeg,我看到我笔记本电脑的所有内核 (8) 都以 100% 使用,我想知道哪些场景可以提高整个处理任务的整体性能。所以这导致我们基本上有两种情况:假设上面提到的视频作为输入,为了获得 3 个输出视频(@240px、480px 和 720px 高度尺寸),我们:
- 处理输入视频,一次获取1个输出视频,让所有核心100%同时工作;
- 通过将每个输出视频绑定到将以 100% 工作的单个处理器内核来处理视频以并行获取所有输出视频;
所以这个问题其实就归结为ffmpeg程序的并行效率。
这意味着让 ffmpeg 处理任务 procVideo
- 需要 1 个输入视频来产生 1 个单一输出视频(transcoding/downscaling 等等) - 在 N 个处理器内核上并不意味着它完成任务的速度比让它 运行 将同一任务绑定到单个内核快 N 倍。因此,如果效率小于 100%,最好并行执行 N procVideo
个任务,每个任务都绑定到一个内核,而不是对每个输出视频按顺序执行任务。
编解码器
除了上述性能问题外,编解码器的使用也让我很烦恼。由于 html5 浏览器中格式的广泛实施,我正在尝试获取 mp4 视频。
所以有一个视频作为任何格式的输入,我想将它转换为 mp4。所以我将 libx264 编解码器与 aac 一起使用。
- 对视频使用 libx264、x264 或 h264 encoding/decoding?
- 对音频使用 libfdk_aac、libaacplus 或 aac encoding/decoding 到 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 构建,这是获得优质音频的最安全选择。
许可费
这是一个非常敏感的话题。大多数人会直接拒绝给你建议,我也不例外,因为任何法律建议都意味着在诉讼中承担责任。
总结一下,请参阅以下网址:
- https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Patent_licensing
- https://en.wikipedia.org/wiki/Advanced_Audio_Coding#Licensing_and_patents
有些人可能会争辩说,理解信息的难度是故意的,目的是为了混淆一般人 public。
我有几个关于使用 ffmpeg 处理网络视频的问题。我是初学者所以请耐心等待(虽然我在互联网上阅读了一些文档)
性能
- 首先,考虑到FFMPEG 100%利用所有内核,实际的并行效率是多少?
让我们假设以下场景。我有一个视频(全高清,无论使用什么编码器/压缩格式来获取视频),我想使用 mp4 格式(因此使用 libx264)调整(缩小)到各种尺寸(例如 240px、480px 和 720px 高度)使用 aac 编解码器)。
使用 ffmpeg,我看到我笔记本电脑的所有内核 (8) 都以 100% 使用,我想知道哪些场景可以提高整个处理任务的整体性能。所以这导致我们基本上有两种情况:假设上面提到的视频作为输入,为了获得 3 个输出视频(@240px、480px 和 720px 高度尺寸),我们:
- 处理输入视频,一次获取1个输出视频,让所有核心100%同时工作;
- 通过将每个输出视频绑定到将以 100% 工作的单个处理器内核来处理视频以并行获取所有输出视频;
所以这个问题其实就归结为ffmpeg程序的并行效率。
这意味着让 ffmpeg 处理任务 procVideo
- 需要 1 个输入视频来产生 1 个单一输出视频(transcoding/downscaling 等等) - 在 N 个处理器内核上并不意味着它完成任务的速度比让它 运行 将同一任务绑定到单个内核快 N 倍。因此,如果效率小于 100%,最好并行执行 N procVideo
个任务,每个任务都绑定到一个内核,而不是对每个输出视频按顺序执行任务。
编解码器
除了上述性能问题外,编解码器的使用也让我很烦恼。由于 html5 浏览器中格式的广泛实施,我正在尝试获取 mp4 视频。
所以有一个视频作为任何格式的输入,我想将它转换为 mp4。所以我将 libx264 编解码器与 aac 一起使用。
- 对视频使用 libx264、x264 或 h264 encoding/decoding?
- 对音频使用 libfdk_aac、libaacplus 或 aac encoding/decoding 到 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 构建,这是获得优质音频的最安全选择。
许可费
这是一个非常敏感的话题。大多数人会直接拒绝给你建议,我也不例外,因为任何法律建议都意味着在诉讼中承担责任。
总结一下,请参阅以下网址:
- https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Patent_licensing
- https://en.wikipedia.org/wiki/Advanced_Audio_Coding#Licensing_and_patents
有些人可能会争辩说,理解信息的难度是故意的,目的是为了混淆一般人 public。