メインマシンで作業しつつ、サーバ用マシンで動画の変換が行えれば便利だと考え、サーバ用マシン(Ubuntu)にFFmpegを導入することに。
Ubuntuであれば、APTを使って
$ sudo apt-get install ffmpeg
としてもffmpegをインストール出来るが、これだとffmpegがデフォルトで対応している動画形式しか利用できず、例えばH.264+AACの動画などを扱うことが出来ない。そのため、これらの形式でのエンコード・デコードを行うためには、ソースコードから別途コンパイルした上でのインストールが必要となる*1。
※主に参考にしたのはここです。KDDIを使いこなせ!: 【メモ】h.264対応ffmpeg コンパイル方法
(1)ライブラリのパスの指定
$ export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"
$ 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のインストールは完了である。
補足
ffmpegでH.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