FFmpeg 合并 2000 个 MP3 文件
使用 concat 协议(推荐用于大量文件)
通过创建一个文本文件来列出所有要合并的文件,然后让 FFmpeg 读取这个列表,这样能避免命令行参数过长的问题。
生成文件列表
打开终端(Linux/macOS)或命令提示符/PowerShell(Windows),导航到你的 MP3 文件所在的目录,然后运行以下命令来生成一个包含所有 MP3 文件路径的文本文件 list.txt。
在 Windows 上 (PowerShell):
Get-ChildItem -Filter *.mp3 | ForEach-Object { "file '$($_.Name)'" } | Out-File -Encoding utf8 list.txt
或者使用 CMD(不推荐,可能遇到特殊字符问题):
for %i in (*.mp3) do echo file '%i' >> list.txt
在 Linux/macOS 上 (Bash):
for f in *.mp3; do echo "file '$f'" >> list.txt; done
确保所有 MP3 文件都在当前目录下,并且文件名中没有包含奇怪的字符(如单引号),否则需要更复杂的脚本来处理。
生成的 list.txt 文件内容应该是这样的:
file 'song1.mp3'
file 'song2.mp3'
file 'song3.mp3'
...
运行 FFmpeg 命令进行合并
使用生成的 list.txt 文件作为输入来进行合并。
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp3
-f concat: 指定使用 concat 分离器。-safe 0: 禁用安全检查。如果文件路径是相对路径(例如song1.mp3),并且你确信列表文件是安全的,就需要这个参数。如果使用绝对路径(如/path/to/song1.mp3),则可以不加此参数。-i list.txt: 指定输入文件为列表文件。-c copy: 这是关键!它告诉 FFmpeg 直接复制音频流而不进行重新编码,这样速度极快(瞬间完成)且不会有任何质量损失。output.mp3: 最终的输出文件名。