これは、ffmpeg の concat demuxer を使用してプログラムで実行できます。
最初に、inputs.txt という名前のファイルを作成し、
のような行を記述します。file '/path/to/input1.mp3'
file '/path/to/input2.mp3'
file '/path/to/input3.mp3'
...等。次に、次の ffmpeg コマンドを実行します:
ffmpeg -f concat -i inputs.txt -c copy output.mp3
for 用の bash を使用して、inputs.txt を簡単に生成できます。 ループ (これはおそらく Windows のバッチ for ループでも実行できます)、ファイルをアルファベット順にマージする場合を想定しています。これはすべてに一致します *.mp3 は作業ディレクトリにありますが、簡単に変更できます:
for f in ./*.mp3; do echo "file '$f'" >> inputs.txt; done
## Alternatively
printf "file '%s'\n" ./*.mp3 >> inputs.txt
プロセス置換による中間リスト ファイルの作成を回避して、すべてを 1 行で実行することもできます。
ffmpeg -f concat -i <(printf "file '%s'\n" ./*.mp3) -c copy output.mp3
ffmpeg または同様のツールを使用して、すべての MP3 を一貫した形式に変換します。たとえば、
ffmpeg -i originalA.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateA.mp3
ffmpeg -i originalB.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateB.mp3
次に、実行時にファイルを連結します:
cat intermediateA.mp3 intermediateB.mp3 > output.mp3
最後に、MP3Val ツールを使用してそれらを実行し、完全な再エンコードを強制せずにストリーム エラーを修正します。
mp3val output.mp3 -f -nb
(ソース)