You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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)

关键说明

  1. 每次给录制进程发送SIGUSR1信号,就会自动保存当前画面为JPEG图片,文件名会按frame_0001.jpg、frame_0002.jpg的格式递增
  2. 你可以根据业务需求,在录制过程中多次发送信号来捕获多帧,或者结合循环定时自动触发
  3. 该方案复用同一个摄像头进程,不会出现资源占用冲突的问题

内容的提问来源于stack exchange,提问作者billy bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:35:13