【问题标题】:Can't write and save a video file using OpenCV and Python无法使用 OpenCV 和 Python 编写和保存视频文件
【发布时间】:2016-11-18 18:33:44
【问题描述】:

我正在尝试将视频流中的帧处理为新视频。

这就是我正在做的:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))

我不断得到:

OpenCV: FFMPEG: tag 0x44495658/'XVID' is not supported with codec id 13 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x00000020/' ???'

我认为我使用了错误的fourcc 值...我应该使用哪一个?我已经尝试了很多。

我使用的是 Ubuntu 16.04、Python 2.7.11 和 OpenCV 3.1.0

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    像这样定义编解码器并创建 VideoWriter 对象

    fourcc = cv2.VideoWriter_fourcc(*'MPEG')
    out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
    

    【讨论】:

    • 最好发布一个不仅仅是代码的答案。
    • 适用于 Ubuntu 16.04 的工作 c 版本` outputVideo = cvCreateVideoWriter("/tmp/out.avi",CV_FOURCC('M', 'P', 'E', 'G'),25,imgSize ,1);`
    • @JeffBridgman 我刚刚在下面发布了一个答案来解释这个问题。干杯
    • 我遇到了错误。 - OpenCV:FFMPEG:标签 0x4745504d/'MPEG' 不支持编解码器 id 2 和格式'mpegts / MPEG-TS(MPEG-2 传输流)'。我做错了什么---fourcc = cv2.VideoWriter_fourcc(*"MPEG") writer = cv2.VideoWriter(outpath,fourcc, 30, (W, H), True)
    【解决方案2】:

    对于 Windows 用户

    我在 Windows 10 上使用 OpenCV 2 和 Python 3.6。

    'XVID' 编解码器以及生成.avi 文件似乎是最通用的解决方案(如果不是唯一可行的解​​决方案)。

    fourcc = cv.VideoWriter_fourcc(*'XVID')
    out = cv.VideoWriter('test.avi', fourcc, 60, (320, 240))
    

    另外,只有BGR可以直接写成这样的VideoWriter声明。不要尝试写灰框:输出将是空的。

    【讨论】:

    • 如果您从 cv2.imread 读取图像,则需要还原图像的大小:image = cv2.imread(path_to_image) frameSize = (image.shape[1],image.shape[0])
    • 关于BGR写法,VideoWriter构造函数中有isColor参数,设置为False可以写成灰色
    • @Right 这在 Ubuntu 18、OpenCV 3.4.3 上对我不起作用
    【解决方案3】:

    您遇到的问题是您尝试以XVID 格式导出帧,但输出文件的名称以.mp4 结尾。您应该将导出格式更改为MP4V 或将输出文件的名称更改为.avi

    fourcc = cv2.VideoWriter_fourcc(*'MP4V')
    out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))
    

    另类

    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('Videos/output.avi',fourcc, fps, (1080,1080))
    

    在这里您可以找到有关video codecs的更多信息

    【讨论】:

    • ('XVID') with '.avi' 是有效的,但是如果你想创建 '*.mp4' -> ('m', 'p', '4', 'v') 它在我的 Wind10 笔记本电脑上工作。有趣...
    【解决方案4】:

    您提供的框架的大小(宽度,高度)应该与您要保存的框架的大小相匹配。 所以
    fw = int(cap.get(3)) fh = int(cap.get(4)) print("w,h",fw,fh) out = cv2.VideoWriter('fb1.avi',cv2.VideoWriter_fourcc('X','V','I','D'), fps, (fw,fh))

    【讨论】:

      【解决方案5】:

      如果你想通过opencv保存mp4格式的视频,让

      关注link:

      你应该替换:

      fourcc = cv2.VideoWriter_fourcc(*'XVID')

      作者:

      fourcc = cv2.VideoWriter_fourcc(*'FMP4')

      我试过了,成功了。

      【讨论】:

      • 我使用的是 MacOS,没有一个答案对我有用,但 *'FMP4' 成功了,谢谢!
      【解决方案6】:

      我遇到了同样的问题。对我来说,原来我已经切换了视频的高度和宽度,所以帧尺寸与视频规格不匹配,结果什么也没写。确保它们完全匹配。

      此外,如果文件扩展名与使用的编解码器不匹配,OpenCV 似乎也会发出同样的警告。具体来说,它需要 .avi 作为 XVID 编解码器。

      【讨论】:

        【解决方案7】:

        安装 K-Lite Mega 编解码器包:https://filehippo.com/download_klite_mega_codec/
        发生此错误的原因是某些编解码器在 Windows 媒体播放器中默认不可用。因此,通过安装此软件,视频可以使用相同的代码正常工作。

        【讨论】:

          【解决方案8】:

          如果你使用的是 linux 试试这个

          fourcc = 0x00000021
          out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))

          【讨论】:

            【解决方案9】:

            我想保存为 .mp4,结果证明使用 *"mp4v" 是正确的代码,至少在 Linux 上是这样。

            【讨论】:

              猜你喜欢
              • 2016-08-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-08-11
              • 2011-07-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多