【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レベルにしてほしい。ソース修正したけどさ。