在 Google 上搜索如何合并多个 mp3 文件,它建议我应该将cat
它们合并在一起。
这可能“有效”,但显然不是正确的方法,因为每个标题和 IDv3 标签集也将被连接起来。
是否存在可以编写脚本来连接/合并多个 mp3 的 Linux 程序?
mplayer/mencoder/ffmpeg 可以做到吗?
答案1
这将连接两个 mp3 文件,并且生成的元数据将是第一个文件的元数据:
ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3
这是因为,对于 ffmpeg 来说,整个“concat:”部分是一个单独的“输入文件”,其元数据将属于第一个连接文件。如果您想使用第二个文件的元数据,则必须将其添加为虚拟输入文件并将其元数据映射到输出的元数据:
ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1
如果你想从这两个元数据构建元数据,你必须手动操作。你可以使用以下命令转储文件的元数据
ffmpeg -i file1.mp3 -f ffmetadata file1.metadata
转储两个元数据并构建新元数据后,可以使用 将其添加到输出文件-metadata
,并且可以通过设置从负输入文件号的映射来禁用元数据复制-map_metadata
。这将设置一个名称值,而不设置其他元数据:
ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
答案2
这会将一个充满 MP3 的文件夹连接成一个 MP3 文件:
1)保存要连接的 MP3 文件列表,例如,
$ cat mylist.txt
file '/tmp/01.mp3'
file '/tmp/02.mp3'
file '/tmp/03.mp3'
file '/tmp/04.mp3'
file '/tmp/05.mp3'
file '/tmp/06.mp3'
file '/tmp/07.mp3'
2)运行以下命令-safe 0
(如果 mylist.txt 使用相对路径则不需要):
$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3
答案3
Mp3Wrap- 命令行实用程序,可将多个 MP3 文件打包成单个可播放的 MP3,而不会丢失文件名或 ID3 信息,也无需重新编码。还支持存档 MP3 中的非音频数据,如播放列表、信息文件和封面图片。这些文件可以稍后解压(例如使用 mp3splt);普通 MP3 解码器可以将整个音频流作为一个长音轨播放。
答案4
根据 Miles Wolbe 的回答,这里有一个对我有用的方法:
ls *.mp3 | \
sed -e "s/\(.*\)/file '\1'/" | \
ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3