OpenCV 1.1pre で mp4 を処理する
ようやっと出来るようになった.情報元はhttp://www.ar-lab.info/mt/weblog/archives/2009/03/opencvmpeg2mov.html.手順は,
- http://tech.groups.yahoo.com/group/OpenCV/ を参照
- yahoo.com sign up
- OpenCV の Yahoo Group に Join
- Files から ffopencv110.rar を入手
- 中身の ffopencv110.dll を OpenCV の bin/ に放る
問題は2点.
- flv 読込実験をしていない
- mpeg2 を読み込めない
実験
いくつかの動画ファイルを cvCaptureFromAVI() で読んでみた.
入力ファイル
入力した動画の詳細は 真空波動研Lite 081122 / DLL 081122 の出力で熟知すべし.
[0001.avi] 720x480 24Bit DivX 5.x 29.97fps 1338f 1048.64kb/s MPEG2-LayerIII 22.05kHz 96.00kb/s CBR Stereo INFOTAG [RIFF(AVI1.0)] 00:00:44.644 (44.644sec) / 6,440,650Bytes [0001[cinepak,mp3].avi] 720x480 24Bit Radius Cinepak 29.97fps 1337f 3208.40kb/s MPEG2-LayerIII 24.00kHz 56.00kb/s CBR JointStereo/I [RIFF(AVI1.0)] 00:00:44.611 (44.611sec) / 18,252,536Bytes [90frame.avi] 256x256 24Bit 無圧縮 5.00fps 90f 7864.64kb/s [RIFF(AVI1.0)] 00:00:18.000 (18.000sec) / 17,700,984Bytes [1000frames.avi] 256x256 24Bit 無圧縮 5.00fps 1858f 7864.64kb/s [RIFF(AVI1.0)] 00:06:11.600 (371.600sec) / 365,346,360Bytes [08bbc6e4-33b7-46d9-beef-b9e3c8b14423.avi] 256x256 24Bit XviD 1.1.-127 5.00fps 52675f 60.65kb/s [RIFF(AVI1.0)] 02:55:35.000 (10535.000sec) / 80,715,776Bytes [IDBJ.avi] 256x224 24Bit 3ivx Delta 4 60.00fps 663f 1334.43kb/s PCM 22.05kHz 16Bit 2ch 705.60kb/s [RIFF(AVI1.0)] 00:00:11.050 (11.050sec) / 2,843,136Bytes [SM-Redesign_TAS-v1_Drewseph_512kb.mp4] 320x240 24Bit AVC/H.264 Baseline@1.3 60.00fps 408722f 512.26kb/s AAC 44.10kHz 2.0ch(2/0 L+R) LC 64.00kb/s [Extra][2] MP4 Base Media v1 MetaData [MPEG4] 01:53:32.033 (6812.033sec) / 495,134,927Bytes [阪神x広島20070830から3分.mpg] 720x480 29.97fps 4:3 6000.00kb/s MPEG1-LayerII 48.00kHz 224.00kb/s CBR Stereo [Extra][3] SCR : 00:03:00.623 (180.623sec) GOP : 00:02:59.934 (179.934sec) RATE : 00:02:50.037 (170.037sec) [MPEG2] 00:03:00.623 (180.623sec) / 127,535,108Bytes 真空波動研Lite 081122 / DLL 081122
videoPlay.cpp
#include <iostream> #include <cv.h> #include <highgui.h> using namespace std; int main(void) { char *in_video_file = "c:/data/video/roid/SM-Redesign_TAS-v1_Drewseph_512kb.mp4"; // 事前から読込不能 // 0001.avi // 0001[cinepak,mp3].avi // 90frame.avi // 1000frames.avi // 08bbc6e4-33b7-46d9-beef-b9e3c8b14423.avi // roid/IDBJ.avi // 新たに読込可能 // roid/SM-Redesign_TAS-v1_Drewseph_512kb.mp4 // 依然として読込不能 // baseball/阪神x広島20070830から3分.mpg CvCapture *in_video_cap = cvCaptureFromFile(in_video_file); if(!in_video_cap) { // ビデオ読込失敗 cout << "ビデオ読込失敗" << endl; cout << " in_video_file: " << in_video_file << endl; return 1; } // ビデオ読込成功 cout << "ビデオ読込成功" << endl; cout << " in_video_file: " << in_video_file << endl; char *play_window_name = "映像表示"; cvNamedWindow(play_window_name); IplImage *frame; int key; while( (frame = cvQueryFrame(in_video_cap) ) != NULL) { cvShowImage(play_window_name, frame); key = cvWaitKey(8); if(key == 0x1b) // ESC キーで中断 break; } cvReleaseCapture(&in_video_cap); cvDestroyAllWindows(); return 0; }
結果
初期状態では入力した動画リストの下2つが読み込めなかった.ffopencv110.dll 導入後には新たに mp4 を読み込めるようになった.MPEG-2 ビデオは依然として読み込めなかった.本家は読めるのに.
C:\Software\AV\ffmpeg>ffmpeg -formats | grep mpeg2 FFmpeg version SVN-r12665, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: --enable-gpl --enable-postproc --enable-swscale --enable-avfilt er-lavf --enable-pthreads --enable-liba52 --enable-avisynth --enable-libfaac --e nable-libfaad --enable-libgsm --enable-memalign-hack --enable-libmp3lame --enabl e-libnut --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --cpu=i686 --extra-ldflags=-static libavutil version: 49.6.0 libavcodec version: 51.54.0 libavformat version: 52.13.0 libavdevice version: 52.0.0 built on Apr 2 2008 22:35:11, gcc: 4.2.3 E mpeg2video MPEG2 video DEVSDT mpeg2video