Raspberry Pi相机捕获循环缓冲区和以下(x)秒数

2024-04-25 21:47:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近得到了树莓派相机模块。通过循环缓冲区示例发现here (code shown below.)

我的目标是保存“stream=皮卡默拉(摄像机,秒=20)”还要继续记录30秒。以下是我在他们的例子中添加的主要内容时间。睡觉(30)”遵循引脚17上的GPIO输入。当我运行这个程序时,它有时会生成一个文件,但这个文件永远不可播放。如果您能提供任何建议或建议,我将不胜感激。在

代码:

import io
import time
import picamera
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, GPIO.PUD_UP)

with picamera.PiCamera() as camera:
    stream = picamera.PiCameraCircularIO(camera, seconds=20)
    camera.start_recording(stream, format='h264')
    GPIO.wait_for_edge(17, GPIO.FALLING)
    time.sleep(30)
    camera.stop_recording()
    for frame in stream.frames:
        if frame.header:
            stream.seek(frame.position)
            break
    with io.open('/home/pi/Desktop/video.h264', 'wb') as output:
        while True:
            data = stream.read1()
            if not data:
                break
            output.write(data)

Tags: 文件ioimportdatastreamgpiotimeas
2条回答

您正在正确启动一个循环缓冲区,它将保存20秒的视频。 最后20秒的视频。然而,等待30秒是徒劳的,因为它只能容纳20秒的视频。在

如果你读过picamera的文档(picamera.readthedocs.org)在高级配方中,它们向您展示了如何使用split_记录来保存循环缓冲区的内容,然后您可以在第二个IO(文件或流)记录当前发生的情况时写入这些内容。在

现在你摄像机。等等录音(30)然后将_记录拆分回另一个IO(在高级配方中,它是原始的、截断的、循环的)。在

最后你会有两个文件。一个包含缓冲区,即前20秒,后30秒。然后你把这两个放在一起,瞧,你现在有一个50秒的视频。Mp4Box做得很好。在

现在我一直在努力使用io.打开为了动态地连接这两个流,但是我怀疑当你io.打开('blah.h264,'ab')这意味着您只得到最后一个附加的视频。我不认为有人读到这是一个h264编码的boffin?在

我认为更好的方法是替换:

time.sleep(30)

通过

^{pr2}$

相关问题 更多 >