使用FFmpeg将文件夹中所有的MP4音频文件转换为MP3

25

如何使用ffmpeg将给定文件夹中的所有mp4文件转换为mp3格式。 几乎所有我在谷歌上找到的链接都是关于将mp4视频转换为mp3音频。 我可以通过VLC播放器完成此操作,但我有约1000个mp4音频文件,并希望通过一些脚本或命令行完成此操作。 是否可以通过gstreamer完成?


它们都在同一个目录下吗? - llogan
是的。无论如何,我通过使用C#代码调用ffmpeg.exe并使用Linq迭代每个文件找到了方法。 - Raulp
2个回答

40

其中一种方法是使用 bash for 循环

仅对 .mp4 文件进行转换:

mkdir outputs
for f in *.mp4; do ffmpeg -i "$f" -c:a libmp3lame "outputs/${f%.mp4}.mp3"; done

用于转换 .m4a.mov.flac 格式的工具:

mkdir outputs
for f in *.{m4a,mov,flac}; do ffmpeg -i "$f" -c:a libmp3lame "outputs/${f%.*}.mp3"; done

要将任何内容转换,请使用“*”通配符:

mkdir outputs
for f in *; do ffmpeg -i "$f" -c:a libmp3lame "outputs/${f%.*}.mp3"; done

如果我需要扩展上面的脚本以处理更多不同类型的文件(例如.m4a,.mov等),该怎么办?就像我所做的一样:FileInfo [] Files = d.GetFiles(“*.mp4”)。Union(d.GetFiles(“*。<任何其他文件扩展名>”))。ToArray();。 - Raulp

3
FileInfo[] Files = d.GetFiles("*.mp4").Union(d.GetFiles("*.<any other file extension>")).ToArray(); 

foreach (FileInfo file in Files)
            {
               // str = str + ", " + file.Name;
                  builder.Append(Path.GetFileNameWithoutExtension(file.Name));

ProcessStartInfo startInfo = new ProcessStartInfo();
       startInfo.CreateNoWindow = false;
       startInfo.UseShellExecute = false;
       startInfo.FileName = "ffmpeg.exe";
       startInfo.WindowStyle = ProcessWindowStyle.Hidden;
       startInfo.RedirectStandardOutput = !string.IsNullOrEmpty("test");
     startInfo.Arguments = "-i " + filename + ".mp4 -q:a 0 -map a " + filename + ".mp3";

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接