【问题标题】:OpenCV cv::VideoWriter stops writing without warningOpenCV cv::VideoWriter 在没有警告的情况下停止写入
【发布时间】:2015-03-12 16:19:15
【问题描述】:

我对 OpenCV 的 VideoWriter 有一个奇怪的行为: 一段时间后(大约 2 到 5 分钟,35fps 1080i MJPEG 流,取决于录制的视频类型),OpenCV 停止写入我的文件,但保持打开状态,并且不给我任何关于发生了什么的线索(没有cv::exception 被捕获,没有断言,没有警告信息......什么都没有)。如果一切正常,我的程序会继续运行,当我关闭(干净)程序并打开视频文件时,它只包含 XXfirst 分钟的视频...... 这是一小段代码:

            try{
        m_writer1->write(mat1);
        } catch (cv::Exception & e)
        {
            std::cout << e.what() << std::endl;
        }
        if (!m_writer1->isOpened())
        {
            std::cout << "writer1 got pissed off" << std::endl;
        }

我在程序结束时干净利落地释放我的作家。知道会出什么问题吗? :/

【问题讨论】:

  • 多次运行代码中的“XX”是否相同?
  • 不,不是。。目前,为了暂时解决这个问题,我一直在关闭文件并每隔 5 分钟重新打开一个文件。在 1 小时的运行中,我得到大约 10-13 个文件,其中包含 4 到 5 分钟的视频。那时我正在流式传输由采集卡检索到的相对较暗且均匀的桌面背景。例如,当从移动的摄像机流式传输更多色彩和异构数据时,视频会在不到 3 分钟后停止,大约在 1:30 到 3 分钟之间。我怀疑这与在 jpeg 中压缩帧的能力有关..?
  • 平台是什么?我不确定 writer 对象如何处理您放入其中的所有图像,但缓冲区或堆是否可能溢出?
  • 我在 Python 中遇到了同样的问题,经过一段时间后,视频作者停止写入文件。

标签: c++ opencv video


【解决方案1】:

我知道这并不能解决内部问题,但对我来说现在就足够了: 切换到 PIM1 MPEG1 编解码器解决了我的问题。我什至在磁盘空间上获得了少量收益,而且质量足以满足我的需求。

我不认为我最初的问题是由溢出引起的。视频以正常速度录制,因此作者不会溢出。 valgrind 没有注意到任何内存问题,我没有泄漏等...

不管怎样,谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2013-11-20
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    相关资源
    最近更新 更多