如何解决如何在录制过程中创建常规视频块?
我想在捕获相机时创建常规的多个视频块。带有 .mp4
容器的视频块应该是 3 秒。捕获很好,但没有创建块。
import numpy as np
import cv2
import time
import os
cap = cv2.VideoCapture(0)
try:
if not os.path.exists('chunks'):
os.makedirs('chunks')
except OSError:
print ('Error: Creating directory of data')
next_time = time.time() + 3
while True:
# Capture frame-by-frame
ret,frame = cap.read()
if time.time() > next_time:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
chunks = cv2.VideoWriter('/chunks/' + str(time.strftime('%d %m %Y - %H %M %S' )) + '.mp4',fourcc,15,(640,480))
next_time += 3
cap.release()
cv2.destroyAllWindows()
解决方法
代码中的一些错误:
-
您没有在循环中的任何地方调用
cv2.VideoWriter.write
对象的chunks
方法。在您的代码中,它看起来像这样:chunks.write(frame)
. -
对于您要生成的每个视频,您都需要调用
cv2.VideoWriter.release
方法,例如chunks.release()
。 -
生成的视频的持续时间不取决于生成视频所需的时间;它依赖于写入视频的帧数和视频的帧率。在您的代码中,您选择了帧速率
15
,因此每个视频需要 15 * 3 = 45 帧才能达到 3 秒长。
更正后您的代码可能如下所示:
import os
import time
import cv2
try:
if not os.path.exists('chunks'):
os.makedirs('chunks')
except OSError:
print('Error: Creating directory of data')
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*"XVID")
chunks = cv2.VideoWriter(f"chunks/{time.strftime('%d %m %Y - %H %M %S')}.mp4",fourcc,15,(640,480))
i = 0
while True:
i += 1
if i > 45:
chunks.release()
chunks = cv2.VideoWriter(f"chunks/{time.strftime('%d %m %Y - %H %M %S')}.mp4",480))
i = 0
ret,frame = cap.read()
chunks.write(frame)
cap.release()
cv2.destroyAllWindows()
哪个完美。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。