228個のmp4ファイル(2.6GB)があり、それらからオーディオを抽出したい(mp3またはogg)。私はそれらをバッチ抽出したい-できればbashで。2006年から2012年までのさまざまな年に録音されたすべてのファイルが同じオーディオコーデックを使用しているかどうかはわかりません。
すべてをループし、ファイル名を選択し、オーディオコーデックを検出し、ffmpegを使用してオーディオを抽出します。
出来ますか?
228個のmp4ファイル(2.6GB)があり、それらからオーディオを抽出したい(mp3またはogg)。私はそれらをバッチ抽出したい-できればbashで。2006年から2012年までのさまざまな年に録音されたすべてのファイルが同じオーディオコーデックを使用しているかどうかはわかりません。
すべてをループし、ファイル名を選択し、オーディオコーデックを検出し、ffmpegを使用してオーディオを抽出します。
出来ますか?
回答:
「それらからオーディオを抽出する(mp3またはogg)」と言います。しかし、mp4ファイルのオーディオがそれらのいずれでもない場合はどうでしょうか?とにかくトランスコードする必要があります。それでは、オーディオ形式の検出をffmpegに任せてみませんか?
1つのファイルを変換するには:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg多くのファイルを変換するには:
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; doneもちろん、オーディオエンコード用の任意のffmpegパラメーターを選択して、ビットレートなどを設定できます。
使用-acodec libmp3lameしてから拡張子を変更.oggする.mp3mp3エンコード用。
本当にオーディオを抽出したい場合は、を使用してオーディオトラックをファイルに単純に「コピー」できます-acodec copy。もちろん、主な違いは、トランスコーディングが遅く、CPUに負荷がかかることです。一方、ファイル間でバイトを移動するだけなので、コピーは非常に高速です。オーディオトラックだけをコピーする方法は次のとおりです(mp3形式であると想定)。
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3この場合、オーディオファイルの形式はコンテナの内容と一致している必要があることに注意してください(つまり、オーディオがAAC形式である場合、言う必要がありますaudiofile.aac)。ffprobeコマンドを使用して、使用しているコーデックを確認できます。これにより、いくつかの情報が提供される場合があります。
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"オーディオコーデックを自動的に解析し、それに応じてオーディオファイルに名前を付ける可能な方法は次のとおりです。
mkdir -p output
# current directory has to contain at least one .mp4 file 
for vid in *.mp4; do
   codec="$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "$vid")"
   case "$codec" in
    mp3    ) filetype=mp3 ;;
    vorbis ) filetype=ogg ;;
    *      ) filetype= ;;
   esac
   if [ "$filetype" ]; then 
    ffmpeg -i "$vid" -vn -acodec copy output/"${vid%.*}"."$filetype"
   else
    ffmpeg -i "$vid" -vn -acodec libvorbis output/"${vid%.*}".ogg
done注:出力ファイルはoutput、最初に作成するサブディレクトリに作成されます(必要な場合)。mp3およびvorbis以外のコーデックの場合、オーディオをoggに変換します。Ubuntu 14.04には標準リポジトリにはffmpegがありませんが、ppa:mc3man / trusty-mediaリポジトリを追加し、ffmpegパッケージをインストールして必要なソフトウェアを取得できます。詳細はこちらをご覧ください。
ffprobe "$file" 2>&1 |sed -rn 's/.*Audio: (...), .*/\1/p'; 修正済み。
                    This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
                    ffmpegまたはffprobeUbuntu 14.04以降では利用できません。
                    ニコラスラウルが述べたように、これは更新が必要です。roadmrが提供したのと同じ行ですが、代わりにavconvを使用しています:
for vid in *.mp4; do avconv -i "$vid" "${vid%.mp4}.mp3"; done