如何使用bash命令或Ruby使用ffmpeg将mp4文件批转换为ogg

如何使用bash命令或Ruby使用ffmpeg将mp4文件批转换为ogg,ruby,video,ffmpeg,html5-video,ogg,Ruby,Video,Ffmpeg,Html5 Video,Ogg,我在运行OSX,对视频转换一无所知。但我有200个视频都是mp4格式的,不会在Firefox中播放。我需要将它们转换成ogg来使用html5视频标签 这些文件位于文件夹结构中,因此很难一次处理一个文件。我希望bash命令或Ruby命令遍历所有子文件夹,找到所有.mp4并转换它们 我找到了一个关于如何使用谷歌的参考资料: 但是不知道如何将它从linux转换为osx。这是使用Ruby,假设您使用的ffmpeg是正确的: Dir.glob("**/*.mp4").each do |filename|

我在运行OSX,对视频转换一无所知。但我有200个视频都是mp4格式的,不会在Firefox中播放。我需要将它们转换成ogg来使用html5视频标签

这些文件位于文件夹结构中,因此很难一次处理一个文件。我希望bash命令或Ruby命令遍历所有子文件夹,找到所有.mp4并转换它们

我找到了一个关于如何使用谷歌的参考资料:


但是不知道如何将它从linux转换为osx。

这是使用Ruby,假设您使用的ffmpeg是正确的:

Dir.glob("**/*.mp4").each do |filename|
  new_filename = File.join(
    File.dirname(filename),
    "#{File.basename(filename, ".mp4")}.ogg")
  `ffmpeg -i "#{filename}" -acodec vorbis -vcodec libtheora "#{new_filename}"`
end

带有
“***.mp4”的Dir.glob
递归地匹配扩展名为.mp4的子目录中的所有文件。

而您的问题的直接答案如下:

#!/bin/bash
MOVIES=~/Movies/
find "$MOVIES" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mp4}.ogg"' {} \;
exit;
我认为您可能会发现使用的结果更好,因为它会给您带来更好的结果,并且实际上是在现代版本的Firefox中。鉴于此,您应该尝试以下方法:

#!/bin/bash
MOVIES=~/Movies/
find "$MOVIES" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mp4}.webm"' {} \;
exit;

这两种方法都会导致生成的视频质量下降,因为它们会对已编码的材料进行重新编码,而且在我看来,即使是webm编解码器也不如使用h.264编解码器正确编码的MP4好。

谢谢您的回答,但它返回:ruby convert.rb convert.rb:3:in
block-in::未定义的局部变量或main:Object(NameError)的方法
file'是否有任何方法可以使用ffmpg设置帧速率或其他设置来提高命令的质量?请确保-r标记将设置帧速率,并且您可以使用-b:v标记设置比特率,这样您就可以使用以下内容:
#/bin/bash MOVIES=~/MOVIES/find“$MOVIES”-name'*.mp4'-exec sh-c'ffmpeg-i“$0”-r 23.976-b:v 800k-bt 800k-sameq-sameq“${0%%.mp4}.webm”{};退出在这种情况下,不建议使用
-sameq
。这个选项并不像文档中所暗示的那样意味着“相同的质量”,而且可能不会像您认为的那样。它不是设计用于不共享相同量化器刻度的格式之间。请注意,
-sameq
可能需要替换为类似于
-qscale 0
或同等格式(如最新版本(git-2012-11-23-e9c3723)的ffmpeg CLI输出所建议)本文中的示例在没有任何更改的情况下运行:选项“-sameq”并不意味着“质量相同”。此答案与问题无关,因为它没有提及使用该选项。
#!/bin/bash
MOVIES=~/Movies/
find "$MOVIES" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mp4}.webm"' {} \;
exit;