OpenCVライブラリのcv::Mat
型として生成した映像フレームを、FFmpegライブラリ(libavformat,libavcodec,libswscale)で動画ファイルとして書き出すまでの雛形コード。
( 前バージョン:https://gist.github.com/yohhoy/52b31522dbb751e5296e )
- 一部のFFmpeg映像符号化サンプルコードはコーデック遅延(
CODEC_CAP_DELAY
)に対応しないものがあり、エンコーダによっては出力映像ストリームの末尾パケットが欠落する。ストリーム終端到達後のavcodec_encode_video2
NULL通知により正しく対応。 - FFmpegサポート有りOpenCVビルドでも同じことを実現できるが、
cv::VideoWriter
では入力画像としてRGB色空間を要求する。動画系コーデックはYUV色空間ネイィブが主流のため、無駄な色空間変換コストを抑えたい場合に便利(かもしれない)。またOpenCVよりも対応するファイル形式/動画コーデックが多岐にわたる。 - FFmpegの出力フォーマット推定機能を利用しているため、出力ファイル名の拡張子からファイル形式と動画コーデックを自動選択する。エンコーダを明示指定したければ
avcodec_find_encoder
付近をいじる。符号化パラメータを調整したければvstrm->codec
メンバ変数を設定+avcodec_open2
のoptions
指定を行う(エンコーダ毎に対応が異なる)。 -
.mp4
: MPEG-4 ISOファイル形式 + H.264/AVC動画コーデック -
.ogg
: Oggファイル形式 + Theora動画コーデック -
.avi
: AVIファイル形式 + MPEG-4 Video動画コーデック -
.wmv
: ASFファイル形式 + MS-MPEG4 V3動画コーデック -
.ts
: MPEG-2 TSファイル形式 + MPEG-2 Video動画コーデック -
.gif
: アニメーションGIF -
output%d.bmp
,dump-%05d.jpg
など: 連番静止画ファイル(%d
部分は連番数値に置き換えられる)