opencv视频创建空白帧并使用python编写它们

时间:2015-11-27 19:09:37

标签: python opencv numpy video

我正在尝试初始化一些空白的视频帧,并使用ubuntu linux中的opencv和python将其写入文件。我计划稍后在空白画布上添加较小的视频片段。典型示例仅显示从某些输入源读取帧,但我正在尝试生成自己的帧。到目前为止,这是我的代码:

import numpy as np
import cv2
xsp=640
ysp=480
chan=3
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (xsp,ysp))
numframes = 20
videoout = []
for i in range(1,numframes):   # init frames
    frame = np.zeros((xsp,ysp,chan),np.uint8)
    videoout.append(frame)
for frame in videoout:
    out.write(frame)
out.release()

使用上面的代码,视频无法播放。在视频播放器中打开它会出现无法解复用内容的错误。

但是,如果我通过打开视频文件初始化视频帧并拍摄现有的视频帧+在其上放置一个黑色矩形,我就可以获得有效的视频。

def initVideoFrame(videofile):
    cap = cv2.VideoCapture(videofile)
    ret, frame = cap.read()
    ysp,xsp,chan = frame.shape
    cv2.rectangle( frame, ( 0,0 ), ( xsp, ysp), ( 0,0,0 ), -1, 8 )
    cap.release()
    return frame

frame = initVideoFrame('s.mp4') 
ysp,xsp,chan = frame.shape
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (xsp,ysp))
numframes = 100
videoout = []
for i in range(1,numframes):   # init frames
    frame = initVideoFrame('s.mp4')
    videoout.append(frame)
for frame in videoout:
    out.write(frame)
out.release()

似乎由uint8零点组成的帧不足以编写有效视频。我仍然缺少一些东西。

0 个答案:

没有答案