LoginSignup
19

More than 1 year has passed since last update.

OpenCV画像処理+FFmpegファイル書出の雛形

Last updated at Posted at 2016-02-17

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_open2options指定を行う(エンコーダ毎に対応が異なる)。
    • .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部分は連番数値に置き換えられる)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19