自作アプリケーションに動画の読み込み処理を組み込む
hiratara [著] 2008/06/20 14:00

サンプルファイル 420.30 KB
1 2 3 4 5 →

はじめに

 こんにちわ、hirataraです。

 近年、YouTubeやニコニコ動画に代表される動画共有サービスの需要が、急速に高まっています。そのような状況で、オープンソースの動画読み書きソフトウェア「FFmpeg」が、にわかに注目を集めています。

 本稿では、そのFFmpegの共有ライブラリを直接呼び出して、C言語から動画を扱う方法を紹介します。FFmpegにはffmpegという便利なコマンドがついていますので、ほとんどの場合はこのコマンドを利用します。しかし、FFmpegを共有ライブラリ付きでコンパイルすると、自分の作ったプログラムから直接FFmpegのAPIを利用することが可能になります。

 FFmpegの共有ライブラリを利用すると、動画をファイルからデコードして再生をしたり、新たな動画を作成して特定フォーマットでエンコードし、ファイルに保存したりすることができます。対応codecがたくさんあるため、動画プレイヤーやゲームを作成する場合には、大きな力を発揮することでしょう。

対象読者

  • C言語が分かる方
  • 動画をプリミティブに処理したい方
  • ffmpegコマンドについて深く知りたい方

必要な環境

  • テキストエディタ
  • gccが動作する環境(Linux、Mac OS Xを想定)
※2008/06/24追記
 gtaka555様がWindows(Mingw)での本記事の動作検証を行って下さいました。

FFmpegを共有ライブラリ付きでインストールする

 FFmpegを共有ライブラリ付きでインストールするには、ソースコードからコンパイルする必要があります。まずはsvnを利用して、最新のソースを取ってきてください。

最新のソースを取得する
% svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

 そして、--enable-sharedオプション付きでconfigureをします。後は、通常通りmakemake installと実行して、インストールを行ってください。

※2008/06/24追記
 gtaka555様より、r12760以降のリビジョンでは、--enable-swscaleを指定しなければlibswscaleがインストールされないことをご指摘受けました。また、--enable-swscaleを有効にするためには--enable-gplを指定してGPLのソースコードを含んでいることを明示する必要があります。
ビルドする
% ./configure --enable-shared --enable-swscale --enable-gpl
% make
% sudo make install

 なお、このインストール例では最小限の構成でのインストールを行っています。FFmpegで利用可能のファイルフォーマットを増やすためには、対応するコーデックを含むライブラリを別途インストールし、ここで挙げた--enable-shared以外のオプションをconfigureへ指定する必要があります。その詳しい手順に関しては、拙著「FFmpegで作る動画共有サイト」の中で書かれていますので、興味のある方は参照してください。

Mac OS Xでのコンパイル
 FFmpegをMac OS X上で--enable-shared付きでconfigureすると、今日現在のリビジョン(r13235)ではうまくビルドができません。次のように、--disable-mmxオプションを渡してconfigureしてください。
 
※2008/06/24追記
 今日現在のリビジョンでは、--enable-swscaleを指定してビルドをすることができないようです。MacPortsでのこの問題の解決法を参考にパッチを用意しましたので、これを利用して下さい。パッチはサンプルファイルに同梱しました。
OS Xでビルドする
% patch -p0 < ../make_thumb_sample/ffmpeg-os_x-r13235.patch
% ./configure --enable-shared --disable-mmx --enable-swscale --enable-gpl
% make
% sudo make install
FFmpegのリビジョン
 FFmpegは執筆時点(2008年5月現在)では、とても開発が活発なプロジェクトです。SVN上のソースは刻一刻と変化し続けているため、未来のバージョンでは本稿のプログラムは動かない可能性があります。もっと不運な場合ですと、FFmpegのビルドすらできないことがあります。
 
 もし、SVNのHEADのソースを利用してうまく行かない場合は、本稿の執筆の検証のために利用したリビジョンであるr13235をご利用ください。ソースのチェックアウトを以下のコマンドで行います。
r13235を取ってくる
% svn co -r 13235 svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

インストールしたFFmpegの使い方

 FFmpegをインストールすると、ffmpegというコマンドが利用できるようになります。例えば、次のようなコマンドで、動画フォーマットの変更ができます。

ffmpegコマンドの実行
% ffmpeg -i sample.mov -r 30 sample.mpeg

 本稿ではffmpegコマンドは一切利用しないので、コマンドラインオプションなど詳しい説明に関しては拙著「FFmpegで作る動画共有サイト」を参照してください。

サンプルのコンパイル・実行の仕方

 サンプルスクリプトには簡単なMakefileを用意していますので、次のようにmakeしてください。

makeする
% make
gcc -O4 -Wall   -c -o make_thumb.o make_thumb.c
gcc -o make_thumb  make_thumb.o -lavutil -lavformat -lavcodec -lswscale

 makeするとmake_thumbコマンドができますので、「./make_thumb [読み込み動画ファイル] [出力画像]」と実行します。今回は手っ取り早く試せるよう、サンプルに「sample.mov」も添付しています。

実行
% ./make_thumb sample.mov sample.jpeg

1 2 3 4 5
→
INDEX
FFmpeg APIで、さまざまな動画を操る - 前編
Page1
はじめに
対象読者
必要な環境
サンプル: サムネイル画像を作る 前編
FFmpegの構造体のまとめ
まとめ
参考文献
プロフィール
hiratara ヒラタラ

北大数学科出身。WEBを中心としたプログラミング経験は10年目。
元来から無駄なくらい神経質で凝り性な上に、数学と言う名の新興宗教にどっぷり浸かってしまったため、コードの美しさに必要以上にこだわる傾向がある。

id:hirataraにてblogを執筆中。現在は自社の不動産サイトの開発に携わっている。


注目の求人情報
プロジェクトマネージャー/外資ITソリューション
マイクロソフトソリューション適用プロジェクトでのマネジメント(コスト管理、品質管理、リスク管理、...
機械・電気・回路設計/株式会社デンソー
空調機器の電動化推進の中核部署として、世界中の車両メーカのニーズを先取りし、電動コンプレッサのイ...
コンサルタント/WEB業界のスペシャリストとしてご活躍いただける、コンサルタント職での募集です!
多角的な観点からクライアントのビジネスニーズを理解し、マーケティング戦略の立案、ウェブサイトやEC...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: