使用 FFMPEG 将 FLAC 转换为 MP3?

使用 FFMPEG 将 FLAC 转换为 MP3?

因此我使用 ffmpeg 将某个文件夹中的 flac 文件转换为比特率为 320k 的 mp3。

我正在使用这个答案作为参考。

https://stackoverflow.com/a/41096234/9259505

所以我在 Windows 命令 shell 中使用的命令是

ffmpeg  -i infile.flac  -c:v copy  -b:a 320k  outfile.mp3

但这仅适用于一首歌曲。我如何修改该命令以循环播放工作目录文件夹中的所有 .flac 文件?

我自己尝试过这两个方法,但是它们不起作用。

for file in 'C:\Users\...' *.flac; do ffmpeg -i "$file" -c:v copy -q:a 0 "${file%.flac}".mp3; done

ffmpeg  -i "*.flac"  -c:v copy  -q:a 0  outfile.mp3

注意:我使用 -c:v copy,因为专辑封面最终会被转码,从而导致文件变大,而这正是我首先要避免的。因此,该命令必须复制流。

操作系统:Windows 10

答案1

您说您正在使用 Windows 命令 shell,但您显示的第一个命令行(以“for file in”开头的命令行)看起来不像 Windows,更像是某种 Linux shell 命令。第二个命令行不起作用,因为 ffmpeg 不接受通配符作为输入文件规范。

这行 Windows 命令可以完成您想要的操作,使 ffmpeg(使用上面的选项)依次将当前文件夹中的每个 flac 文件作为输入,并在同一文件夹中输出扩展名前同名的 mp3 文件:

提示时:

for %A in (*.flac) do ffmpeg  -i "%~nA.flac"  -c:v copy  -b:a 320k  "%~nA.mp3"

如果 mp3 文件已经存在,ffmpeg 会询问您是否要覆盖它。

注意:上述命令是为命令提示符编写的。它不适用于批处理脚本。为此,您需要将所有百分号 (%) 加倍,如下所示

在批处理(cmd)脚本中:

for %%A in (*.flac) do ffmpeg  -i "%%~nA.flac"  -c:v copy  -b:a 320k  "%%~nA.mp3"

答案2

使用 Python:(在任何操作系统上递归处理空格和其他特殊字符)

from glob import glob
from subprocess import run

for flac in glob("**/*.flac", recursive=True): 
    mp3 = flac.replace(".flac", ".mp3") 
    run(["ffmpeg", "-i", flac, "-c:v", "copy", "-b:a", "320k", mp3])

相关内容