树莓派Python:如何同时录制视频并保存单帧画面?
实现录制视频同时保存单帧画面
完全可以通过给libcamera-vid添加命令行参数实现这个需求,不需要额外启动其他摄像头进程,避免资源冲突。下面是具体的实现方案:
方法:通过信号触发单帧捕获
libcamera-vid支持通过指定系统信号触发录制过程中的单帧保存,核心是添加两个关键参数:
--signal <信号>:指定触发保存单帧的信号(推荐用SIGUSR1,这是一个专门用于自定义触发的用户信号)--still-output <路径模板>:指定单帧图片的保存路径,支持用%04d这类格式自动给图片编号
修改后的Python代码
import subprocess import signal import os import time def capture_video_with_still(duration): # 启动视频录制进程,添加单帧捕获相关参数 cmd2 = subprocess.Popen([ 'libcamera-vid', '-t', str(duration), '--width', '1920', '--height', '1080', '--nopreview', '-o', '/home/pi/robotic_eyes_platform/output/test.h264', '--signal', 'SIGUSR1', # 绑定触发单帧保存的信号 '--still-output', '/home/pi/robotic_eyes_platform/output/frame_%04d.jpg' # 单帧文件路径模板 ]) # 示例:录制开始2秒后手动触发一次单帧保存 time.sleep(2) os.kill(cmd2.pid, signal.SIGUSR1) # 等待视频录制进程完成 cmd2.wait() # 调用示例:录制10秒视频(参数单位为毫秒) capture_video_with_still(10000)
关键说明
- 每次给录制进程发送
SIGUSR1信号,就会自动保存当前画面为JPEG图片,文件名会按frame_0001.jpg、frame_0002.jpg的格式递增 - 你可以根据业务需求,在录制过程中多次发送信号来捕获多帧,或者结合循环定时自动触发
- 该方案复用同一个摄像头进程,不会出现资源占用冲突的问题
内容的提问来源于stack exchange,提问作者billy bob
相关产品推荐
相关产品推荐

