-1

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

为此,我一直在使用连接到 Raspberry Pi 的 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()
4

1 回答 1

0

这个问题与您的流格式和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).

于 2020-09-01T22:17:00.057 回答