環境
OpenCV 3.4.13 自前ビルド、WITH_FFMPEG=ON を指定
FFmpeg git-2021-01-20-0bee216
USBカメラは Logitec C270を使用
質問
入力は MJPEG 30fpsで、出力を H.264 のH/Wエンコードで動画を取得したいのですが、良い方法はないでしょうか。
ソースコード
C++
1 cv::VideoCapture caps(0); 2 int w = 1280; 3 int h = 720; 4 5 cv::Size cap_size( w, h ); 6 caps.set( CV_CAP_PROP_FRAME_WIDTH, cap_size.width ); 7 caps.set( CV_CAP_PROP_FRAME_HEIGHT, cap_size.height ); 8 caps.set( CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G') ); 9 caps.set( CV_CAP_PROP_FPS, 30.0 ); 10 11 int outfourcc = CV_FOURCC('H', '2', '6', '4'); 12 cv::VideoWriter writer( fname, outfourcc, fps, cap_size, true ); 13 while ( 1 ) 14 { 15 caps >> m; 16 writer << m; 17 }
実行結果
OpenCV: FFMPEG: tag 0x34363248/'H264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x31637661/'avc1'
と表示され、FOURCC('a','v','c','1') になっているようです。
また、この時のCPU占有率を別のターミナルから top で見てみると、300%を超える値が出ています。
以上の結果から、H.264 の H/Wエンコーダが使えていないと判断しました。
あなたの回答
tips
プレビュー