我最近得到了树莓派相机模块。通过循环缓冲区示例发现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)
您正在正确启动一个循环缓冲区,它将保存20秒的视频。 最后20秒的视频。然而,等待30秒是徒劳的,因为它只能容纳20秒的视频。在
如果你读过picamera的文档(picamera.readthedocs.org)在高级配方中,它们向您展示了如何使用split_记录来保存循环缓冲区的内容,然后您可以在第二个IO(文件或流)记录当前发生的情况时写入这些内容。在
现在你摄像机。等等录音(30)然后将_记录拆分回另一个IO(在高级配方中,它是原始的、截断的、循环的)。在
最后你会有两个文件。一个包含缓冲区,即前20秒,后30秒。然后你把这两个放在一起,瞧,你现在有一个50秒的视频。Mp4Box做得很好。在
现在我一直在努力使用io.打开为了动态地连接这两个流,但是我怀疑当你io.打开('blah.h264,'ab')这意味着您只得到最后一个附加的视频。我不认为有人读到这是一个h264编码的boffin?在
我认为更好的方法是替换:
通过
^{pr2}$相关问题 更多 >
编程相关推荐