使用Python存储10秒的未编码视频缓冲区



我正在尝试使用Python脚本,特别是'.rgb'格式,保存10秒的缓冲视频。

为了做到这一点,我一直在使用连接到树莓派的PiCamera。

根据下面的脚本,如果我选择使用h264格式保存视频,我将能够成功实现所需的目标,但如果将格式从h264更改为.rgb(目标格式(,则不会生成输出。

有什么想法吗?这里可能有什么问题?

感谢

代码快照:

import time
import io
import os 
import picamera
import datetime as dt
from PIL import Image
import cv2 
#obtain current time
def return_currentTime():
return dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
#trigger event declaration
def motion_detected():
while True:
print ("Trigger event(y)?")
trigger = input ()
if trigger =="y":
time = return_currentTime()
print ("Buffering...")
camera.wait_recording(5)     
stream.copy_to(str(time)+'.rgb')            

else: 
camera.stop_recording()

break

#countdown timer 
def countdown (t):
while t:
mins, secs = divmod (t,60)
timer = '{:02d}:{:02d}'.format(mins, secs)
print(timer, end="r")
time.sleep(1)
t-=1
print('Buffer available!')

camera = picamera.PiCamera()
camera.resolution = (640, 480)
stream = picamera.PiCameraCircularIO(camera, seconds = 5)
#code will work using h264 as format
camera.start_recording (stream, format = 'rgb')
countdown(5)
motion_detected()

这个问题与流格式以及stream.copy_to()的工作方式有关。

根据函数copy_to(output, size=None, seconds=None, first_frame=2)的文档,first_frame是对要复制的第一帧的限制。默认情况下,它设置为sps_header,通常是H264流的第一帧。

但是,由于流格式是RGB而不是H264,因此没有sps_header,因此copy_to找不到sps_header,并且不复制任何内容。

要解决此问题,必须允许任何帧成为第一帧,而不仅仅是sps_header的帧。这可以通过在呼叫中设置first_frame=None来完成,就像设置copy_to(file, first_frame=None)一样。

最新更新