如何使用 ffmpeg 将 mp4 快速转换为 webm?

pr.*_*zar 22 video conversion ffmpeg mp4 webm

为了使用 HTML5 视频的网站,我必须将 76 个 mp4 文件转换为 webm。我说的是 10 Gb 的 mp4 文件......我知道我可以简单地要求 ffmpeg 使用:

ffmpeg -i input_file.mp4 output_file.webm
Run Code Online (Sandbox Code Playgroud)

当然,我会通过以下方式递归地执行此操作:

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" "${0%%.mp4}.webm"' {} \;
Run Code Online (Sandbox Code Playgroud)

我什至尝试了一些我在互联网上找到的东西:

ffmpeg -i input_file.mp4 -cpu-used 4 -threads 8 output_file.webm
Run Code Online (Sandbox Code Playgroud)

但问题是它不会花我不到一周的时间!!!我究竟做错了什么?有没有办法加快速度?如果我转换为 ogg 会提高速度吗?请帮忙!!!

tho*_*ter 11

转码视频需要时间。它还需要更多关于编码参数的知识;ffmpeg 的默认值不太可能适合您,甚至可能无法创建可用的输出文件。

这是一个开始:

使用 ffmpeg 编码 webm(已存档)

这些设置将编码为特定的平均比特率(3900kbit 的视频比特率),因此比特率会出现峰值。

MP4和WebM使用不同的视频编解码器,所以没有捷径;视频必须转码。

当然,编码速度会因帧大小、帧速率和质量设置而有很大差异。对于 720p 编码,您可能希望能够在过去几年的 CPU 上编码大约 1:1(即 10 小时内 10 小时的视频)。如果您像链接中给出的示例那样进行两次 ABR 编码,则几乎翻倍。


pr.*_*zar 10

加倍还是减半?所以这是一个死胡同..我不会玩比特率,我永远不知道对质量或大小有什么期望..我想我会坚持这个并让客户坚持到转换结束..

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 "${0%%.mp4}.webm"' {} \;
Run Code Online (Sandbox Code Playgroud)

我正在为未来的用户发布它,实际上我提高了速度,但我的 CPU 工作得非常糟糕:每个内核 60% 到 80%!现在我认为它会花费更少的时间:3 天而不是 6 或 7 天..我希望它不会破坏它..^_^

无论如何谢谢你!

编辑:在 LordNeckbeard 和 neon_overload -sameq评论后删除了开关 -sameq 并不意味着相同的“质量”

  • [`-sameq` 不代表“相同质量”](http://superuser.com/a/478550/110524) 已被上游移除。不要使用它。有关详细的 libvpx 编码说明,请参阅我对您的问题的评论中的链接。 (3认同)
  • -sameq 表示相同的量化器,但是不可能在 h.264 和 VP8 之间比较量化器,因此即使这样做确实有效,如果使用它,您几乎肯定会得到损坏的结果 - 所以不要。 (2认同)
  • 谢谢你让我注意到这一点!我编辑了我的回复.. ;) 实际上我没有使用那个开关,因为我看到它变得更慢了..我什至放弃了 ffmpeg 并使用了 avconv:它的方式更快!这项工作在一天半内完成: find ./ -name '*.mp4' -exec bash -c 'avconv -i "$0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 " ${0%%.mp4}.webm"' {} \; 我知道我用这条评论转移了话题,但我认为值得说出来..^_^希望它可以帮助别人!;) (2认同)