arinux

Linux サーバー設定備忘録
ffmpeg-php


ffmpeg-php は、ffmpeg の機能の一部を PHP エクステンションとして利用できるものです。


メモ ffmpeg コンパイル


※ ffmpeg-phpのインストールには ffmpeg 本体が必要で、ffmpeg のコンパイル時に以下を指定する必要があります。

--enable-shared


メモ ffmpeg-php インストール


  1. ffmpeg-php を利用するためには、以下のものが必要です。

    • ffmpeg-0.4.9_pre1 以上
    • php-4.3.0 以上
    • gd-2.0 以上(PHP にバンドルされています)


  2. http://ffmpeg-php.sourceforge.net/ から、「ffmpeg-php-0.6.0.tbz2」 をダウンロードして、「/usr/local/src」 に置きます。


  3. 解凍します。
  4. [root]# cd /usr/local/src
    [root]# tar xjf ffmpeg-php-0.6.0.tbz2 -C /usr/local/src
    


  5. configuration ファイルを作成します。
  6. [root]# cd /usr/local/src/ffmpeg-php-0.6.0
    [root]# phpize
    Configuring for:
    PHP Api Version:         20041225
    


  7. コンフィグ、コンパイル、インストールします。
  8. [root]# ./configure
    [root]# make
    [root]# make install
    Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/
    


  9. php.ini に extension を追加します。
  10. [root]# vi /usr/local/lib/php.ini
    extension_dir="/usr/local/lib/php/extensions/no-debug-non-zts-20060613"
    extension=ffmpeg.so
    


  11. httpd を再起動します。
  12. [root]# /etc/rc.d/init.d/httpd restart
    


  13. 動作確認をします。動作の確認は、/usr/local/src/ffmpeg-php-0.6.0 ディレクトリにある tests と test_ffmpeg.php をドキュメントルートにコピーしてアクセスし、テスト用ファイルのデータが出力されれば正常です。

    • http://10.1.1.15/test_ffmpeg.php にアクセス
    • ffmpeg-php version string: 0.6.0-svn
      ffmpeg-php build date string: Feb 25 2009 10:03:14
      libavcodec build number: 3412480
      libavcodec version number: 3412480
      
      Methods available in class 'ffmpeg_movie':
      __construct
      getduration
      getframecount
      getframerate
      getfilename
      (以下、省略)
      


メモ サンプル・コード


