【Linux】CentOSへffmpeg-phpのインストール

にffmpegをインストールしましたが、今度はffmpegをPHPから簡単に使える拡張機能ffmpeg-phpをインストールします。ここを参考に。

必要なツールをインストールしておく
$ yum install php-devel

$ tar jxvf ffmpeg-php-0.5.3.1.tbz2
$ cd ffmpeg-php-0.5.3.1
$ phpize
$ ./configure
$ make
$ make install

最後は
Installing shared extensions:     /usr/lib/php/modules/
というメッセージが出て終わる。
上記ディレクトリを見るとたしかにffmpeg.soがある。今までlampp(xampp)を使っていたけど、このディレクトリは参照しないので通常のhttpdに切り替えることに。

apacheを再起動
$ /etc/rc.d/init.d/httpd restart

エラーが出る場合はphp.iniに extension_dir = "/usr/lib/php/modules" という記述があるかチェック。

動作確認は解凍したディレクトリにtest_ffmpeg.phpというファイルとtestsというディレクトリがあるので、これを公開しているディレクトリにコピーしてtest_ffmpeg.phpを実行するとtests/mediaにある動画と音声ファイルの情報を出力します。 インストールされているバージョンを確認する場合もこのファイルを参考に。

run-tests.phpというファイルもあったけど、これは実行してみると途中で止まる・・・。よくわかりません。

動画のプロパティを参照できたり、サムネイルを作成したり、さらにgifのアニメーションを作成できるみたい。APIリファレンスはここ

いろいろ試してみよう・・・。

<2009/02/21 追記>
実行するときは

//ffmpeg-phpの拡張モジュールを読み込む
$sExtension = "ffmpeg";
if (!extension_loaded($sExtension)) {
    $sExtensionSoname = $sExtension . "." . PHP_SHLIB_SUFFIX;
    if (!dl($sExtensionSoname)) {
        echo 'Can not load extension: ' . $sExtension;
    }
}

でモジュールを読み込む。

ただphp.iniのsafe_modeがOnだと失敗するので、そんなときは/etc/php.d/ffmpeg.iniに extension=ffmpeg.so と記述してapacheを再起動でもできる。

execなどphpから外部コマンドを実行するときはsafe_modeがOffでないと駄目なので、おとなしくphp.iniのsafe_modeをOffにした方がよい。

<2009/03/14 追記>
ffmpegのバージョンをあげたときに

child pid 30831 exit signal Segmentation fault (11)

というエラーをapacheが出力して強制終了する現象に出くわして見事にはまったので、ffmpegはバージョン0.6.0以上を使った方がよい。

<2009/03/27 追記>
0.6.0以上にあげるとffmpegが対応していないコーデックの動画に対してgetVideoBitRate()などをやるとFatal Errorとなる。

Fatal error: Could not find decoder for /opt/cotv_movies/test.avi

これを解決するためにはソースを修正してリコンパイルしないと駄目みたい。参考。Fatal errorはphpでハンドリングできないのでWARNINGレベルにしてほしい。ソース修正したけどさ。