如何在录制过程中创建常规视频块?
How to create regular video chunks during recording?
我想在捕获相机时创建常规的多个视频块。视频块应为 3 秒,容器为 .mp4
。捕获正常,但未创建块。
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()
您的代码中存在一些错误:
您在循环中的任何地方都没有在 chunks
对象上调用 cv2.VideoWriter.write
方法。在您的代码中,它看起来像这样: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", fourcc, 15, (640, 480))
i = 0
ret, frame = cap.read()
chunks.write(frame)
cap.release()
cv2.destroyAllWindows()
效果很好。
我想在捕获相机时创建常规的多个视频块。视频块应为 3 秒,容器为 .mp4
。捕获正常,但未创建块。
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()
您的代码中存在一些错误:
您在循环中的任何地方都没有在
chunks
对象上调用cv2.VideoWriter.write
方法。在您的代码中,它看起来像这样: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", fourcc, 15, (640, 480))
i = 0
ret, frame = cap.read()
chunks.write(frame)
cap.release()
cv2.destroyAllWindows()
效果很好。