首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV VideoWriter不工作

OpenCV VideoWriter不工作
EN

Stack Overflow用户
提问于 2014-12-03 15:06:38
回答 2查看 5.3K关注 0票数 3

我正在尝试使用opencv videoWriter获取一个视频文件。但我遇到了以下问题:

代码语言:javascript
运行
复制
>[libx264 @ 0x132b680] broken ffmpeg default settings detected
>[libx264 @ 0x132b680] use an encoding preset (e.g. -vpre medium)
>[libx264 @ 0x132b680] preset usage: -vpre <speed> -vpre <profile>
>[libx264 @ 0x132b680] speed presets are listed in x264 --help
>[libx264 @ 0x132b680] profile is optional; x264 defaults to high
>Could not open codec 'libx264': Unspecified error!!! Output video could not be opened

我的系统中确实有libx264,所以我想最后一行只是一个副作用。

我试图运行的代码是从如何用OpenCV 2.4.3编写视频文件中获取的一个示例。

代码语言:javascript
运行
复制
int main (int argc, char *argv[]){
// Load input video
VideoCapture input_cap("testi.mp4");
if (!input_cap.isOpened())
{
        std::cout << "!!! Input video could not be opened" << std::endl;
        return -1;
}

// Setup output video
cv::VideoWriter output_cap("testo.mp4", 
               input_cap.get(CV_CAP_PROP_FOURCC),
               input_cap.get(CV_CAP_PROP_FPS),
               cv::Size(input_cap.get(CV_CAP_PROP_FRAME_WIDTH),
               input_cap.get(CV_CAP_PROP_FRAME_HEIGHT)));

if (!output_cap.isOpened())
{
        std::cout << "!!! Output video could not be opened" << std::endl;
        return -1;
}


// Loop to read from input and write to output
cv::Mat frame;

while (true)
{       
    if (!input_cap.read(frame))             
        break;

    output_cap.write(frame);
}

input_cap.release();
output_cap.release();

return 0;
}

我发现了一个类似的问题,如何从已打开的文件中获取流信息?,但还没有人正确地回答。

我发现人们被告知要检查opencv是否使用旧的fmmpeg而不是libav,因为它是一个新的构建,而我的ubuntu没有ffmpeg。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-08 13:32:53

迪马扎夫的回答并不完全正确。首先,您需要将输出视频文件扩展名从.mp4更改为.avi。然后,如果运行该代码,您将得到以下错误信息:

代码语言:javascript
运行
复制
OpenCV Error: Unsupported format or combination of formats (Gstreamer Opencv backend does not support this codec.) in CvVideoWriter_GStreamer::open, file /home/rwduzhao/store/opencv-2.4.13/modules/highgui/src/cap_gstreamer.cpp, line 1372
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/rwduzhao/store/opencv-2.4.13/modules/highgui/src/cap_gstreamer.cpp:1372: error: (-210) Gstreamer Opencv backend does not support this codec. in function CvVideoWriter_GStreamer::open

Aborted (core dumped)

这意味着cv::VideoWriter中的opencv2.4不支持libx264格式,或者avi扩展与libx264格式不兼容。我建议不要使用libx264编解码器。您可以尝试使用CV_FOURCC支持的以下编解码格式列表

代码语言:javascript
运行
复制
CV_FOURCC('P','I','M','1')    = MPEG-1 codec
CV_FOURCC('M','J','P','G')    = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec

根据我的经验,CV_FOURCC('D', 'I', 'V', 'X')的质量很好。此外,如果将cv_fourcc设置为-1,则可以在GUI窗口中选择系统中支持的一种编解码格式。您可以看到正在运行的进程这里

票数 1
EN

Stack Overflow用户

发布于 2015-11-27 09:44:14

VideoWriter不支持.mp4扩展。使用.avi代替

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27275043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档