【问题标题】:How to export video as .mp4 using openCV?如何使用 openCV 将视频导出为 .mp4?
【发布时间】:2015-06-24 12:46:49
【问题描述】:

我正在尝试使用 openCV 将视频导出为 .mp4。我已经尝试了几个编解码器,但现在都没有成功。

这是一个从帧构造视频的函数:

def create_movie(self, out_directory, fps, total_frames):
    img1 = cv2.imread("temp/scr0.png")
    height, width, layers =  img1.shape
    codec = cv2.cv.CV_FOURCC('X','V','I','D')
    video = cv2.VideoWriter(out_directory, codec, fps, (width, height))

    for i in range(total_frames):
        img_name = "temp/scr" + str(i) + ".png"
        img = cv2.imread(img_name)
        video.write(img)

    video.release()
    cv2.destroyAllWindows()

我通常会收到下一条错误消息,使用不同的编解码器:

Tag XVID/0x44495658 incompatible with output codec id '13'

是否有可能做到这一点以及如何做到这一点?

【问题讨论】:

  • 你在哪个平台上?您是否安装了 ffmpeg 并使用它编译了 OpenCV?查看list of FOURCC codecs 并尝试不同的,可能是 X264 或其他一些支持良好(或未压缩)的编解码器。
  • Linux。不,我们没有安装 ffmpeh。我尝试了列表中的几个编解码器,但似乎都没有工作。
  • 我记得这对 OSX 来说是一个彻头彻尾的痛苦。您可以尝试使用 ffmpeg 自己重新编译 opencv 以确保支持。我查看了我的代码,并成功使用了 MJPGfourcc。否则,您始终可以保存单个帧并在命令行上使用 ffmpeg 将它们组合成视频。

标签: python opencv video ffmpeg


【解决方案1】:

有一个非直接的解决方案。您导出为 .avi,然后使用调用终端命令的 python 调用转换为 .mp4。

from subprocess import call

dir = out_directory.strip(".avi")
command = "avconv -i %s.avi -c:v libx264 -c:a copy %s.mp4" % (dir, dir)
call(command.split())

【讨论】:

  • 对于 ubuntu,安装 libav-tools 以获取 avconv
【解决方案2】:

回答这个问题可能有点晚了,但是如果你想用 OpenCV 写一个 .MP4 文件试试这个:

import cv2
#your previous code here

fourcc = cv2.VideoWriter_fourcc(*'a\0\0\0')
out = cv2.VideoWriter('out.mp4', fourcc, fps, res)

#the character '\0' is the Null-Terminator or simply 0x00 in the ASCII-Table
#tag: *'a\0\0\0' corresponds to 0x00000061

#your following code here

【讨论】:

    猜你喜欢
    • 2019-07-11
    • 2015-08-11
    • 1970-01-01
    • 2020-09-24
    • 2014-04-20
    • 2015-04-30
    • 2015-06-14
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多