2008年7月28日月曜日

ffmpegで動画から音声を分離

ffmpegを使うと、動画から音声を分離したりするのは簡単にできる。

まず、音声コーデックをチェック
$ ffmpeg -i input.mp4 2>&1|grep Audio
Stream #0.1(und): Audio: aac, 44100 Hz, stereo
$

音声コーデックがaacなので、出力先の拡張子をaacとする。
$ ffmpeg -i input.mp4 -acodec copy output.aac

(<追記>aacはあくまでコーデックであり、ファイル形式(コンテナ)とは違うんですけどね)

ffmpegでは出力先に指定したファイル名の拡張子で、出力するファイルフォーマットを判断するので、先に必ず動画の音声コーデックをチェックしなければならない。音声コーデックがaacなのにmp3などの拡張子を付けるとエラーになる。

単純作業なので、動画から一発で音声を分離してくれるスクリプトでも組もうかと思ったのだが、実際は意外と面倒そう。
ffmpegは数々のフォーマットに対応しており、まずフォーマットと拡張子の対応テーブルを作らなければならないし、デコード出来てもエンコード出来ない、またはその逆のフォーマットもある。更には、出力にoutput.wmaと指定したら、WindowsMediaAudioの筈なのに動画ストリーム付きでファイルを書き出してくれたり。。。

正直、手作業の方が気楽。

<追記>
WMAとWMVってコンテナの形式は同じで、オーディオだけならWMA、動画ならWMVって違いなだけじゃね?と気付いた。
ちゃんとストリーム指定して出力すりゃいいのかな?

0 件のコメント: