SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

翔泳社では、「独習」「徹底入門」「スラスラわかる」「絵で見てわかる」「一年生」などの人気シリーズをはじめ、言語や開発手法、最新技術を解説した書籍を多数手がけています。プロジェクトマネジメントやチームビルティングといった管理職向けの書籍も豊富です。

ITエンジニアとしてのスキルアップ・リスキリングに、ぜひお役立てください。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659429002935-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659429002935-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659429002935-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659429002935-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659429002935-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
FFmpeg APIで、さまざまな動画を操る

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

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


オープンソースの動画録画・変換・配信ソフトウェアとして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をします。後は、通常通りmakeとmake 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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます
  • ・翔泳社の本が買える!
    500円分のポイントをプレゼント

メールバックナンバー

次のページ
サンプル: サムネイル画像を作る 前編

修正履歴

この記事は参考になりましたか?

FFmpeg APIで、さまざまな動画を操る連載記事一覧
この記事の著者

hiratara(ヒラタラ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2444 2008/06/26 11:25
" ); }

おすすめ

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  3. 3
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    Anthropicは、Claude Codeのセッションを管理できる「Agent view」を導入 NEW
  1. 6
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  2. 7
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  3. 8
    そのコードは誰に届くのか? GovTech東京が挑む、アクセシビリティを「当たり前品質」にする開発プロセス NEW
  4. 9
    AI生成コードの品質責任をどう果たすか? エンジニアに求められる「検証」へのシフトとテスト自動化の要諦 NEW
  5. 10
    Linuxカーネルに影響する「Dirty Frag」脆弱性が公開、対策手順を案内

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  3. 3
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    Anthropicは、Claude Codeのセッションを管理できる「Agent view」を導入 NEW
  6. 6
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  7. 7
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  8. 8
    そのコードは誰に届くのか? GovTech東京が挑む、アクセシビリティを「当たり前品質」にする開発プロセス NEW
  9. 9
    AI生成コードの品質責任をどう果たすか? エンジニアに求められる「検証」へのシフトとテスト自動化の要諦 NEW
  10. 10
    Linuxカーネルに影響する「Dirty Frag」脆弱性が公開、対策手順を案内
  1. 1
    Google、4月に発表したGeminiアプリの新機能をまとめて紹介
  2. 2
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  3. 3
    Googleが「Gemini Embedding 2」を一般公開、マルチモーダル対応
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    「分割代入」 ~マンガでプログラミング用語解説
  6. 6
    Google、エージェント構築を実践的に学習できる無料コースを6月に開催
  7. 7
    OpenAI、「GPT-5.5」をリリース
  8. 8
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  9. 9
    高額の技術書がKindleで50%オフのお得なセール 翔泳社の本を対象に5/14まで
  10. 10
    ChromeでGeminiのプロンプトをツール化する「skills」機能が提供開始

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  3. 3
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    Anthropicは、Claude Codeのセッションを管理できる「Agent view」を導入 NEW
  1. 6
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  2. 7
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  3. 8
    そのコードは誰に届くのか? GovTech東京が挑む、アクセシビリティを「当たり前品質」にする開発プロセス NEW
  4. 9
    AI生成コードの品質責任をどう果たすか? エンジニアに求められる「検証」へのシフトとテスト自動化の要諦 NEW
  5. 10
    Linuxカーネルに影響する「Dirty Frag」脆弱性が公開、対策手順を案内

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  3. 3
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    Anthropicは、Claude Codeのセッションを管理できる「Agent view」を導入 NEW
  6. 6
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  7. 7
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  8. 8
    そのコードは誰に届くのか? GovTech東京が挑む、アクセシビリティを「当たり前品質」にする開発プロセス NEW
  9. 9
    AI生成コードの品質責任をどう果たすか? エンジニアに求められる「検証」へのシフトとテスト自動化の要諦 NEW
  10. 10
    Linuxカーネルに影響する「Dirty Frag」脆弱性が公開、対策手順を案内
  1. 1
    Google、4月に発表したGeminiアプリの新機能をまとめて紹介
  2. 2
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  3. 3
    Googleが「Gemini Embedding 2」を一般公開、マルチモーダル対応
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    「分割代入」 ~マンガでプログラミング用語解説
  6. 6
    Google、エージェント構築を実践的に学習できる無料コースを6月に開催
  7. 7
    OpenAI、「GPT-5.5」をリリース
  8. 8
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  9. 9
    高額の技術書がKindleで50%オフのお得なセール 翔泳社の本を対象に5/14まで
  10. 10
    ChromeでGeminiのプロンプトをツール化する「skills」機能が提供開始