【发布时间】:2022-09-28 04:26:15
【问题描述】:
使用 Raspberry Pi,我想创建一个 python 脚本,它连续记录到缓冲区,然后,当接收到信号时(比如用户在终端中输入一些东西),缓冲区被保存,并且之前的帧是可供查看。
使用Picamera library,这可以使用picamera.PiCameraCircularIO() 和stream.copy_to(file.h264) 来实现。
但是,Picamera 不适用于 Bullseye 操作系统。有一个新的 Python 库,名为Picamera2,我相信它正在由 RPi 团队开发。
从documentation(第 7.2.3 节)来看,应该是可以的。然而,包含的示例记录了一个 0 帧的剪辑,因为output.stop() 在output.start() 之后立即运行。为了纠正这个问题,我在这些代码行之间添加了time.sleep(5)。
我发现如果picam2.start_recording(encoder, output) 和output.start() 之间的时间超过缓冲区大小(默认为 150 帧),则输出文件存在一些问题 - VLC 不播放文件,MP4Box 不接受文件,但文件仍然具有 MiB 数量级的大小。我对视频文件了解不多,但我怀疑当旧帧被新帧重写时,输出文件会丢失一些关键信息。
这是我的代码:
from picamera2.encoders import H264Encoder
from picamera2.outputs import CircularOutput
from picamera2 import Picamera2
import time
import sys
picam2 = Picamera2()
picam2.configure(picam2.create_video_configuration())
encoder = H264Encoder()
output = CircularOutput(buffersize = 150)
picam2.start_recording(encoder, output)
t = input()
# Now when it\'s time to start recording the output, including the previous 5 seconds:
output.fileoutput = \"file.h264\"
output.start()
time.sleep(5)
# And later it can be stopped with:
output.stop()
注:这个问题可能更适合 GitHub 上的开发人员。但是我不确定这是一个问题还是一个讨论,所以我在这里问了。
标签: python h.264 raspberry-pi4 picamera