2010年3月28日

FFmpeg で HE-AAC コーデックを使う


tipok.org.ua - HE-AAC+ Codec as Shared Library

HE-AAC をサポートするライブラリ libaacplus と FFmpeg にそれを対応させるパッチを公開してくれている。これを使うと FFmepg においてライブラリである libaacplus を使用した HE-AAC(3GPP High Efficiency Advanced Audio Codec)の変換が出来るようになる。

※ 注意 - ライブラリと FFmpeg のどちらもソースからビルドをする必要がある。既に APT を用いて FFmpeg をインストールしている場合は要注意だが、 /usr/local ディレクトリ下にインストールされるので APT を使って /usr ディレクトリ下にインストールされた FFmpeg とは競合しない。

1: インストールに必要なパッケージの用意

autoconf
libaacplus のインストールは autogen.sh で行う。

subversion
パッチを当てる事が可能なリビジョンの FFmpeg のソースのチェックアウトに使用する。

patch
FFmpeg のソースにパッチを当てるのに使用する。

libx264-99 以上のバージョンの libx264
FFmpeg で libx264(H.264)を使う場合に libx264-99 以上のバージョンが必要。

2: インストール

1. libaacplus (2.0.2 new API)

ソースファイルをダウンロードして展開した後、次のコマンドでインストール。

$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

2. FFmpeg

How To では「Here is code for debian/ubuntu linux」と表記されている。ディストリビューションによっては問題が発生するかもしれない。

How To のコマンドの通りにパッチを当てても「Perhaps you used the wrong -p or --strip option?」と問われパッチが当たらない場合は、全ての項目を手動で当てる必要がある。

$ svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg -r 25711
$ cd ffmpeg
$ wget http://tipok.ath.cx/downloads/media/aac+/libaacplus-simple-sample/ffmpeg-patch/ffmpeg-aacp2.10112010.diff
$ touch libavcodec/libaacplus.c
$ patch -p7 < ffmpeg-aacp2.10112010.diff

パッチを当てようとすると次の動作を問われるので、 「working copy」の値を「File to Path」に入力する。これを7回繰り返すと完全にパッチが当たる。

can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: configure
|===================================================================
|--- configure (revision 25711) 
|+++ configure (working copy) ← この太字の位置の値を
--------------------------
File to patch: configure ← ここに入力

パッチによって ./configure で libaacplus を使用するオプションの --enable-libaacplus がサポートされる。これを含めて FFmpeg を設定し、ビルド。この時に他にサポートしたいコーデックがあったら一緒に設定しておく(下の configure は一例としてメジャーな形式をサポートした単純なもの)。 選択出来るライブラリやオプションは ./configure --help コマンドで参照出来る。ソースからビルドをするのでそれぞれのデベロップメント・パッケージ(パッケージの語尾が dev のパッケージ)をインストールしておく必要がある。

$ ./configure --prefix=/usr/local --enable-shared --enable-gpl --enable-nonfree --enable-libx264 --enable-libxvid --enable-libvorbis --enable-libfaac --enable-libmp3lame --enable-libaacplus
$ make
$ sudo make install

このライブラリでは HE-AAC のデコードは出来ない。デコードには libfaad2 が対応。

・WinFF でプリセットを作成

WinFF

FFmpeg の GUI ラッパーである WinFF に HE-AAC に対応した FFmpeg のプリセットを作成しておくと便利だ。ただし、比較的新しいリビジョンの FFmpeg では若干オプションに指定するパラメータが変更されており(ビットレート指定で kb ではなく k のみ)、サポートされているバージョンの WinFF ではこれに対応しておらず、プリセットとして機能しない点に注意。


 メニューの「Edit」から「Preferences」を選択して使用する FFmpeg をインストールしたものに切り替える。上記のコマンドでビルドをすると「/usr/local/bin」ディレクトリ下にインストールされるのでそれを指定。


次に HE-AAC に対応するプリセットを作成。ここでは MP4 (H.264 AVC/HE-AAC) のプリセットを作成してみる。メニューの「Edit」から「Presets」を選択。詳細に使いこなすにはオプションを熟知する必要があるが、簡単に使用する分には元からあるプリセットを書き換えるだけでよい。ここでは「MP4 Fullscreen」のプリセットのオーディオのオプションを変更。コーデックを「-acodec libaacplus」、ビットレートの標準設定を「-ab 48k」とした。仕様上 72kbps 以上のビットレートには出来ず、指定してもエラーとなり変換出来ない。


正しく機能しているとそのプリセットで変換可能となる(音声のコーデックに libaacplus が使われているのが確認できる)。

1 件のコメント: