无法在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
:(
我希望有人解决这个问题