最後に無音になるMP3ファイルがあります。この沈黙を自動的に取り除きたいのですが。私が知ることができることから、それは「完璧な」沈黙(0振幅)であり、バックグラウンドノイズではありません。コンテンツの長さと沈黙は異なります。
最初の30秒にトリミング または XおよびX + N秒にトリミング について、ffmpeg
を使用して他の質問を見つけました。沈黙が始まるときを見つける方法がある限り、私は同様のアプローチを使用できると思います。それをプログラムでどのように実行しますか?
たとえば、1つの可能な解決策は、「沈黙」の始まりを見つけるコマンドを持つことです。このようなシーケンスを期待します
end=$(ffmpeg some-command-to-find-start-of-silence)
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3
ソリューションはffmpeg
を使用する必要があるではありませんが、Ubuntuで使用できる必要があります。
sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse
これにより、ファイルから0.1秒より長い無音部分が削除されます。末尾のトリミングのみを懸念している場合、これは次のように簡略化できます。
sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse
sox
のsilence
がどのように機能するかについての詳細は here を参照してください。
あなたはおそらくlosslessソリューションを探しています、すなわち再エンコードを必要としないもの(それは品質が低下します)。
私は mp3splt があなたが探しているものだと信じています。コマンドラインとGUIから使用できます。
Sudo aptitude install mp3splt mp3splt-gtk
debianとUbuntuで動作するはずです。
Manページから:
無音検出(-sオプションを参照)、無音検出を使用してファイルを自動的に分割する(-rオプションを参照)、または固定時間の長さ(-tオプションを参照)
silencedetect
FFmpegオーディオフィルター を見てください。
オーディオストリームの無音を検出します。
このフィルターは、検出された最小ノイズ持続時間以上の持続時間、入力オーディオボリュームがノイズ許容値以下であることを検出すると、メッセージをログに記録します。
印刷される時間と期間は秒単位で表されます。
これには、沈黙と見なすためにどれだけ静寂にする必要があるか、および沈黙に注意する必要がある期間を調整するパラメータがあります。