SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

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

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

FFmpeg APIの情報源

 FFmpeg APIの情報源は限られています。FFmpeg APIを利用したコーディングで困った時には、FFmpegのソースを参考にするのが1番手っ取り早い方法です。

ffmpeg.c

 ffmpegコマンドのソースです。FFmpeg APIの使い方のほぼすべてがこの部分に詰まっています。特に、次の関数が参考になるでしょう。

av_encode

 動画変換のメインループを含む関数です。入出力ファイルの初期化や、2-PASSモードの処理などがここに含まれます。パケットの読み込みまでをここで行っています。

output_packet

 av_encodeより呼ばれます。読み込んだパケットを1つ受け取り、avcodec_decode_videoを利用してフレームを復号するところまでを行います。

do_video_out、do_audio_out

 output_packetより呼ばれます。復号されたデータを受け取り、avcodec_encode_videoを利用し、出力フォーマットに併せて符号化してパケットを作成します。動画のサイズ変更やPTSの同期処理なども行っています。

write_frame

 do_video_outdo_audio_out等から呼ばれます。パケットを受け取り、書き込み処理を行います。書き出す直前に、-vbsfや-absfなどのオプションで指定できるbitstream filterの処理が行われています。

ffplay.c

 ffmpegとSDLを利用した動画プレイヤーです。動画の読み込みとスレッドの扱い方、音声と画像の同期の取り方を知りたい時に大変役に立つソースです。

output_example.c

 動画を吐き出すサンプルです。書き出し部分だけがコンパクトにまとまっているソースなので、ffmpeg.cが複雑過ぎてわからない時に参考にすると良いでしょう。

 なお、このソースではパケットの書き出しに、av_interleaved_write_frameの代わりにav_write_frameを利用しています。正確な順序でパケットを送り出せる場合は、こちらの方がパフォーマンスがよくなるそうです。

libavformat/avformat.h、libavcodec/avcodec.h 等ヘッダファイル

 ヘッダファイルの関数宣言には、doxygen方式で関数コメントが書かれています。引数や戻り値、関数の概要などを調べたい時に便利です。

 Doxygenがインストールされている場合、FFmpegのソースツリーのrootでdoxygenコマンドを実行すると、doxyディレクトリの下にHTMLドキュメントが吐き出されます。

まとめ

 本稿では、動画処理の後編として以下の内容について説明しました。

  • 動画を書き込むのに必要な手続き
  • FFmpegのソースのアウトライン

 FFmpegと言えばその強力なフォーマット変換機能にばかり目が行ってしまいがちですが、多数のコーデックが揃っており、種々の動画ファイルを自在に操れるAPIこそ未知なる可能性を秘めている部分だと思います。この記事をきっかけに、動画を自在に扱い、誰も想像しなかったようなサービスを開拓するユーザーが現れてくれることを楽しみに待っております。

参考文献

  1. FFmpegで作る動画共有サイト』(月村潤・本間雅洋・堀田直孝・原一浩・足立健誌・尾花衣美・堀内康弘・寺田学 著、毎日コミュニケーションズ、2008年1月)
  2. An FFmpeg and SDL Tutorial
  3. 技術開発【MPEG技術解説】』(パイオニア株式会社)

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
FFmpeg APIで、さまざまな動画を操る連載記事一覧
この記事の著者

hiratara(ヒラタラ)

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2622 2008/07/14 14:00

イベント

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

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

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー