私の目標は、既存のMP4ビデオを開いてフレームを処理し、主にOpenCV
によって書き戻す、基本的な概念証明アプリケーションを作成することです。iOS 10でOpenCV 3.1を使用してVideoWriterでファイルを作成することができません
ビデオを開いてフレームを処理できるうちに、正常に書き戻せませんでした。私がオンラインで見つけた小さな文献は、うまくいかないか、答えられていません。
は、次の私は、ファイルを書き込むためにしようとした最初のアプローチです:
NSString *path = [[NSBundle mainBundle] pathForResource:@"MyVideo" ofType:@"mp4"];
std::string filename = path.UTF8String;
self.videoCapture = cv::VideoCapture(filename);
if(!self.videoCapture.isOpened()) std::cout << "Unable to open source" << std::endl;
int width = static_cast<int>(self.videoCapture.get(CV_CAP_PROP_FRAME_WIDTH));
int height = static_cast<int>(self.videoCapture.get(CV_CAP_PROP_FRAME_HEIGHT));
double fps = self.videoCapture.get(CV_CAP_PROP_FPS);
cv::VideoWriter videoWriter("output.mp4", self.videoCapture.get(CV_CAP_PROP_FOURCC), fps, cv::Size(width, height));
if (!videoWriter.isOpened())
{
std::cout << "Unable to open writer" << std::endl;
return;
}
このアプローチの1つの当面の問題は、私は幅、高さ、FPSや他のほとんど何のために取得した値がCV_CAP
に関連していることです私はそれが特定のファイルタイプの問題であることを読んだが、それはmp4、movおよびmkvで発生するので、助けにならなかった。
次に、私はビデオで本当のことを知っていた値をハードコードしましたが、ライターを開くことができないと同じ結果を得ていました。それは価値がある何のため
NSString *path = [[NSBundle mainBundle] pathForResource:@"MyVideo" ofType:@"mp4"];
std::string filename = path.UTF8String;
self.videoCapture = cv::VideoCapture(filename);
if(!self.videoCapture.isOpened()) std::cout << "Unable to open source" << std::endl;
cv::VideoWriter videoWriter("output.mkv", CV_FOURCC('m','p', '4', 'v'), 30, cv::Size(1920, 1080));
if (!videoWriter.isOpened())
{
std::cout << "!!! Output video could not be opened" << std::endl;
return;
}
、私は既存の出力ファイルの問題であることについてそこ読みになりましたので、私は、ファイル&は運なしで、名前を変更、削除。
また、FOURCCの値を他のいくつかの形式に変更しました。&は、出力名をそれに応じて更新しました。