我在 opencv 中有以下代码来读取 mp4 文件:
CvCapture *capture =cvCreateFileCapture("DemoRecording.mp4");
if(!capture){
cout<<endl<<"Capture from file error"<<endl;
return;
}
CvSize sz =cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));
CvVideoWriter *writer =cvCreateVideoWriter("DemoRecording.avi", CV_FOURCC('L','A','G','S'), (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS), sz);
IplImage *frame =cvCreateImage(sz, 8, 3);
while(1){
// Read Frames
}
cvReleaseVideoWriter(&writer);
cvReleaseCapture(&capture);
但是,我无法读取 mp4 文件。该文件使用 H. 264 编码。我有以下由 ffmpeg 显示的文件的详细信息:
fplay version N-42347-g299387e Copyright (c) 2003-2012 the FFmpeg developers
built on Jul 8 2012 15:44:54 with gcc 4.7.1
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 51. 64.100 / 51. 64.100
libavcodec 54. 33.100 / 54. 33.100
libavformat 54. 15.102 / 54. 15.102
libavdevice 54. 1.100 / 54. 1.100
libavfilter 3. 1.100 / 3. 1.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'DemoRecording.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf53.31.100
Duration: 00:00:16.23, start: 0.000000, bitrate: 819 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 540x720, 816 kb/s, 21.19 fps, 30 tbr, 600 tbn, 1200 tbc
Metadata:
handler_name : VideoHandler
Frame changed from size:0x0 to size:540x720
[ffplay_buffer @ 04149040] w:540 h:720 pixfmt:yuv420p tb:1/600 fr:0/1 sar:0/1 sws_param:
[ffplay_buffersink @ 04ca69c0] No opaque field provided
我的机器上安装了更新的 k-lite 编解码器包。我也有ffmpeg。使用 libavcodec vfw 解码 mp4 文件的 Premiere pro 等软件能够播放该文件。
但是,openCV 无法读取该文件。对此问题的任何帮助都将受到高度赞赏。