edo1z blog

プログラミングなどに関するブログです

FFmpeg - mac・PHPで使う

macのバージョンは、10.11.4。El Capitan。

参考: Mac OS XでFFmpegのインストールとWebM動画の作り方

brewでインストールした。ここまで長いオプションは必要ないのかもしれない。

brew install automake celt faac fdk-aac git lame \
libass libtool libvorbis libvpx \
libvo-aacenc opencore-amr openjpeg \
opus sdl schroedinger shtool speex texi2html \
theora wget x264 xvid yasm

FFmpegとは?

FFmpeg(エフエフエムペグ)は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。ライセンスはコンパイル時のオプションによりLGPLかGPLに決定される。コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能なため、幅広く利用されている。

引用:FFmpeg

PHP-FFMpegを使う

最初ffmpeg-phpを使おうとしたけど、エラーでインストールできなかった。2012年で開発終了しているらしい。

PHPでffmpegを利用するには、PHP-FFMpegがおすすめです。Composer対応のモダンなPHP実装なので、PHP5.3以上のコードベースではとても扱いやすいです。 ffmpeg-phpというPHP拡張もありますが、2012年で開発が止まっているのであまりおすすめしません。

引用:FFmpegによる動画エンコードの基本

PHP-FFMpegを使ってみる。

PHP-FFMpeg

上記のREADMEに詳しく書いてあった。composerに追加してupdateしたら下記のような感じで使えるようになる。

composer.json

{
    "require": {
        "php-ffmpeg/php-ffmpeg": "~0.5"
    }
}

fuelphpのコントローラ内でテスト。保存されている動画を取得して、jpgのサムネイル画像を作成して保存している。その後、fuelphpのImageクラスでリサイズして保存した。

//ffmpegテスト
$ffmpeg = FFMpeg\FFMpeg::create(array(
    'ffprobe.binaries' => '/usr/local/bin/ffprobe',
    'ffmpeg.binaries' => '/usr/local/bin/ffmpeg'
));
$video = $ffmpeg->open(DOCROOT.'assets/movie/'.$movie['file_name']);
//     $video
//         ->filters()
//         ->resize(new FFMpeg\Coordinate\Dimension(320, 180))
//         ->synchronize();
$frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(15));
$img_path = DOCROOT.'assets/movie/thumb/'.$movie['id'].'.jpg';
$frame->save($img_path);

//画像のリサイズ
//ffmpegのリサイズが効かない為
Image::load($img_path)->resize(320, null, true, true)->save($img_path);