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

如何用FFMPEG每隔n秒从OctoPi本地摄像头流定时保存快照

定时保存摄像头快照方案对比与实现

FFMPEG 方案(无额外自定义需求优先选用)

这是更轻量、稳定的方案,不需要编写代码,一行命令即可实现需求。

  • 先确认FFMPEG已安装,OctoPi默认没有预装的话执行以下命令安装:
    sudo apt update && sudo apt install ffmpeg -y
  • 示例命令(每5秒保存一张,持续运行3小时):
    ffmpeg -i http://[你的树莓派IP]/webcam/?action=stream -r 1/5 -t 10800 -q:v 2 -strftime 1 snapshot_%Y%m%d_%H%M%S.jpg
  • 参数说明:
    • -r 1/5:设置每秒采集1/5帧,即每5秒保存一张,修改数字即可调整间隔时长
    • -t 10800:设置总运行时长为10800秒(即3小时),按需修改即可
    • -q:v 2:控制JPG输出质量,数值范围2-31,数值越低质量越高
    • -strftime 1:开启时间戳命名,输出文件会自动带上生成时间,方便后续排序查找
  • 优势:资源占用低,无需额外代码开发,稳定可靠,适合长期无人值守运行

Python 方案(适合需要自定义逻辑的场景)

如果后续需要添加异常重试、画面检测、联动通知等额外功能,可以选择Python调用snapshot接口实现。

  • 先安装依赖库:
    pip install requests
  • 示例代码:
import requests
import time
from datetime import datetime
import os

# 配置参数
SNAPSHOT_URL = "http://[你的树莓派IP]/webcam/?action=snapshot"
INTERVAL = 5  # 快照间隔,单位秒
DURATION = 3 * 60 * 60  # 总运行时长,单位秒,此处为3小时
SAVE_DIR = "./snapshots/"

# 提前创建保存目录
os.makedirs(SAVE_DIR, exist_ok=True)

start_ts = time.time()
while time.time() - start_ts < DURATION:
    try:
        res = requests.get(SNAPSHOT_URL, timeout=10)
        res.raise_for_status()
        filename = f"{SAVE_DIR}snapshot_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg"
        with open(filename, "wb") as f:
            f.write(res.content)
        time.sleep(INTERVAL)
    except Exception as e:
        print(f"快照采集失败:{str(e)}")
        time.sleep(1)
  • 优势:灵活度高,可以根据需求扩展各种自定义逻辑,适配特殊场景

选择建议

如果仅需要定时采集快照,没有其他额外需求,直接使用FFMPEG方案即可,操作成本更低,运行更稳定。如果有自定义开发需求,再选用Python方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:03