【问题标题】:cv::VideoWriter yields unreadable videocv::VideoWriter 产生不可读的视频
【发布时间】:2012-01-23 23:39:55
【问题描述】:

我想从 52fps 的 RGB 图像流中生成视频文件。我发现 opencv api 使用起来非常方便(cv::VideoWriter)。问题是我只能用 VLC 播放制作的 avi;播放视频但大喊:

[0x28307b0] xcb_xv generic error: no available XVideo adaptor

任何其他视频播放器(在同一台计算机上)都无法读取和播放视频。 录制时一切看起来都不错:我得到了关于输出、帧大小、视频编解码器、fps 等的信息……没有错误。

Output #0, avi, to '01-23-12_15-24-51.avi':
Stream #0.0: Video: flv, yuv420p, 500x242, q=2-31, 7744 kb/s, 90k tbn, 52tbc 

由于 OpenCv 仅支持 avi 作为视频容器,我唯一可以更改的就是视频编解码器,我尝试了(FOURCC 代码)FLV1、DIVX、DIV3,但它们都不能正常工作。

我想用不同计算机上的任何视频播放器播放此视频。我怎样才能让它工作? VideoWriter 是正确的选择吗?

非常欢迎任何建议。

谢谢。

【问题讨论】:

  • 在 52 fps 时,您可能会突破 OpenCV 的极限。我会先尝试 30 fps,看看其他视频播放器对此有何反应。
  • OpenCV 依赖 FFmpeg 来完成所有低级视频相关的工作;我很确定 ffmpeg 可以超过 52 fps。无论如何,感谢我尝试过的建议,但它不起作用。
  • 在创建视频文件时尝试不同的编解码器 (FOURCC)。选择一个简单的、MPEG2 或类似的东西

标签: c++ video opencv


【解决方案1】:

如果您的图像有视频源,最好使用相同的编解码器进行输出:

int videoType = (int)cap.get(CV_CAP_PROP_FORMAT);

VideoWriter vout;
vout.open(videofile + "_out.avi", videoType, 30, imgSize);

或者,您可以尝试更旧、更简单的 FOURCC。如果您只想在 Windows 上运行它,也可以是 Microsoft 特定的。

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 2015-06-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多