多くのmp3ファイルを結合/マージする方法は?


59

多くのmp3ファイルを結合/マージする方法をGoogleで検索したところ、catそれらを1つにまとめる必要があることが示唆されました。

それは「機能する」かもしれませんが、各ヘッダーとIDv3タグのセットも連結されるため、明らかに正しい方法ではありません。

多くのmp3に参加/マージするためにスクリプト化できるLinuxプログラムが存在しますか?

mplayer / mencoder / ffmpegはできますか?

回答:


79

これにより2つのmp3ファイルが連結され、結果のメタデータは最初のファイルのメタデータになります。

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

これは、ffmpegの場合、「concat:」部分全体が単一の「入力ファイル」であり、そのメタデータが最初に連結されたファイルのものになるためです。代わりに2番目のファイルのメタデータを使用する場合は、ダミーの入力ファイルとして追加し、そのメタデータを出力のメタデータにマップする必要があります。

ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1

2つのメタデータからメタデータを構築する場合は、手動で行う必要があります。次のコマンドでファイルのメタデータをダンプできます

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

参考までに、これにはffmpegの特定のバージョンが必要です。それはファイルが連結を発見していないと言うなら...アップグレードを試してみて、もう一度それを実行している
サミール

Gentooのffmpeg 0.10.4で正常に動作します。何を使っていますか?コマンドを誤って入力しただけではありませんか?
アンブロズビズジャク

1
他の人のためにいくつかのことを明確にしたかった:-acodecオーディオコーデックが使用され、copy
マルチプレクサとデマルチプレクサ

1
複数のファイルをドラッグアンドドロップできるGUIプログラムがあれば(たとえば、連続して記録された記録、およびおそらく編集されたいくつかのファイルを時系列で並べ替え)、1つのファイルを出力できれば素晴らしいと思います。
ジェームズレイ

1
これは良い答えですが、ほとんどすべての場合、結果のMP3ファイルには、ファイルが結合された場所の間に短い(1秒未満の)ギャップがあります。したがって、MP3トラックをマージしてシームレスな再生アルバム/セット/何でも作成しようとすると、これはまったくうまくいきません。
トカゲ

13

Mp3Wrap-ファイル名やID3情報を失わず、再エンコードせずに、複数のMP3ファイルを単一の再生可能なMP3にラップするコマンドラインユーティリティ。また、MP3内のプレイリスト、情報ファイル、カバー画像などの非オーディオデータのアーカイブもサポートしています。これらのファイルは、後でアンパックできます(mp3spltなどを使用)。通常のMP3デコーダーは、オーディオストリーム全体を1つの長いトラックとして再生できます。


1
この推奨事項に感謝します。100以上のmp3を組み合わせて、元に戻すオプションが必要だったため、ffmpegよりもはるかに軽量でシンプルなソリューションです。
joshbaptiste

これはもはや機能しません-いくつかのファイルを連結して出力​​ファイルを調べてみてくださいmp3val-同期エラーを報告します。これは、Chrome 64以降の最初のチャンクの後に再生されないことを意味します(bugs.chromium.org/p/chromium/issues/detail?id=794782およびbugs.chromium.org/p/chromium/issues/detail?idを参照してください)= 806601#c10
Housemd

Windowsでは動作しないようです。メタデータは保持されません。
グルーバー

9

これにより、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

現在のディレクトリのすべてのmp3ファイルを連結する場合:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3

0

スクリプトが必要な場合は、おそらくffmpegソリューションを使用することをお勧めします。ただし、そのようなことを行うためのアプリケーションが必要な場合は、Audacityを試してみてください。オープンソースでクロスプラットフォームです。mp3の結合には使用していませんが、mp3からセクションを切り取り、最後にフェードアウトするために使用しました。mp3に参加し、それを使用して相互にクロスフェードすることもできます。


4
私の知る限り、Audacityは生のサウンドデータを処理します。mp3を連結すると、トランスコーディングによる劣化が生じます。
アンブロズビズジャク

0

zsh:

audio-join() ffmpeg -i "concat:${(j:|:)@[2,-1]}" -acodec copy $1

audio-join output.mp3 *.mp3

回答には説明が含まれることが期待されます。(このページのすべての回答が良い例ではありません。)
スコット

0

Miles Wolbeの答えに基づいて、私のために働いたワンライナーがあります:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.