2017-03-07 132 views
0

我的目標是創建一個基本的概念驗證應用程序,其中主要通過OpenCV打開現有MP4視頻,處理幀並將其寫回。無法在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; 
} 

這種方法的一個直接的問題是,我得到寬度,高度,FPS和幾乎任何東西的價值與CV_CAP總是1.我讀到它是某些文件類型的問題,但它發生在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:(

我希望有人解決這個問題