在 Mac OSX 中使用 cv::VideoWriter 会产生“警告:无法创建空电影文件容器”。
Posted
技术标签:
【中文标题】在 Mac OSX 中使用 cv::VideoWriter 会产生“警告:无法创建空电影文件容器”。【英文标题】:Using cv::VideoWriter in Mac OSX yields "WARNING: Could not create empty movie file container." 【发布时间】:2013-01-27 23:24:09 【问题描述】:我正在尝试在 Mac OSX 上使用 C++ 中的 OpenCV 4.3.2 将图像列表转换为视频文件。该项目正在 XCode 中编译。每次我运行我的代码时,都会出现以下输出:
警告:无法创建空电影文件容器。
没有成功更新电影文件。
第一个警告是由于:
writer.open(argv[2],codec,fps,size);
而关于更新电影文件的第二部分来自:
writer << im;
这里是完整的代码:
#include <cv.h>
#include <highgui.h>
int main( int argc, char** argv )
/*
Skipping unrelated code
*/
// Set FPS of movie
double fps = 30;
// Set frame size of movie
cv::Size size = cv::Size(1920,1080);
// VideoWriter stream to write images to
cv::VideoWriter writer;
int codec = CV_FOURCC('D', 'I', 'V', 'X');
std::cout << "Using codec " << codec << std::endl;
// Open VideoWriter stream
writer.open(argv[2],codec,fps,size);
// Verify that the VideoWriter is open
if(!writer.isOpened())
std::cout << "VideoWriter unable to open" << std::endl;
return -3;
// Structure to hold image
cv::Mat im;
for(int i = 0; i < photos.size(); i++)
// Read image from file
im = cv::imread(photos[i].c_str(), 1 );
if(im.data != NULL )
std::cout << "Writing " << photos[i] << " to file." << std::endl;
// Resize it to match video output
cv::resize(im,im,size);
// Write image to VideoWriter stream
writer << im;
else
std:: cout << "Unable to read file " << photos[i] << std::endl;
return -4;
return 0;
我看到其他人也有类似的错误,但没有一个解决方案可以修复它(例如更改编解码器等)
【问题讨论】:
【参考方案1】:我遇到了同样的问题。我尝试更改 codex 和格式。问题似乎是当我在一个听起来很愚蠢的字符串中创建目录时。 (Mac OSX、C++、Eclipse、opencv)
string directory = "directory/videos/";
VideoWriter out_capture(directory,
CV_FOURCC('D', 'I', 'V', 'X'), frame_rate, Size(512,512));
当我直接添加目录时,它起作用了:
VideoWriter out_capture("directory/videos/",
CV_FOURCC('D', 'I', 'V', 'X'), frame_rate, Size(512,512));
如果有人提出更好的解决方案,我很乐意听到。
【讨论】:
以上是关于在 Mac OSX 中使用 cv::VideoWriter 会产生“警告:无法创建空电影文件容器”。的主要内容,如果未能解决你的问题,请参考以下文章
在 mac osx 上的 Qt 4.7 中使用光栅图形会导致内存泄漏?
如何在 mac osx 10.6 中使用 fsevents 创建观察者