【问题标题】:Reading video files with OpenCV VideoCapture使用 OpenCV VideoCapture 读取视频文件
【发布时间】:2014-04-30 21:10:12
【问题描述】:

除了以 MJPEG 编码的视频文件之外,我无法在 OpenCV 中打开任何视频文件。

我已经使用this 脚本安装了 OpenCV(它应该编译支持 ffmpeg 的 OpenCV)并使用提供的示例进行测试 here

使用 h264 编码的视频运行时,我得到:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x123ed80] multiple edit list entries, a/v desync might occur, patch welcome
[h264 @ 0x12465e0] A non-intra slice in an IDR NAL unit.
[h264 @ 0x12465e0] decode_slice_header error
Could not open the output video for write: test.mp4

当运行 MPEG-2 编码的视频时,我得到:

[mpegts @ 0x1e92d80] PES packet size mismatch
[mpegts @ 0x1e92d80] PES packet size mismatch
[mpegts @ 0x1e92d80] max_analyze_duration reached
[mpegts @ 0x1e92d80] PES packet size mismatch
Could not open the output video for write: test.mpeg

我正在运行 x64 Ubuntu 12.04。

编辑:我在 Ubuntu 13.10 x86 VM 上尝试了 OpenCV 2.4.8,ffmpeg 工作正常,但是示例代码仍然失败,这次出现以下错误:

[h264 @ 0x849ff40] A non-intra slice in an IDR NAL unit.
[h264 @ 0x849ff40] decode_slice_header error
Could not find encoder for codec id 28: Encoder not foundOpenCV Error: Unsupported format or combination of formats (Gstreamer Opencv backend doesn't support this codec acutally.) in CvVideoWriter_GStreamer::open, file /home/dan/Install-OpenCV/Ubuntu/2.4/OpenCV/opencv-2.4.8/modules/highgui/src/cap_gstreamer.cpp, line 505
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/dan/Install-OpenCV/Ubuntu/2.4/OpenCV/opencv-2.4.8/modules/highgui/src/cap_gstreamer.cpp:505: error: (-210) Gstreamer Opencv backend doesn't support this codec acutally. in function CvVideoWriter_GStreamer::open

【问题讨论】:

  • 您可能需要找到位于 OpenCV 中的目录 3rdparty\ffmpeg,并将其完整路径添加到您的系统环境变量
  • 错误信息Could not open the **output** video for **write** 提示你不是要读取文件,而是要写入文件。显示您的代码(只需编辑您的问题),其中可能存在错误。
  • @cyriel 抱歉,我在问题中包含了错误的链接。

标签: c++ opencv ffmpeg


【解决方案1】:

我不确定造成这种情况的主要原因。但我想这个问题与您系统上安装的解码器有关。根据来自 github 的安装脚本,它会删除您的 ffmpg 和 x264,然后从源代码重建它们。在测试您的 OpenCV 代码之前,请在您的测试视频上尝试简单的“ffmpeg”命令。 如:ffmpeg -i inputfile.avi -f image2 image-%3d.jpeg

【讨论】:

    【解决方案2】:
    1. 你用的脚本比较老了,安装的是老版本的OpenCV(2.4.2,而最新的稳定版是2.4.8),尝试使用这个脚本-https://github.com/jayrambhia/Install-OpenCV/blob/master/Ubuntu/2.4/opencv2_4_8.sh或者自己安装OpenCV和ffmpeg。
    2. 正如 rookiepig 所说 - 检查 ffmpeg 是否正常工作。
    3. 尝试使用不同的编解码器 - 这里http://www.fourcc.org/ 是选项的完整列表,当然测试所有这些是没有用的 - 只是尝试最流行的编解码器。
    4. 我知道这很愚蠢,但在 Windows 上,某些编解码器只能在发布模式下工作(好吧,可能它们在两种模式下都工作,但在我的机器上它们过去只能在发布模式下工作)。尝试在这两种模式下编译你的程序并检查是否有一些差异。

    给我们看看你的代码,也许它有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 2014-08-19
      • 1970-01-01
      • 2018-07-26
      • 2016-05-16
      • 2018-04-23
      • 2013-01-22
      • 2012-07-13
      相关资源
      最近更新 更多