web-dev-qa-db-ja.com

MP3の最後に沈黙を追加します

LinuxでMP3の最後に一定期間の無音を追加する方法を知っている人はいますか?たとえば、MEncoder、FFmpegなどを使用していますか?

スクリプト化されてサーバー上で実行されるため、コマンドラインである必要があります。

私はこれをグーグルで検索しましたが、 SoXpad関数を使用するのが最善ですが、MP3では機能しません。

私はそれをWAVに変換し、SoXを使用してから再びMP3に変換し、メタデータ(期間を差し引いたもの)をオリジナルから新しいMP3にコピーできます。しかし、そのためのスクリプトを書く前に、ワンヒットソリューションがあるかどうかを確認したいと思いました。

12
Max Williams

これは、SoXのpad引数と次の構文を使用して簡単に行うことができます。

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>

例:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

それらの沈黙は秒単位です。 (特定の位置にそれらの沈黙を挿入するために、別の構文を使用して他の使用法が可能です。詳細については、SoXのドキュメントを参照してください。)

9

Ffmpegを使用すると、aevalsrcフィルターを使用して無音を生成し、2番目のコマンドでconcatプロトコルを使用してそれらをロスレスで組み合わせることができます。

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3

-t 10を秒単位の任意の時間に変更することで、無音の長さを制御できます。もちろん、無音を生成する必要があるのは1回だけです。その後、ファイルを保持し、それを使用して、必要な各ファイルをパディングできます。 concat demuxer を検索することもできます。これは少しプロセッサに負荷がかかりますが、シェルスクリプトにドロップする方が簡単な場合があります。

単一のコマンドで実行する場合は、concatフィルターを使用できます。これには、オーディオを再エンコードする必要があります(フィルターグラフは-codec copyと互換性がないため)。上記のオプションがおそらく最適です。君は。しかし、これは、オーディオをエンコードする前に最後に無音を追加しようとしている、生のPCMを使用している人にとっては便利かもしれません。

ffmpeg -i input.mp3 \
-filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \
-map [out] -c:a libmp3lame -q:a 2 output.mp3

d=10を任意の時間(秒単位)に変更して、無音の長さを制御します。この方法を使用する場合、これが役立つ場合があります FFmpeg MP3エンコーディングガイド

15
evilsoup