CentOS 6/ffmpeg-php



前書き

ここではパッケージを使ってインストールする方法を記載します。


ffmpegインストール

ffmpeg-php をインストールする前に、ffmpeg をインストールする必要があります。
パッケージを RPMForge の DAGリポジトリ から入手しますので、リポジトリを追加します。
RPMForgeリポジトリの導入 を参照して追加してください。

ffmpegをインストールします。

#  yum --enablerepo=rpmforge install ffmpeg

依存関係でたくさんのパッケージがインストールされます。


ffpmpeg-phpのインストール

ffpmpeg-phpのインストールに必要なパッケージを先にインストールします。

# yum install php-devel re2c
# yum --enablerepo=rpmforge install ffmpeg-libpostproc ffmpeg-devel

次にffpmpeg-phpをインストールします。
最新版 0.6.0 が 2008-10-15 にリリースされ、それ以降リリースがありませんが、一応最新版がリリースされていないか確認してください。

# wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

解凍します。

# tar jxf ffmpeg-php-0.6.0.tbz2

コンパイル・インストールをします。

# cd ffmpeg-php-0.6.0
# phpize
# ./configure
# make
# make install

下記のエラーが表示される場合は修正が必要になります。

/usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c: In function ‘zim_ffmpeg_frame_toGDImage’:

/usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:336: error: ‘PIX_FMT_RGBA32’ undeclared (first use in this function)

/usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:336: error: (Each undeclared identifier is reported only once

/usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:336: error: for each function it appears in.)

/usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c: In function ‘zim_ffmpeg_frame_ffmpeg_frame’:

/usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:421: error: ‘PIX_FMT_RGBA32’ undeclared (first use in this function)

make: *** [ffmpeg_frame.lo] エラー 1

修正内容
ffmpeg_frame.c を修正します。
下記の箇所の PIX_FMT_RGBA32 → PIX_FMT_RGB32 に修正します。

# vi ffmpeg_frame.c
  • 修正前
    336行目位
    Everything is expanded.Everything is shortened.
      1
    
     
    
    _php_convert_frame(ff_frame, PIX_FMT_RGBA32);
    421行目位
    Everything is expanded.Everything is shortened.
      1
    
     
    
    avpicture_alloc((AVPicture*)frame, PIX_FMT_RGBA32, width, height);
    432行目位
    Everything is expanded.Everything is shortened.
      1
    
     
    
    ff_frame->pixel_format = PIX_FMT_RGBA32;
  • 修正後
    336行目位
    Everything is expanded.Everything is shortened.
      1
    
     
    
    _php_convert_frame(ff_frame, PIX_FMT_RGB32);
    421行目位
    Everything is expanded.Everything is shortened.
      1
    
     
    
    avpicture_alloc((AVPicture*)frame, PIX_FMT_RGB32, width, height);
    432行目位
    Everything is expanded.Everything is shortened.
      1
    
     
    
    ff_frame->pixel_format = PIX_FMT_RGB32;


ffmpeg.so モジュールがの組み込み

ここでは php.d/ffmpeg.ini を使用します。
※直接 php.ini で組み込むこともできます。

以下のコマンドを実行し、gd用の設定ファイルをコピーし、ffmpeg用に修正します。

# cd /etc/php.d
# cp gd.ini ffmpeg.ini
# vi ffmpeg.ini

下記の内容に書き換えます。

Everything is expanded.Everything is shortened.
  1
  2
 
 
; Enable ffmpeg extension module
extension=ffmpeg.so


組込確認

  • コマンドラインから確認
    php-cli をインストールしている場合は コマンドラインで確認できます。
    # php -m
    [PHP Modules]
    …
    ffmpeg
    …
  • Webから確認する場合
    コマンドラインで組込が確認できたら Apache を再起動させて Web で確認します。
    # /etc/init.d/httpd reload
    info.php を作成しffmpeg の項目を確認します。
    Webの公開用ディレクトリに移動し下記の内容でPHPファイルを作成してください。
      1
      2
      3
    
    <?php
    phpinfo();
    ?>
    ブラウザからこのファイルを開いて、ffmpeg の項目を確認します。


動作検証

簡単な検証用プログラムを作ります。
手元にある動画ファイル名に置き換えてください。(このプログラムと同じフォルダにない場合はPATH指定を追記)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
<?php
$movie_path = 'sample.avi';            // 動画のファイルパス
$movie = new ffmpeg_movie($movie_path);        // インスタンスを生成
 
$file_name = htmlspecialchars($movie->getFileName(), ENT_QUOTES);    // ファイル名取得
$bitrate = htmlspecialchars($movie->getFrameRate(), ENT_QUOTES);    // フレームレート取得
 
echo "{$file_name}<br />\n";            // ファイル名表示
echo "{$bitrate}<br />\n";            // フレームレート表示
 
exit();
?>

ブラウザから表示すると

sample.avi
23.976024627686

こういう感じでファイル名とビットレートが表示されます。
このような表示がでない場合は記述エラーか組込エラーなどが考えられますのでエラー表示やログを見て対応してください。


APIドキュメント

ffmpeg-phpの公式サイトではAPIドキュメントが用意されています。
FFMPEG-PHP Documentation:API Docs



Last-modified: 2015-04-23 (木) 17:52:16 (1005d)