我想在视频文件上添加一些传感器信息(时间序列)。我认为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
阅读。这些是我的设置:
cv.__version__
返回' 2.4.9.1' 为了重现性,这里有一个命令行,用youtube-dl
下载一个非常短的YouTube视频:
youtube-dl 'https://www.youtube.com/watch?v=RfkcI8dhfsQ' -o input.mp4
答案 0 :(得分:1)
在这一行中,它应该是(width,height)
而不是(height, width)
:
dest = cv2.VideoWriter('output.avi', fourcc, fps, (height, width))
VideoWriter必须与您正在编写的帧具有相同的大小,否则它无法正常工作。