无法在iOS 10上使用OpenCV 3.1创建VideoWriter文件

问题描述:

我的目标是创建一个基本的概念验证应用程序,其中主要通过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值更改为其他几种格式&相应地更新了输出名称,但没有任何成功。

我也在努力与cv::VideoWriter,因为它也不能保存处理过的视频。

最后,我放弃了这个,现在我使用AVAssetWriter:(

我希望有人解决这个问题