web-dev-qa-db-ja.com

プログラムでMP3から無音を削除するにはどうすればよいですか?

最後に無音になる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で使用できる必要があります。

24
Benjamin Oakes
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

soxsilenceがどのように機能するかについての詳細は here を参照してください。

38
James

あなたはおそらくlosslessソリューションを探しています、すなわち再エンコードを必要としないもの(それは品質が低下します)。

私は mp3splt があなたが探しているものだと信じています。コマンドラインとGUIから使用できます。

Sudo aptitude install mp3splt mp3splt-gtk

debianとUbuntuで動作するはずです。

Manページから:

無音検出(-sオプションを参照)、無音検出を使用してファイルを自動的に分割する(-rオプションを参照)、または固定時間の長さ(-tオプションを参照)

silencedetect FFmpegオーディオフィルター を見てください。

オーディオストリームの無音を検出します。

このフィルターは、検出された最小ノイズ持続時間以上の持続時間、入力オーディオボリュームがノイズ許容値以下であることを検出すると、メッセージをログに記録します。

印刷される時間と期間は秒単位で表されます。

これには、沈黙と見なすためにどれだけ静寂にする必要があるか、および沈黙に注意する必要がある期間を調整するパラメータがあります。

6
blahdiblah