Q&A
MP4動画を読み込んで前フレームとの差分を取り、それを動画として再出力させるC++プログラムを書こうとしているのですが、このプログラムに30秒の動画を入力として与えて実行したところ、出力された動画の再生時にエラーなどは出なかったのですが、長さが0秒になっていました。出力部分にブレークポイントを置いてみると、正常に繰り返しが動作していることは確認できています。
原因と解決法をご存知の方がいましたら、お教えください。
環境としてはWindows10を使用していて、コンパイラはVS Community 2017です。また、PCにWMV1のコーデックが入っていることも確認済です。
C++
1#include "stdafx.h" 2#include <opencv2/opencv.hpp> 3#include <opencv2/core.hpp> 4#include <opencv2/videoio.hpp> 5#include <opencv2/highgui.hpp> 6#include <iostream> 7#include <string> 8#include <algorithm> 9#include <fstream> 10using namespace cv; 11 12int main() 13{ 14 std::string path_in, path_out;//入力を受け付ける 15 VideoCapture cap(path_in); 16 if (!cap.isOpened()) { 17 std::cout << "No input file"; 18 waitKey(); 19 return -1; 20 } 21 Mat frame,prev_frame; 22 Vec3b bgr; 23 cap >> prev_frame; 24 Mat diff(prev_frame.rows, prev_frame.cols, CV_8UC1); 25 VideoWriter out(path_out+"out.wmv",VideoWriter::fourcc('W','M','V','1'),30.0,Size(prev_frame.rows, prev_frame.cols) ); 26 if (!cap.isOpened()) { 27 std::cout << "No input file"; 28 waitKey(); 29 return -1; 30 } 31 while (true) { 32 cap >> frame; 33 if (frame.empty())break; 34 absdiff(frame, prev_frame, diff); 35 out << diff; 36 prev_frame = frame; 37 } 38 return 0; 39}
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2019/07/11 09:02 編集