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值更改爲其他幾種格式&相應地更新了輸出名稱,但沒有任何成功。