概要
- FFmpeg の高レベルアーキテクチャと基本的な使い方の概要
- ツール群とライブラリ の役割と構成要素の紹介
- メディアストリームのデマックス・デコード処理 の流れを解説
- 主要な構造体と関数 の使用例をコード付きで説明
- ビルド・実行手順 と出力例の紹介
FFmpegの高レベルアーキテクチャ概要
- FFmpeg は多様な音声・動画フォーマットのエンコード・デコード・トランスコード・ストリーミングを支援する ツール群とライブラリ群 から構成
- 公式リポジトリ名 :ffmpeg-101
FFmpegツール一覧
- ffmpeg :コマンドラインでマルチメディアファイルを他フォーマットへ変換するツール
- ffplay :SDLおよびFFmpegライブラリを利用したシンプルなメディアプレイヤー
- ffprobe :メディアストリームの解析ツール
FFmpegライブラリ一覧
- libavformat :I/Oとマルチプレクサ/デマルチプレクサ処理
- libavcodec :エンコード・デコード処理
- libavfilter :メディア用のグラフベースフィルター
- libavdevice :I/Oデバイス対応
- libavutil :マルチメディア共通ユーティリティ
- libswresample :音声リサンプリング・フォーマット変換・ミキシング
- libswscale :色空間変換・画像スケーリング
- libpostproc :映像後処理(デブロック・ノイズ除去)
FFmpegシンプルプレイヤーの処理流れ
- デマルチプレクサ でファイルやネットワークから 音声・動画ストリーム を抽出し、 デコーダ で生データへ変換
- 主な構造体 :
- AVFormatContext :ストリーム同期・メタデータ・マルチプレクサ管理
- AVStream :連続ストリーム(音声/動画)
- AVCodec :エンコード・デコード方式定義
- AVPacket :エンコード済みデータ
- AVFrame :デコード済み生データ(映像フレーム/音声サンプル)
デマルチプレクス・デコードの基本ロジック
- AVFormatContext の確保・初期化
AVFormatContext* format_context = avformat_alloc_context();
- 入力ファイルのオープン
avformat_open_input(&format_context, filename, NULL, NULL);
- ファイル内容の解析・ストリーム情報取得
avformat_find_stream_info(format_context, NULL);
- ストリーム一覧の出力
- ループで各 AVStream 情報を表示
- ファイルクローズ・リソース解放
avformat_close_input(&format_context);
コーデックの検索とセットアップ
- 各 AVStream から対応する AVCodec を検索
const AVCodec* codec = avcodec_find_decoder(stream->codecpar->codec_id);
- コーデック情報の出力(ビデオ/オーディオのパラメータ表示)
デコーダコンテキストの初期化
- AVCodecContext の確保
AVCodecContext* codec_context = avcodec_alloc_context3(first_video_stream_codec);
- コーデックパラメータの適用
avcodec_parameters_to_context(codec_context, first_video_stream_codec_params);
- デコーダのオープン
avcodec_open2(codec_context, first_video_stream_codec, NULL);
パケットとフレームの処理
- AVPacket/AVFrame の確保
- av_read_frame でパケット取得、該当ストリームならデコーダへ送信
- avcodec_send_packet/avcodec_receive_frame でデコード処理
- デコード済みフレームの情報出力
- パケット/フレーム/デコーダ/フォーマットコンテキスト のリソース解放
ビルドおよび実行手順
- Meson/Ninja によるビルドシステム利用
pip3 install meson ninjaでインストール可能
- セットアップ手順 :
- アーカイブ展開後
ffmpeg-101ディレクトリへ移動 meson setup build(FFmpeg自動ダウンロード&ビルド準備)ninja -C buildでビルド./build/ffmpeg-101 sample.mp4で実行
- アーカイブ展開後
実行結果例
- ファイル・ストリーム・コーデック情報の出力
- 各ストリームのパケット受信・デコード処理状況の出力
- 映像フレームのタイプ・PTS・キーフレーム判定の表示
- 音声ストリームのパケットPTSの連続出力
この概要をもとに、 FFmpeg の基本的なアーキテクチャと実装例を短時間で把握可能。 音声・映像処理アプリケーション開発 の導入として最適。