【问题标题】:Python OpenCV video format play in browserPython OpenCV 视频格式在浏览器中播放
【发布时间】:2018-03-28 09:28:59
【问题描述】:

我正在尝试从一系列图像创建视频并将其显示在浏览器中,但由于某种奇怪的原因,无论我使用什么编解码器或文件格式,我都会收到以下错误:

找不到支持格式和 MIME 类型的视频

这是我的代码:

ready_images = []
import cv2

for img in videos['Images']:
    image = cv2.imread(img.fileName)
    ready_images.append(image)

fourcc = cv2.VideoWriter_fourcc(*'MP4V')

video_name = videos['Images'][0].gifLocationPath + "//" + videos['Name']
frame = cv2.imread(videos['Images'][0].fileName)
height, width, layers = frame.shape

video_name = video_name[:-4]+".mp4"
video = cv2.VideoWriter(video_name, fourcc, 20.0, (width, height))

for image in ready_images:
    video.write(image)

cv2.destroyAllWindows()
video.release()

有趣的是,在 Firefox 或 Chrome 中,视频无法播放,但在 Edge 中……它们确实可以播放。

我不想使用 FFMPEG,更愿意让它与 OpenCV 一起使用。

如果你们中的任何人知道我应该使用什么格式的视频(我知道网络格式是 webm、ogg、mp4)或编解码器,请告诉我。

谢谢。

【问题讨论】:

    标签: python python-2.7 opencv opencv3.0


    【解决方案1】:

    大多数浏览器不支持 MP4V 或 MPEG-4 第 2 部分,您可能想尝试 H.264(MPEG-4 第 10 部分)。

    为此,请更改:

    fourcc = cv2.VideoWriter_fourcc(*'MP4V')
    

    fourcc = cv2.VideoWriter_fourcc(*'H264')
    

    如果您使用的是 Python 3,请改用以下十六进制代码(使用四字节表示法时似乎存在错误):

    fourcc = 0x00000021
    

    运行脚本,您可能会收到以下错误消息:

    加载 OpenH264 库失败:openh264-1.6.0-win32msvc.dll 请检查环境和/或下载库:https://github.com/cisco/openh264/releases

    您需要按照消息中的说明从 github 下载所需的库并将其放置在您的 PATH 可访问的位置。

    使用 H.264 压缩,您还将获得更适合 Web 的较小文件。

    【讨论】:

    • 您的解决方案正在向我发送此消息: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' Could not find encoder for codec id 27: Encoder not found 我尝试安装所有依赖项,但它仍然像这样工作。你也有这个问题吗?或者这只是在 linux 中?
    • 如果我设置fourcc = -1,我会得到所有的mp4编解码器,但它们都不是h264,也不是x264。即使在安装库之后。由于软件包配置错误,这是一些问题吗? .是否还有其他非 H264 的 Web 浏览器支持的编解码器?
    • 您是否安装了 x264 软件包?使用的是什么发行版?
    • 我发现如果我将 opecv 安装为 pip install opencv-python 则不支持 x264 编码,因为它在 GPL 许可下。升级 FFmpeg 无济于事,因为 opencv-python 自带 FFmpeg。
    • 只要找到 opencv 安装 ffmpeg 的位置并替换或删除它,并确保 ffmpeg 在您的路径中可以访问。
    【解决方案2】:

    我知道这个问题很老,但对于正在寻找兼容的编解码器 + 网络浏览器容器的每个人来说: VP8 或 VP80 是兼容的编码器

    cv2.VideoWriter_fourcc('V','P','8','0')
    

    我将它与 .webM 一起用作容器。

    Mozilla Firefox、[7][8] Opera、[9][10] 和 Google Chrome[11] 在 2010 年 Google I/O 大会上宣布了对本机 WebM 的支持

    https://en.wikipedia.org/wiki/WebM

    它就像一个魅力和相当不错的表现,即使 由于某种原因,我在创建 videoWriter 对象时遇到了这个错误:

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

    【讨论】:

    • 得到这个错误很奇怪,但它仍然可以工作。谢谢你的回答:)
    • 不幸的是 vp80 在创建视频时非常慢。默认 xvid 编解码器在不到 1 秒的时间内构建 2k 帧需要 2 分钟
    • 是的,确实需要考虑的重要一点!它需要更多的处理能力,但也有它的优点,例如文件大小通常更小,而且它是免费的(开源)。我想说选择不是微不足道的,两者都可以根据情况而定。
    【解决方案3】:

    获取.webm后缀的音频文件。

    fourcc = cv2.VideoWriter_fourcc(*'vp80')
    video_writer = cv2.VideoWriter('file.webm', fourcc, 20, (640, 480))
    

    在html中:

    <body>
    <video width="320" height="240" controls>
        <source src="file.webm" type="video/webm">
    </video>
    </body>
    

    它适用于centos7和Windows10。

    【讨论】:

      【解决方案4】:

      我通过fourcc=-1 打印所有可用的 mp4 编解码器。

      然后我检查对我有用的编解码器。我在那里看到avc1。 所以我写了这样的代码:

      fourcc = cv2.VideoWriter_fourcc(*'avc1')
      

      打印代码时,您也看到它们是小写的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-05
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多