🚀 飞牛 NAS 部署小米监控视频自动合并工具(终极完美版)

2026-05-12 11:34:27 1点赞 2收藏 0评论

教程简介: 本教程通过 Docker Compose 方式,在飞牛 NAS (fnOS) 上部署 xiaomi-camera-combine功能特点:

  1. 自动将小米摄像头1分钟/个的碎视频,合并为1小时/个的大视频。

  2. 防卡死机制:自动清理因摄像头断网/断电产生的 <100KB 损坏文件。

  3. 音频兼容修复:自动将老式 pcm_alaw 音频转码为标准格式,防止合并失败。

  4. 空间回收:合并成功后,自动删除原碎片视频。

  5. 强迫症福音:自动清理原视频被删光后留下的空文件夹

🚀 飞牛 NAS 部署小米监控视频自动合并工具(终极完美版)🚀 飞牛 NAS 部署小米监控视频自动合并工具(终极完美版)🚀 飞牛 NAS 部署小米监控视频自动合并工具(终极完美版)

第一步:准备文件与文件夹

  1. 下载源码:前往原作者 GitHub (xiaomi-camera-combine),点击绿色的 Code -> Download ZIP,下载并解压到电脑上。

  2. 在飞牛 NAS 中创建 3 个关键文件夹

    • 📁 代码文件夹:命名为 xiaomi-combine(建议建在存放 Docker 数据的盘里),将刚才解压出来的所有文件上传到这里。

    • 📁 输出文件夹:命名为 CombineVideo,用来存放以后合并好的大视频。

    • 📁 监控源文件夹:找到你小米监控原本录像保存的位置(路径最后一层必须是设备的 MAC 地址,比如 .../b88880053c90,点进去能看到以时间命名的文件夹)。

  3. 获取绝对路径:在飞牛文件管理器中,分别右键这三个文件夹 -> 【属性】,把它们的“位置/路径”复制并记录到备忘录里备用。


第二步:提前给代码打补丁(解决音频报错)

由于小米部分摄像头的音频格式太老,直接合并会报错,我们需要提前改两行代码。

  1. 在飞牛的文件管理中,进入你的代码文件夹

  2. 找到并双击打开 mi-camera-combine.py 文件。

  3. 往下翻(大概在第 183 行附近),找到以下这段原代码:

    Python

    def get_ffmpeg_merge_command(temp_file_list, output_file): # ...省略部分注释... base_command = [ FFMPEG_PATH, "-f", "concat", "-safe", "0", "-i", str(temp_file_list) ] if COMPRESS_VIDEO == 0: # Direct copy without compression # 不压缩,直接复制 base_command += ["-c:v", "copy", "-c:a", "copy"]

  4. 将其修改为(加了 -y 和把 copy 改成了 aac):

    Python

    def get_ffmpeg_merge_command(temp_file_list, output_file): # ...省略部分注释... base_command = [ FFMPEG_PATH, "-y", "-f", "concat", "-safe", "0", "-i", str(temp_file_list) ] if COMPRESS_VIDEO == 0: # Direct copy without compression # 不压缩,直接复制 base_command += ["-c:v", "copy", "-c:a", "aac"]

  5. 点击右上角【保存】并关闭编辑器。


第三步:Docker 一键部署(核心)

  1. 打开飞牛桌面上的 【Docker】,在左侧菜单栏点击 【项目】,然后点击右上角的 【新增】

  2. 项目名称 填:xiaomi-camera-combine

  3. 路径 选:你在第一步建好的代码文件夹

  4. 来源 选:【创建 docker-compose.yml】

  5. 将下方最终版代码完整粘贴进去(⚠️ 注意:必须把 volumes 下面的三行中文提示,替换成你在第一步获取的真实路径!):

YAML

version: '3.8' services: xiaomi-combine: image: python:3.11-alpine container_name: xiaomi-camera-combine user: root working_dir: /app volumes: # 👇 警告:只替换冒号【左边】的路径!冒号和右边的 /app 等千万别改别删! - /此处替换为你的【代码文件夹】绝对路径:/app - /此处替换为你的【监控源文件夹】绝对路径:/data/monitor - /此处替换为你的【输出文件夹】绝对路径:/data/output environment: - MONITOR_PATH=/data/monitor - OUTPUT_PATH=/data/output - COMBINE_DURATION=60 # 每次合并60个视频(即1小时) - DELETE_SOURCE=Y # Y=合并后删除原视频,释放空间 - LOOP=Y # Y=循环运行 - COMPRESS_VIDEO=0 # 0=不压缩(合并极快且画质无损) - FFMPEG_PATH=/usr/bin/ffmpeg - TZ=Asia/Shanghai command: > /bin/sh -c " apk add --no-cache ffmpeg tzdata && pip install --no-cache-dir python-dotenv && while true; do echo '>>> 🧹 正在执行坏文件防御扫描 (清理小于 100KB 的残缺文件)... <<<'; find /data/monitor -type f -name '*.mp4' -size -100k -exec rm -f {} ; echo '>>> 🚀 开始扫描并执行视频合并任务 <<<'; python mi-camera-combine.py; chmod -R 777 /data/output 2>/dev/null; echo '>>> 🗑️ 正在打扫战场 (自动删除监控目录下的空文件夹)... <<<'; find /data/monitor -mindepth 1 -type d -empty -delete 2>/dev/null; echo '>>> 💤 本次任务全部圆满结束,容器将休眠 1 小时后再次自动扫描 <<<'; sleep 3600; done" restart: unless-stopped

  1. 检查路径无误后,点击右下角的 【确认】【部署】


第四步:运行与查看

  1. 部署成功后,在 Docker 的 【容器】 列表中,你会看到 xiaomi-camera-combine 亮起绿灯。

  2. 点击容器名称,进入 【日志】 页面。

  3. 前 1 分钟程序会自动安装 ffmpeg 等运行环境。随后,你就能看到程序开始一行行扫描视频、合成了。

  4. 日常逻辑:它会一口气把你积压的所有视频合并完。当它发现没活干了,就会进入 1 小时的休眠。1 小时后自动醒来,处理刚录制的新视频,如此往复,完全不需要人工干预。

🎉 大功告成! 你现在可以去泡杯茶,然后打开 CombineVideo 文件夹,欣赏干净清爽的整小时监控大片了!

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

讲道理不讲话

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
2
扫一下,分享更方便,购买更轻松