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

TJ *_*ill 6 ruby video ffmpeg ogg html5-video

我正在运行OSX,不知道有关视频转换的信息.但我有200个视频都是mp4格式,不能在Firefox中播放.我需要将它们转换为ogg以使用html5视频标记.

这些文件存在于文件夹结构中,这使得一次只能执行一个文件很困难.我希望bash命令或Ruby命令遍历所有子文件夹并找到所有.mp4并转换它们.

我在Google上找到了一个如何做到这一点的参考:http://athmasagar.wordpress.com/2011/05/12/a-bash-script-to-convert-mp4-files-to-oggogv/

#!/bin/bash
for f in $(ls *mp4 | sed ‘s/\(.*\)\..*/\1/’)
do
ffmpeg -i $f.mp4 -acodec vorbis -vcodec libtheora $f.ogg
done
Run Code Online (Sandbox Code Playgroud)

但不知道如何将其从linux转换为osx.

小智 8

虽然你问题的直接答案是这样的:

#!/bin/bash
MOVIES=~/Movies/
find "$MOVIES" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mp4}.ogg"' {} \;
exit;
Run Code Online (Sandbox Code Playgroud)

我认为使用VP8或webm编解码器可能会找到更好的结果,因为它可以提供更好的结果,并且在现代版本的Firefox中实际上是首选.鉴于此,你应该试试这个:

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

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

  • 请注意,`-sameq`可能需要替换为`-qscale 0`或等效的东西(如最新版本中的ffmpeg CLI输出所示)(git-2012-11-23-e9c3723) (2认同)

pig*_*goz 6

这是使用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
Run Code Online (Sandbox Code Playgroud)

Dir.glob以"**/*.mp4"递归方式匹配子目录中具有.mp4扩展名的所有文件.