Linux(Ubuntu)にffmpegを導入してみた

メインマシンで作業しつつ、サーバ用マシンで動画の変換が行えれば便利だと考え、サーバ用マシン(Ubuntu)にFFmpegを導入することに。

Ubuntuであれば、APTを使って

$ sudo apt-get install ffmpeg

としてもffmpegをインストール出来るが、これだとffmpegがデフォルトで対応している動画形式しか利用できず、例えばH.264AACの動画などを扱うことが出来ない。そのため、これらの形式でのエンコード・デコードを行うためには、ソースコードから別途コンパイルした上でのインストールが必要となる*1

※主に参考にしたのはここです。KDDIを使いこなせ!: 【メモ】h.264対応ffmpeg コンパイル方法

(1)ライブラリのパスの指定

$ export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"

cshtcsh含む)の場合は以下の通り

$ setenv LD_LIBRARY_PATH "/usr/lib:/usr/local/lib"

少しはまった所。次に述べるlibx264は、デフォルトでは標準のパス「/usr/lib」ではなく「/usr/local/lib」にインストールされる。そのため、ライブラリのパスの指定をしないとffmpegコンパイル時にlibx264が存在しないとみなされる。

※この指定はrcファイル(.bashrc、.cshrc、.zshrcなど)に書いておいても有効である。

(2)libx264のインストール

H.264形式の動画を扱うために必要なライブラリ。これも一応APTで入手できるのだが、ffmpegに「バージョンが古いのでこのffmpegには使えません」と怒られたので、これもソースからコンパイルしてインストールする。

VideoLAN - x264の「daily tarball」から最新の「x264-****.tar.bz2」を適当なディレクトリに保存しておき、以下の手順でインストールする。

$ tar xvjf x264-snapshot-20090103-2245.tar.bz2
(書庫のファイルが展開される)
$ cd x264-snapshot-20090103-2245
$ ./configure --enable-shared --enable-pthread
(少しメッセージが表示される)
$ make
(大量にメッセージが表示される)
$ sudo make install
(少しメッセージが表示され、インストール完了)

「./configure」の際に「Found no assembler」(アセンブラが見つかりません)と出て失敗する場合は、「--disable-asm」を追加して「./configure --disable-asm --enable-shared --enable-pthread」とする。

(3)libfaacのインストール

AAC形式の音声を扱うために必要なライブラリ。これはAPTでのインストールでよい。

$ sudo apt-get install libfaac-dev
(少しメッセージが表示され、インストール完了)

(4)ffmpegのインストール

現在、ffmpegソースコードSubversionかGitでしか入手できない。FFmpeg Download and SVNの指示に従い、一旦Subversionをインストールしてからffmpegを入手する。適当なディレクトリに移動し、以下のことを行う。

$ sudo apt-get install subversion
(少しメッセージが表示され、Subversionのインストール完了)
$ svn co svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
(大量にメッセージが表示され、現在のディレクトリの直下の「ffmpegディレクトリに
 ソースコードがダウンロードされる)
$ cd ffmpeg
$ ./configure --enable-libx264 --enable-libfaac --enable-gpl --enable-pthreads
(少しメッセージが表示される)
$ make
(大量にメッセージが表示される)
$ sudo make install
(少しメッセージが表示され、インストール完了)

これでffmpegのインストールは完了である。

補足

ffmpegH.264形式への変換を行うと、ビットレートの指定が効かずに指定ビットレートを大きく超過した画像が出力されることが多々あるので要注意(Windows版で確認済み)。

対処方法あります。下の追記をご覧下さい。

追記(2009.1.18)

ffmpegにおいて、MP3のエンコード/デコードにLAMEを用いる方法を追記する。LAMEはMP3コーデックとしては良質な部類らしい(Twitterで聞いたところによると)こと、ffmpegはデフォルトではMP3のエンコード/デコードにLAMEを使ってはいないことから、導入することにした。

(参考:Vine Linux へのFFmpegのインストール方法とか

まず上記(4)の手順の前に、LAMEをインストールする。

$ sudo apt-get install lame liblame-dev
(少しメッセージが表示され、インストール完了)

続いて(4)の手順において、「./configure」のオプションを変更し、LAMEを用いるようなffmpegの実行ファイルを出力するようにする(「./configure」以外は上記(4)の手順と同じ)。

$ ./configure --enable-libmp3lame --enable-libx264 --enable-libfaac --enable-gpl --enable-pthreads
(少しメッセージが表示される)

追記(2009.1.28)

さらに追記。

Ubuntuの場合、そもそも「プログラムをソースコードからコンパイルする環境が揃っていない」という理由で、この構築方法が失敗する場合がある。そのためには「libc」(Linux C Library)を用いたコンパイルを行える環境を準備すればよい。

(参考:ubuntuにxspimをインストールできません - 教えて!goo

APTを用いたインストール方法はこちら。

$ sudo apt-get install libc6-dev

追記(2012.2.26)

別件でffmpegについてぐぐってて見つけたこと。

動画をH.264形式へ変換する際に、ビットレートを「-b」オプションで指定してもそれに従ってくれない場合、「-qmax」オプションの値を調整する(デフォルトは32。大きくするほど低ビットレートでの出力が可能になる模様)ことで対応できるとのこと。

http://mobilehackerz.jp/archive/wiki/index.php?%BA%C7%BF%B7FFmpeg%2FFAQ

*1: H.264AACffmpegで扱う場合、ffmpegとは別に準備されたライブラリを用いなければならない。