ビデオデータをffmpegでデコードした後、opencvで保存する形式を誰か教えてください。つまり、マトリックスとして保存されている場合、8ビット/ピクセルのようなものですか? 誰かが詳細を説明するドキュメントまたはリンクを提供できる場合は、大きな助けになります。私もググってみましたが、関連するものが見つかりませんでした。
ありがとう。
ビデオデータをffmpegでデコードした後、opencvで保存する形式を誰か教えてください。つまり、マトリックスとして保存されている場合、8ビット/ピクセルのようなものですか? 誰かが詳細を説明するドキュメントまたはリンクを提供できる場合は、大きな助けになります。私もググってみましたが、関連するものが見つかりませんでした。
ありがとう。
調べるための決定的な参照は、おそらくコードそのものです! CvCapture_FFMPEG::open
ファイル内の関数を見てくださいmodules/highgui/src/cap_ffmpeg_impl.hpp
。このメソッドは、たとえばcvCaptureFromAVI()
およびによって呼び出されcvCaptureFromFile()
ます。以下に抜粋されたコードは、ファイルから幅と高さを明確に取得しますが、入力ビット深度を無視し、メモリ内のビデオのパックされた 8:8:8 ビット RGB 表現を常に使用します (PIX_FMT_BGR24
定数で示されます)。
#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0)
int err = avformat_open_input(&ic, _filename, NULL, NULL);
#else
int err = av_open_input_file(&ic, _filename, NULL, 0, NULL);
#endif
.......
#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 3, 0)
avformat_find_stream_info(ic, NULL);
#else
av_find_stream_info(ic);
#endif
.......
avpicture_fill( (AVPicture*)&rgb_picture, rgb_picture.data[0],
PIX_FMT_BGR24, enc->width, enc->height );
これが事実であることのさらなる証拠は、 の次のコードによって提供されますCvCapture_FFMPEG::retrieveFrame
。
img_convert_ctx = sws_getCachedContext(
NULL,
video_st->codec->width, video_st->codec->height,
video_st->codec->pix_fmt,
video_st->codec->width, video_st->codec->height,
PIX_FMT_BGR24,
SWS_BICUBIC,
NULL, NULL, NULL
);
ffmpeg のドキュメントを見ると、PIX_FMT_BGR24
この呼び出しの は宛先のピクセル形式、つまり opencv に渡されるものを指定しています。