はじめに
こんにちわ、hirataraです。
近年、YouTubeやニコニコ動画に代表される動画共有サービスの需要が、急速に高まっています。そのような状況で、オープンソースの動画読み書きソフトウェア「FFmpeg」が、にわかに注目を集めています。
本稿では、そのFFmpegの共有ライブラリを直接呼び出して、C言語から動画を扱う方法を紹介します。FFmpegにはffmpegという便利なコマンドがついていますので、ほとんどの場合はこのコマンドを利用します。しかし、FFmpegを共有ライブラリ付きでコンパイルすると、自分の作ったプログラムから直接FFmpegのAPIを利用することが可能になります。
FFmpegの共有ライブラリを利用すると、動画をファイルからデコードして再生をしたり、新たな動画を作成して特定フォーマットでエンコードし、ファイルに保存したりすることができます。対応codecがたくさんあるため、動画プレイヤーやゲームを作成する場合には、大きな力を発揮することでしょう。
対象読者
- C言語が分かる方
- 動画をプリミティブに処理したい方
- ffmpegコマンドについて深く知りたい方
必要な環境
- テキストエディタ
- gccが動作する環境(Linux、Mac OS Xを想定)
FFmpegを共有ライブラリ付きでインストールする
FFmpegを共有ライブラリ付きでインストールするには、ソースコードからコンパイルする必要があります。まずはsvn
を利用して、最新のソースを取ってきてください。
% svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
そして、--enable-shared
オプション付きでconfigure
をします。後は、通常通りmake
とmake install
と実行して、インストールを行ってください。
--enable-swscale
を有効にするためには--enable-gpl
を指定してGPLのソースコードを含んでいることを明示する必要があります。% ./configure --enable-shared --enable-swscale --enable-gpl % make % sudo make install
なお、このインストール例では最小限の構成でのインストールを行っています。FFmpegで利用可能のファイルフォーマットを増やすためには、対応するコーデックを含むライブラリを別途インストールし、ここで挙げた--enable-shared
以外のオプションをconfigure
へ指定する必要があります。その詳しい手順に関しては、拙著「FFmpegで作る動画共有サイト」の中で書かれていますので、興味のある方は参照してください。
--enable-shared
付きでconfigure
すると、今日現在のリビジョン(r13235)ではうまくビルドができません。次のように、--disable-mmx
オプションを渡してconfigure
してください。--enable-swscale
を指定してビルドをすることができないようです。MacPortsでのこの問題の解決法を参考にパッチを用意しましたので、これを利用して下さい。パッチはサンプルファイルに同梱しました。% patch -p0 < ../make_thumb_sample/ffmpeg-os_x-r13235.patch % ./configure --enable-shared --disable-mmx --enable-swscale --enable-gpl % make % sudo make install
もし、SVNのHEADのソースを利用してうまく行かない場合は、本稿の執筆の検証のために利用したリビジョンであるr13235をご利用ください。ソースのチェックアウトを以下のコマンドで行います。
% svn co -r 13235 svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
インストールしたFFmpegの使い方
FFmpegをインストールすると、ffmpeg
というコマンドが利用できるようになります。例えば、次のようなコマンドで、動画フォーマットの変更ができます。
% ffmpeg -i sample.mov -r 30 sample.mpeg
本稿ではffmpeg
コマンドは一切利用しないので、コマンドラインオプションなど詳しい説明に関しては拙著「FFmpegで作る動画共有サイト」を参照してください。
サンプルのコンパイル・実行の仕方
サンプルスクリプトには簡単なMakefileを用意していますので、次のように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