任何人都可以告诉我视频数据在通过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 的内容。