news 2026/4/15 10:34:32

【FFmpeg 智慧园区场景应用】2.自动化处理 Shell 脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【FFmpeg 智慧园区场景应用】2.自动化处理 Shell 脚本

以下提供 3 个实用 Shell 脚本,适配园区24h 定时分段录制、多摄像头批量预处理、历史录像自动压缩场景,可直接部署在 Linux 服务器(CentOS/Ubuntu)上,支持后台运行、日志记录,降低人工运维成本。

脚本 1:单摄像头 24h 定时分段录制(核心脚本)

功能说明

  1. 拉取 RTSP 摄像头流,按1小时/段自动分割文件
  2. 按「日期_时间_摄像头ID」命名,便于检索(如20260112_100000_cam001.mp4
  3. 记录运行日志,异常中断自动打印错误信息
  4. 强制 TCP 传输,避免园区网络丢包,提高录制稳定性

脚本代码(保存为camera_record.sh

#!/bin/bash# 智慧园区摄像头自动分段录制脚本# 配置参数(根据园区实际情况修改)RTSP_URL="rtsp://admin:123456@192.168.1.100:554/stream1"# 摄像头RTSP地址CAMERA_ID="cam001"# 摄像头编号(用于文件命名)SAVE_DIR="/data/park/record"# 录像保存目录SEGMENT_TIME=3600# 每段录像时长(秒),1小时=3600秒LOG_FILE="/data/park/logs/camera_${CAMERA_ID}_record.log"# 日志文件路径# 步骤1:创建保存目录和日志目录mkdir-p${SAVE_DIR}mkdir-p$(dirname${LOG_FILE})# 步骤2:写入启动日志echo"=====================================">>${LOG_FILE}echo"$(date+'%Y-%m-%d %H:%M:%S')- 摄像头${CAMERA_ID}录制脚本启动">>${LOG_FILE}echo"RTSP地址:${RTSP_URL}">>${LOG_FILE}echo"录像保存目录:${SAVE_DIR}">>${LOG_FILE}echo"每段时长:${SEGMENT_TIME}秒">>${LOG_FILE}# 步骤3:执行FFmpeg分段录制ffmpeg -y\-rtsp_transport tcp\-i${RTSP_URL}\-c copy\-f segment\-segment_time${SEGMENT_TIME}\-segment_format mp4\-segment_filename"${SAVE_DIR}/${CAMERA_ID}_%Y%m%d_%H%M%S.mp4"\-v error\>>${LOG_FILE}2>&1# 步骤4:写入异常日志(若FFmpeg执行失败)if[$?-ne0];thenecho"$(date+'%Y-%m-%d %H:%M:%S')- 摄像头${CAMERA_ID}录制异常,已停止">>${LOG_FILE}exit1elseecho"$(date+'%Y-%m-%d %H:%M:%S')- 摄像头${CAMERA_ID}录制脚本正常退出">>${LOG_FILE}exit0fi

脚本使用说明

  1. 修改配置参数(RTSP_URLCAMERA_IDSAVE_DIR)为园区实际信息
  2. 赋予执行权限:chmod +x camera_record.sh
  3. 后台运行(避免终端关闭中断):nohup ./camera_record.sh &
  4. 查看日志:tail -f /data/park/logs/cam001_record.log

脚本 2:多摄像头录像批量 AI 预处理

功能说明

  1. 遍历指定目录下所有监控录像,批量完成「分辨率统一(720P)+ 帧率调整(15fps)+ 去除音频」
  2. 适配 AI 分析模型输入要求,减少算力消耗
  3. 处理完成后保留原文件,输出文件添加_ai_pre后缀
  4. 支持断点续跑,跳过已处理完成的文件

脚本代码(保存为batch_ai_preprocess.sh

#!/bin/bash# 智慧园区录像批量AI预处理脚本# 配置参数INPUT_DIR="/data/park/record"# 原始录像目录OUTPUT_DIR="/data/park/ai_input"# 预处理后保存目录TARGET_RES="1280x720"# AI模型目标分辨率(720P)TARGET_FPS=15# AI模型目标帧率LOG_FILE="/data/park/logs/batch_ai_preprocess.log"# 步骤1:创建目录和日志mkdir-p${OUTPUT_DIR}mkdir-p$(dirname${LOG_FILE})# 步骤2:写入启动日志echo"=====================================">>${LOG_FILE}echo"$(date+'%Y-%m-%d %H:%M:%S')- 批量AI预处理脚本启动">>${LOG_FILE}echo"原始目录:${INPUT_DIR}">>${LOG_FILE}echo"输出目录:${OUTPUT_DIR}">>${LOG_FILE}echo"目标分辨率:${TARGET_RES},目标帧率:${TARGET_FPS}fps">>${LOG_FILE}# 步骤3:遍历MP4文件进行预处理forfilein${INPUT_DIR}/*.mp4;do# 获取文件名(不含路径和后缀)filename=$(basename${file}.mp4)output_file="${OUTPUT_DIR}/${filename}_ai_pre.mp4"# 跳过已处理的文件if[-f${output_file}];thenecho"$(date+'%Y-%m-%d %H:%M:%S')- 已处理,跳过:${filename}.mp4">>${LOG_FILE}continuefi# 执行FFmpeg预处理(去除音频+调整分辨率+调整帧率)echo"$(date+'%Y-%m-%d %H:%M:%S')- 正在处理:${filename}.mp4">>${LOG_FILE}ffmpeg -y\-i${file}\-s${TARGET_RES}\-r${TARGET_FPS}\-an\-c:v libx264\-preset fast\-crf28\-v error\${output_file}>>${LOG_FILE}2>&1# 检查处理结果if[$?-eq0];thenecho"$(date+'%Y-%m-%d %H:%M:%S')- 处理完成:${filename}.mp4">>${LOG_FILE}elseecho"$(date+'%Y-%m-%d %H:%M:%S')- 处理失败:${filename}.mp4">>${LOG_FILE}fidone# 步骤4:写入完成日志echo"$(date+'%Y-%m-%d %H:%M:%S')- 批量AI预处理脚本执行完毕">>${LOG_FILE}exit0

脚本使用说明

  1. 修改配置参数(INPUT_DIROUTPUT_DIR)为园区实际目录
  2. 赋予执行权限:chmod +x batch_ai_preprocess.sh
  3. 运行脚本(批量处理耗时较长,建议后台运行):nohup ./batch_ai_preprocess.sh &
  4. 查看处理进度:tail -f /data/park/logs/batch_ai_preprocess.log

脚本 3:历史录像自动压缩(H.265 编码,节省 50% 存储)

功能说明

  1. 压缩指定天数前的历史录像(默认 7 天),将 H.264 转为 H.265 编码
  2. 压缩完成后可选择删除原文件(节省存储空间)
  3. 按日期筛选,避免压缩最新录像
  4. 日志记录压缩进度和空间节省情况

脚本代码(保存为history_record_compress.sh

#!/bin/bash# 智慧园区历史录像自动压缩脚本(H.264→H.265)# 配置参数RECORD_DIR="/data/park/record"# 录像存储目录KEEP_DAYS=7# 保留最新7天的录像不压缩DELETE_ORGINAL=0# 压缩后是否删除原文件(0=不删除,1=删除)LOG_FILE="/data/park/logs/history_record_compress.log"# 步骤1:创建日志目录mkdir-p$(dirname${LOG_FILE})# 步骤2:写入启动日志echo"=====================================">>${LOG_FILE}echo"$(date+'%Y-%m-%d %H:%M:%S')- 历史录像压缩脚本启动">>${LOG_FILE}echo"录像目录:${RECORD_DIR}">>${LOG_FILE}echo"保留最新${KEEP_DAYS}天录像,压缩后删除原文件:$(if[${DELETE_ORGINAL}-eq1];thenecho"是";elseecho"否";fi)">>${LOG_FILE}# 步骤3:筛选并压缩指定天数前的MP4文件find${RECORD_DIR}-type f -name"*.mp4"\-mtime +${KEEP_DAYS}\-not -name"*_compressed.mp4"|whilereadfile;do# 定义压缩后文件名compressed_file="${file%.mp4}_compressed.mp4"# 跳过已压缩的文件if[-f${compressed_file}];thenecho"$(date+'%Y-%m-%d %H:%M:%S')- 已压缩,跳过:$(basename${file})">>${LOG_FILE}continuefi# 记录原文件大小original_size=$(du-h ${file}|awk'{print $1}')# 执行FFmpeg H.265压缩echo"$(date+'%Y-%m-%d %H:%M:%S')- 正在压缩:$(basename${file})(原大小:${original_size})">>${LOG_FILE}ffmpeg -y\-i${file}\-c:v libx265\-crf28\-c:a aac\-preset medium\-v error\${compressed_file}>>${LOG_FILE}2>&1# 检查压缩结果并处理原文件if[$?-eq0];thencompressed_size=$(du-h ${compressed_file}|awk'{print $1}')echo"$(date+'%Y-%m-%d %H:%M:%S')- 压缩完成:$(basename${compressed_file})(压缩后大小:${compressed_size})">>${LOG_FILE}# 删除原文件(若配置开启)if[${DELETE_ORGINAL}-eq1];thenrm-f${file}echo"$(date+'%Y-%m-%d %H:%M:%S')- 已删除原文件:$(basename${file})">>${LOG_FILE}fielseecho"$(date+'%Y-%m-%d %H:%M:%S')- 压缩失败:$(basename${file})">>${LOG_FILE}# 删除损坏的压缩文件rm-f${compressed_file}fidone# 步骤4:写入完成日志echo"$(date+'%Y-%m-%d %H:%M:%S')- 历史录像压缩脚本执行完毕">>${LOG_FILE}exit0

脚本使用说明

  1. 修改配置参数(RECORD_DIRKEEP_DAYSDELETE_ORGINAL
  2. 赋予执行权限:chmod +x history_record_compress.sh
  3. 建议通过crontab定时执行(如每周日凌晨 2 点):
    # 编辑定时任务crontab-e# 添加以下内容(每周日凌晨2点执行)02* *0/data/park/scripts/history_record_compress.sh
  4. 查看压缩日志:tail -f /data/park/logs/history_record_compress.log

脚本部署与运维注意事项

  1. 环境准备:确保服务器已安装 FFmpeg(ffmpeg -version验证)
  2. 存储规划:提前规划录像目录的磁盘空间,避免存储溢出
  3. 日志清理:定期清理日志文件(可添加定时任务删除 30 天前的日志)
  4. 权限配置:脚本运行用户需拥有录像目录的「读/写/执行」权限
  5. 后台运行:长时间运行的脚本(如录制脚本)使用nohupscreen保持后台运行
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 6:21:22

多态的使用和原理(c++详解)

一、多态的概念多态顾名思义就是多种形态,它分为编译时的多态(静态多态)和运行时的多态(动态多态),编译时多态(静态多态)就是函数重载,模板等,通过不同的参数…

作者头像 李华
网站建设 2026/4/15 9:34:42

图像分割效率翻倍|sam3大模型镜像核心优势与应用案例

图像分割效率翻倍|sam3大模型镜像核心优势与应用案例 1. 为什么SAM3让图像分割进入“自然语言时代”? 你有没有遇到过这样的情况:想从一张复杂的图片里抠出某个物体,比如一只站在树上的红狐狸,但手动画框太费劲&…

作者头像 李华
网站建设 2026/4/9 23:26:08

GPT-SoVITS终极指南:打造专业级语音合成系统的完整教程

GPT-SoVITS终极指南:打造专业级语音合成系统的完整教程 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 在人工智能技术飞速发展的今天,GPT-SoVITS作为一款革命性的少样本语音转换和文本转语音系统&a…

作者头像 李华
网站建设 2026/4/11 22:08:26

15分钟快速搭建Prefect本地开发环境:实战指南

15分钟快速搭建Prefect本地开发环境:实战指南 【免费下载链接】prefect PrefectHQ/prefect: 是一个分布式任务调度和管理平台。适合用于自动化任务执行和 CI/CD。特点是支持多种任务执行器,可以实时监控任务状态和日志。 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/4/11 12:35:08

Music-You:现代化Material Design 3音乐播放器终极指南

Music-You:现代化Material Design 3音乐播放器终极指南 【免费下载链接】music-you 🪗 一个美观简约的Material Design 3 (Material You) 风格pc音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/mu/music-you 在当今数字化时代&#x…

作者头像 李华
网站建设 2026/4/14 8:52:27

SGLang部署避坑清单,新手少走弯路必备

SGLang部署避坑清单,新手少走弯路必备 SGLang-v0.5.6 是一个专注于大模型推理优化的框架,全称为 Structured Generation Language(结构化生成语言)。它通过减少重复计算、提升缓存利用率和简化复杂逻辑编程,帮助开发者…

作者头像 李华