Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

FFmpeg APIで、さまざまな動画を操る - 前編

自作アプリケーションに動画の読み込み処理を組み込む

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/06/20 14:00

オープンソースの動画録画・変換・配信ソフトウェアとしてFFmpegが有名となりつつありますが、そのAPIに関してはあまり解説されていません。本稿ではFFmpeg APIについて説明し、自分のプログラムから様々なコーデックを使って動画を扱う方法を説明します。

目次

はじめに

 こんにちわ、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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2008/06/25 23:40 手順に不具合がありサンプルがビルドできませんでしたので、手順を修正しました。

  • 2008/06/25 17:30 サンプルファイルを一部修正しました。

著者プロフィール

  • hiratara(ヒラタラ)

    1977年に苫小牧市で生まれる。北海道大学理学部数学科卒。小学生の頃、両親に買い与えられたMZ-2500でプログラミングを始めた。学生時代、CGIの自作に没頭し、それ以降WEB開発の魅力に憑かれる。社会人になっても数学好きは変わらず、専門書を買い集めるのが最近の趣味。 id:hirataraに...

バックナンバー

連載:FFmpeg APIで、さまざまな動画を操る
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5