音声つき単語帳の単語と例文とかを切り出してランダム出題する形にしたかったのでまずsoxを使って無音部分で音声を分割しました。
$ sox in.wav out.wav silence 1 0.3 0.1% 1 0.3 0.1% : newfile : restart これでout001.wavなどのように連番でファイルが保存されます。初めの0.3が音声の前の部分の無音の長さで、後ろの0.3が音声の後に続く無音部分の長さです。
参考 [sox fails to split files – Stack Overflow][1]
英語の勉強にアメリカドラマから音声を抜き出して、その中のサイレンス部分を削除したかったのでやり方を調べたらffmpegとsoxで簡単にできることがわかったので、その方法を紹介します。
動画から音声を抜き出す 一つの動画から音声を抜き出すときは
ffmpeg -i input.mp4 -vn output.wav で抜き出せるので
フォルダごとまとめて処理するには
find . -name '*.mp4' -exec ffmpeg -i '{}' -vn '{}'.wav ';' でフォルダ内の全ての.mp4の動画ファイルから.wavファイルが抜き出されます。-vnが no videoのオプションです。
他にも-acodec copy として音声ファイルを変換せずに抜き出すこともできます。
無音部分を自動検出して削除 次に無音部分を自動的に認識して削除するのにsoxを使います。やり方によっては.wav以外も認識するようにできるようなのですが、うちの環境ではできなかったので.wavで処理をしています。
find . -name '*.wav' -exec sox '{}' '{}'_remove_silence.wav silence 1 0.1 1% -1 0.1 1% ';' で先ほど作った.wavファイルから無音部分が全て削除されました。
wavをm4aに ffmpeg で変換 wavのままだとファイルがでかすぎるのでm4aに変換します。mp3でもいいんですが、m4aの方が圧縮効率がいいのでこちらを使います。
find . -name '*_remove_silence.wav' -exec ffmpeg -i '{}' '{}'.mp3 ';' 以上で変換終了です。
まとめ この3行を一括変換したいフォルダにcdで移動して実行すればOKです。.wavファイルは手動で削除しときましょう。rm *.wavでもいいですが。
上記は全てcygwin上で行ってますがもちろんLinuxでもMacでも動くはずです。
find .