逐帧复制视频时无视频输出

时间:2017-09-01 15:35:18

标签: python-2.7 opencv

我想在视频文件上添加一些传感器信息(时间序列)。我认为Python和OpenCV将是一个不错的方式,并开始学习基础知识,所以我决定制作我能想到的最简单的玩具示例:加载视频并逐帧复制。

这是我的代码:

import cv2

src = cv2.VideoCapture('input.mp4')
if not src.isOpened():
    print("Error opening src")
    quit()

width = int(src.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH))
height = int(src.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))
fps = src.get(cv2.cv.CV_CAP_PROP_FPS)

fourcc = cv2.cv.CV_FOURCC(*'XVID')
dest = cv2.VideoWriter('output.avi', fourcc, fps, (height, width))
if not dest.isOpened():
    print("Error opening dest")
    quit()

ret, frame = src.read()
while ret:
    dest.write(frame)
    ret, frame = src.read()

dest.release()
src.release()
  • 预期input.mp4
  • output.avi作为XviD文件的精确副本
  • 观察output.avi是一个5.6 KB的文件,显然只包含一个AVI标头。它不能由mplayer复制,也不能用cv2.VideoCapture阅读。

这些是我的设置:

  • Debian GNU / Linux 9
  • Python 2.7.13
  • cv.__version__返回' 2.4.9.1'
  • FFmpeg 3.2.5-1

为了重现性,这里有一个命令行,用youtube-dl下载一个非常短的YouTube视频:

youtube-dl 'https://www.youtube.com/watch?v=RfkcI8dhfsQ' -o input.mp4

1 个答案:

答案 0 :(得分:1)

在这一行中,它应该是(width,height)而不是(height, width)

dest = cv2.VideoWriter('output.avi', fourcc, fps, (height, width))

VideoWriter必须与您正在编写的帧具有相同的大小,否则它无法正常工作。