因此我使用 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])