【问题标题】:openCV - ffmpeg H264 and Webm erroropenCV - ffmpeg H264 和 Webm 错误
【发布时间】:2018-11-27 06:54:04
【问题描述】:

我已经安装了 ubuntu 16.04 LTS 和 OpenCV 3.4.0(Intel i5 和 AMD 显卡),我需要创建一个浏览器支持的视频,可以在浏览器中播放。

如果我使用 H264,我会得到

OpenCV: FFMPEG: tag 0x34363248/'H264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)' OpenCV: FFMPEG: fallback to use tag 0x31637661/'avc1' [h264_nvenc @ 0x7f4e0407f5e0] Cannot load libcuda.so.1 Could not open codec 'h264_nvenc': Unspecified error

如果我使用的是 webm VP8

OpenCV: FFMPEG: tag 0x30385056/'VP80' is not supported with codec id 139 and format 'webm / WebM'

如果我使用的是 webm VP9

OpenCV: FFMPEG: tag 0x30395056/'VP90' is not supported with codec id 167 and format 'webm / WebM'

我正在使用此代码进行转换。

    fourcc = cv2.VideoWriter_fourcc(*'VP80')
    frame = cv2.imread(movements[0].file_path)
    height, width, _ = frame.shape
    event_video_name = video.file_name.split('.')[0] + '_eventvideo.webm'
    event_video = cv2.VideoWriter(path + event_video_name, fourcc, 5, (width, height))

    for _, image in enumerate(movements):
        image = Image.objects.get(id=image.id)
        frame = cv2.imread(image.file_path)
        event_video.write(frame)
    event_video.release()

【问题讨论】:

  • 确保您的 ffmpeg 支持您尝试使用的编解码器。如果您使用的是 linux,请在终端中输入:ffmpeg -codecs | grep -P "(h264|VP8|VP9)"。如果您在输出中看到以 DEV 开头的编解码器,那么您的 ffmpeg 支持它们。
  • DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_crystalhd h264_vdpau ) (encoders: libx264 libx264rgb ) DEV.L. vp8 On2 VP8 (decoders: vp8 libvpx ) (encoders: libvpx ) DEV.L. vp9 Google VP9 (decoders: vp9 libvpx-vp9 ) (encoders: libvpx-vp9 )
  • @zindarod OpenCV: FFMPEG: tag 0x30385056/'VP80' is not supported with codec id 139 and format 'webm / WebM' 遇到同样的问题
  • 阅读 this link 了解容器和编解码器的兼容性(即 AVI 和 H.264)。

标签: opencv ffmpeg html5-video h.264 webm


【解决方案1】:

这周我遇到了同样的问题。在探索并浪费了很多时间之后,他们都没有为我工作。 https://developer.mozilla.org/en-US/docs/Web/Media/Formats 请仔细阅读这篇文章,它肯定会对你们有所帮助,因为它对我有很大帮助,它将提供有关编解码器及其合适的容器类型以及浏览器兼容性的详细知识。

我建议请阅读这篇文章。

在尝试了许多合适的编解码器组合后,容器类型为“webm”的编解码器“VP90”适合我。我正在使用带有“opencv-python 4.2.0.34”的 Ubuntu 18.04 LTS 和 Python3

fourcc =  cv2.VideoWriter_fourcc(*'VP90')
            self.writer = cv2.VideoWriter('videoName.webm', fourcc, 20, (self.im_width,self.im_height)) 

我如何仍然发现此错误消息,但如果它发生请忽略它。因为上面的代码 sn-p 将处理您的视频并将其成功保存为与浏览器兼容的格式。

错误信息:

OpenCV: FFMPEG: tag 0x30395056/'VP90' is not supported with codec id 167 and format 'webm / WebM'

请忽略此错误消息,等待视频处理。 试试这个,它有效。 谢谢。

【讨论】:

  • 感谢您的回答,我通过使用多线程解决了这个问题。由于 write 方法需要更多时间,在此期间 opencv 可能会错过参考帧,因此我使用单独的线程进行读写。然后用于在写入之前排队存储图像。
【解决方案2】:

感谢您的回答,我通过使用多线程解决了这个问题。由于 write 方法需要更多时间,在此期间 opencv 可能会错过参考帧,因此我使用单独的线程进行读写。然后用于在写入磁盘之前排队存储图像。

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 2015-06-07
    • 2013-11-24
    • 2015-08-11
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多