ここでは、ffmpeg を使って複数の MP3 ファイルを MP4 ファイルへ一括変換する、シンプルな方法を2つ紹介します。1つ目の方法では、静止画像を動画トラックとして使います。2つ目の方法では、単色の動画トラックを自動生成します。
解決策 1: 静止画像を使う
MP3 ファイルと同じディレクトリに image.png という名前の画像を置き、次を実行します。
for mp3File in *.mp3; do
outputFile="${mp3File%.mp3}"
ffmpeg -loop 1 -i image.png -i "$mp3File"
-c:v libx264 -c:a copy -shortest
"$outputFile.mp4"
done
これにより、各 MP3 ファイルに対応する MP4 ファイルが1つずつ作成されます。音声は再エンコードせずにコピーされ、image.png が全再生時間にわたって静止動画フレームとして使われます。
ファイルの拡張子が .MP3 だったり、大文字小文字が混在していたりする可能性がある場合は、glob パターンを調整するか、先にファイル名を正規化してください。
解決策 2: 単色の動画を生成する
カバー画像が不要な場合、ffmpeg で簡単な動画ストリームを生成できます。
mkdir -p out
for f in *.mp3; do
ffmpeg -f lavfi -i color=s=160x120:r=2 -i "$f"
-c:v libx264 -preset ultrafast -c:a copy -shortest
"out/${f%.mp3}.mp4"
done
これにより、変換後のファイルは out/ ディレクトリに書き出されます。生成される動画は、160x120 の単色フレームを毎秒2フレームで表示するものです。MP4 コンテナ内に音声を格納するためだけに動画トラックが必要な場合には、これで十分です。
結果を確認する
出力ファイルに音声ストリームと動画ストリームの両方が含まれていることを確認するには、次を実行します。
ffprobe "output.mp4"
output.mp4 は、生成されたファイルのいずれかに置き換えてください。元の MP3 からの音声ストリームと、上記いずれかのコマンドで作成された動画ストリームが表示されるはずです。
