如何用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
相关产品推荐
相关产品推荐

