2012-08-06 22 views
20

私は時には最後に無音のMP3ファイルを持っています。この沈黙を自動的に削除したいと思います。私が知ることから、バックグラウンドノイズではなく「完全な」サイレンス(振幅0)です。コンテンツの長さと無音が異なります。MP3からプログラムで無音を削除するにはどうすればよいですか?

cropping to the first 30 secondsまたはcropping to X and X+N secondsについて他の質問がありました。ffmpegを使用しました。私は沈黙が始まる時を見つける方法がある限り、同様のアプローチを使うことができると私は思います。私はそれをプログラム的にどのようにしますか?

たとえば、「沈黙」の始まりを見つけるコマンドを用意することが考えられます。私はこの

end=$(ffmpeg some-command-to-find-start-of-silence) 
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3 

ソリューションのようなシーケンスがはないffmpegを使用する必要がありません期待が、それはUbuntuの上で利用できるようにする必要がありません。

+0

本当に完全な沈黙に興味がありますか?これは非常にまれで、24ビットのマスターからのディザリング、損失の多い圧縮です。いずれにしても、FFMPEGは移動する方法です。 – Brad

+0

@Brad私たちは基本的に、私たちが使っている録音サービスのバグに取り組んでいます。問題が発生したとき、常にこの「完璧な」沈黙を与えるようです。 –

+0

あなたは['silencedetect' FFmpegオーディオフィルタ](http://ffmpeg.org/ffmpeg.html#silencedetect)に興味があるかもしれません。 – blahdiblah

答えて

5

silencedetect FFmpeg audio filterを見てください:

オーディオストリームで沈黙を検出します。

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

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

これは、静かなものを静寂と見なさなければならないことを調整するパラメータと、無言の時間を記録する必要があるパラメータを設定します。

+2

'silenceremove'フィルタはhttps://ffmpeg.org/ffmpeg-filters.html#toc-silenceremoveで文書化されています。この回答は役に立ちそうです。http://stackoverflow.com/a/29411973/1717535 –

32
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見つけることができるかを詳細に見て:あなただけの端をトリミングを懸念している場合は、これはのように簡略化することができます。

+0

解決策は動作しますしかし、あなたの説明は間違っています。オリジナルの作者は、0.1秒以上持続する音に出会うまで「トリム・サイレンス(音量が1%未満のもの)」と言っていました。 – duleshi

7

ロスレスソリューション、つまりは品質を低下させるを解決しないソリューションを探していると思われます。

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

sudo aptitude install mp3splt mp3splt-gtk 

はDebianとUbuntuで動作するはずです。 manページから

あなたはまた、無音検出(-sオプションを参照)、無音検出を使用してトリムファイル(-rオプションを参照)を使用して自動的にファイルを分割しようとする、またはによってできます固定長(-tオプションを参照)

関連する問題