【问题标题】:How to use the Circular Output of the (still in alpha) Picamera 2 Python Library?如何使用(仍处于 alpha 阶段)Picamera 2 Python 库的循环输出?
【发布时间】: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


    【解决方案1】:

    在不使用输入的情况下试试这个。

    import sys
    import time
    
    from picamera2 import Picamera2
    from picamera2.encoders import H264Encoder
    from picamera2.outputs import CircularOutput
    
    picam2 = Picamera2()
    fps = 30
    dur = 5
    micro = int((1 / fps) * 1000000)
    vconfig = picam2.create_video_configuration()
    vconfig['controls']['FrameDurationLimits'] = (micro, micro)
    picam2.configure(vconfig)
    encoder = H264Encoder()
    output = CircularOutput(buffersize=int(fps * (dur + 0.2)), outputtofile=False)
    output.fileoutput = "file.h264"
    picam2.start_recording(encoder, output)
    time.sleep(dur)
    output.stop()
    

    【讨论】:

      猜你喜欢
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2019-03-03
      相关资源
      最近更新 更多