参考サイト: ITpro: ffmpeg-phpで動画のデータを取得しよう


  1. フレームレートを表示
  2. [root]# vi sample01.php
    
    <?php
    
    //dl("ffmpeg." . PHP_SHLIB_SUFFIX); //php.ini に記述していれば extension のロードは不要
    
    $movie_path = '/data/www/doga/movie/SampleMovie.mov';  //画像ファイルのパス
    $movie = new ffmpeg_movie($movie_path);    //インスタンス生成
    
    echo $movie->getFileName();   //ファイル名取得、表示
    echo "<br>";
    echo $movie->getFrameRate();  //フレームレート取得、表示
    
    ?>
    


    • 実行結果(http://10.1.1.15/sample01.php にアクセス)
    • movie/SampleMovie.mov
      30
      


  3. 100フレーム目で切り出した画像を表示
  4. [root]# vi sample02.php
    
    <??php
    
    $movie_path = 'movie/spider-man_3-tsr_h480.mov';  //画像のパス
    $movie = new ffmpeg_movie($movie_path);    //インスタンス生成
    
    $frame = $movie->getFrame(100);            //100フレーム目を取得
    $image = $frame->toGDImage();              //画像データを取得
    
    ob_end_clean();
    header('Content-Type: image/jpeg');
    imageJpeg($image,null,100);
    imageDestroy($image);
    
    ?>
    



ここまで

| arinux | Tools | 15:30 | comments(0) | trackbacks(0) | pookmark |
ffmpeg


フリーの動画と音声コンバータである ffmpeg のインストール方法を説明します。


メモ サーバー構築環境


機種DELL PE650
OSCentOS 4.5
kernel2.6.18-92.1.18.el5
glibc2.5-24
ffmpegSVN-r17630



メモ lame(mp3 エンコーダ)インストール


  1. http://lame.sourceforge.net/download.php/ から、
    「lame-398-2.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。

  2. 解凍します。
  3. [root]# cd /usr/local/src
    [root]# tar zxvf lame-398-2.tar.gz
    


  4. コンフィグ、コンパイル、インストールします。
    [root]# ./configure
    [root]# make
    [root]# make install
    



メモ subversion インストール


  1. ffmpeg の最新版のダウンロードのために svn コマンドが必要ですので、subversion をインストールします。
  2. [root]# yum install subversion
    



メモ ffmpeg インストール


  1. ffmpeg のソースをダウンロードします。
  2. [root]# svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
    (省略)
    Checked out external at revision 28738.
    
    Checked out revision 17630.
    


  3. こちらのサイトを参考に、「libavcodec/libmp3lame.c」にパッチを当てます。

  4. コンフィグ、コンパイル、インストールします。
  5. [root]# cd /usr/local/src/ffmpeg
    [root]# ./configure --prefix=/usr/local --enable-libmp3lame --enable-encoder=swf --enable-shared
    --disable-demuxer=v4l --disable-demuxer=v4l2
    [root]# make
    [root]# make install
    
    虫眼鏡 videodev.h に対するエラーの対処


    コンパイル中に、以下のエラーが発生するため、「configure」実行の際、「--disable-demuxer=v4l --disable-demuxer=v4l2」を指定しています。

    /usr/include/linux/videodev.h:56: error: 文法エラー が "ulong" の前にあります
    /usr/include/linux/videodev.h:72: error: 文法エラー が '}' トークンの前にあります
    libavdevice/v4l.c: In function `grab_read_header':
    libavdevice/v4l.c:75: error: storage size of 'tuner' isn't known
    libavdevice/v4l.c:133: error: invalid application of `sizeof' to incomplete type `video_tuner'
    libavdevice/v4l.c:140: error: invalid application of `sizeof' to incomplete type `video_tuner'
    libavdevice/v4l.c:75: 警告: unused variable `tuner'
    make: *** [libavdevice/v4l.o] エラー 1
    



メモ ffmpeg の実行


ここでは、QuickTime の「.mov」ファイルをフラッシュ「.swf」への変換を例にしています。


※ffmpeg のオプションの意味は、こちらに載っています。


  1. 音声のサンプリング値を指定しない場合
  2. [root]# ffmpeg -i ./SampleMovie.mov -acodec libmp3lame sample01.swf
    FFmpeg version SVN-r17630, Copyright (c) 2000-2009 Fabrice Bellard, et al.
    (省略)
    [swf @ 0x894e160]swf does not support that sample rate, choose from (44100, 22050, 11025).
    Could not write header for output file #0 (incorrect codec parameters ?)
    
    虫眼鏡 -ar オプションで、サンプリング周波数の指定が必要です。


  3. 音声をカットする場合
  4. [root]# ffmpeg -i ./SampleMovie.mov -an sample02.swf
    


  5. 音声のサンプリング値を指定
  6. [root]# ffmpeg -i ./SampleMovie.mov -ar 22050 -acodec libmp3lame sample03.swf
    


  7. 変換元の動画ファイルの情報を見る
  8. [root]# ffmpeg -i SampleMovie.mov
    (省略)
    Seems stream 0 codec frame rate differs from container frame rate: 23.98 (2997/125) -> 23.98 (24000/1001)
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SampleMovie.mov':
      Duration: 00:01:37.15, start: 0.000000, bitrate: 1382 kb/s
        Stream #0.0(eng): Video: h264, yuv420p, 480x228, 23.98 tbr, 23.98 tbn, 23.98 tbc
        Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16
        Stream #0.2(eng): Data: tmcd / 0x64636D74
    At least one output file must be specified
    


  9. ビットレート、フレーム、サイズを指定
  10. [root]# ffmpeg -i ./SampleMovie.mov -b 512k -r 24 -s 480x228 -ar 44100 -acodec libmp3lame sample04.swf
    (省略)
    Output #0, swf, to 'sample04.swf':
        Stream #0.0(eng): Video: flv, yuv420p, 480x228, q=2-31, 512 kb/s, 90k tbn, 24 tbc
        Stream #0.1(eng): Audio: libmp3lame, 44100 Hz, stereo, s16, 64 kb/s
    Stream mapping:
      Stream #0.0 -> #0.0
      Stream #0.1 -> #0.1
    Press [q] to stop encoding
    frame= 2330 fps=108 q=2.0 Lsize=    7004kB time=97.08 bitrate= 591.0kbits/s
    video:6180kB audio:759kB global headers:0kB muxing overhead 0.937022%
    


  11. さらに、音量を倍に指定
  12. [root]# ffmpeg -i ./SampleMovie.mov -b 512k -r 24 -s 480x228 -ar 44100 -vol 512 -acodec libmp3lame sample05.swf
    (省略)
    


  13. HTML編集
  14. [root]# vi /var/www/html/sample05.html
    
    <!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -->
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>ffmpeg TEST</title>
    </head>
    <body topmargin="0" leftmargin="0" bgcolor="#d9d9d9">
    <OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
     CODEBASE="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,0,0" 
     WIDTH=480 HEIGHT=228>
    <PARAM NAME=movie VALUE="sample05.swf">
    <PARAM NAME=bgcolor VALUE=#FFFFFF>
    <PARAM NAME=LOOP VALUE=false>
    <PARAM NAME=quality VALUE=high>
    <EMBED SRC="sample05.swf" WIDTH=480 HEIGHT=228 bgcolor=#FFFFFF LOOP=false QUALITY=high
    PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" 
     TYPE="application/x-shockwave-flash" </EMBED>
    </OBJECT>
    </body>
    </html>
    


  15. swf ファイルを DocumentRoot へコピーします。
  16. [root]# cp sample05.swf /var/www/html/.
    


  17. http://<url>/sample05.html へアクセスして、正常に動画が再生されることを確認します。



つづく

| arinux | Tools | 11:44 | comments(0) | trackbacks(0) | pookmark |
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< December 2017 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ 掲載予定のタイトル
  • Wordpress
  • Pukiwiki
  • SMTPs/POPs/IMAPs
  • fml
  • Tips
+ CSS Nite
+ MOBILE
qrcode
+ LINKS
+ RECOMMEND
+ PROFILE