2017-03-07 18 views
0

私の目標は、既存の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の値を他のいくつかの形式に変更しました。&は、出力名をそれに応じて更新しました。

答えて

0

cv::VideoWriterも処理済みのビデオを保存できなかったため、苦労しました。

は最後に、私は、これをあきらめた今私はAVAssetWriterを使用しています:(

私は誰かがこの問題を解決を願ってい

関連する問題