2008年12月24日水曜日

encode video with h264+aac codecs by ffmpeg on Ubuntu8.10 Intrepid Ibex

Ubuntu8.04まではMedibuntuのリポジトリを入れていれば、h264,aacなどのコーデックに対応した版のffmpegがaptでインストール出来たのですが、8.10からやり方が変わったようです。

ffmpegでPSP用に動画をエンコードしようとして、「h264なんてエンコーダ知らないよ」とエラーメッセージを吐かれてびっくらこきました。
確かに、ffmpeg -formatsの出力結果のCodec欄を見ても、h264の行にエンコード可を示すEの字がありません。

Medibuntuの8.04Hardy用のパッケージ一覧ページを見るとちゃんとffmpegがあるのが分かりますが、8.10Intrepidのページではffmpegがそもそもffmpegがありません。
Intrepidでは、ffmpeg本体は公式リポジトリのものを使い、h264などのエンコードには外部ライブラリで対応するという形のようです。


IntrepidのMedibuntuリポジトリを入れた状態で、libavcodec-unstripped-51,libavdevice-unstripped-52,libavformat-unstripped-52,libavutil-unstripped-49,libpostproc-unstripped-51,libswscale-unstripped-0の6つのパッケージをインストールします。
$ sudo apt-get install libavcodec-unstripped-51 libavdevice-unstripped-52 \
libavformat-unstripped-52 libavutil-unstripped-49 libpostproc-unstripped-51 \
libswscale-unstripped-0


Ubuntu公式のリポジトリにはlibavformat52といったパッケージがありますが、これらのMedibutu版が〜-unstripped-〜と名前についたパッケージ達です。ffmpeg本体は公式のもののままで大丈夫のはずです。

これでffmpeg -formatsを実行すると、h264のところはそのままですが、「 EV libx264」という行が追加されている筈です。libx264というのはh264コーデックでエンコードするためのffmpeg外部のライブラリです。(libx264パッケージは勝手にインストールされます)
実際にエンコードを行う場合には、以前なら「-vcodec h264」としていた箇所を、「-vcodec libx264」とすれば良いです。aacも、libfaacとします。
この他にも、外部ライブラリとして対応するようになったものがあります(ogg,xvidなど)。ffmpeg -formatsで確認してください。

試しに、一つ動画をPSP用にエンコードしてみましたが問題なく再生出来ました。

$ ffmpeg -i smile.flv -acodec libfaac -ab 256kb -vcodec libx264 -b 256kb -ar 48000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -aspect 360:272 -s 360x272 -r 30000/1001 -f psp -flags loop -trellis 2 -level 30 -threads 2 output.mp4 -y

0 件のコメント: