news 2026/5/30 13:29:05

【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/5/26 20:18:48

用Qwen3-Embedding-0.6B做的AI情感分析,结果太惊喜

用Qwen3-Embedding-0.6B做的AI情感分析,结果太惊喜 1. 情感分析还能这么简单?一个轻量模型带来的意外之喜 你有没有遇到过这样的问题:想做个评论情感分类,但大模型太重跑不动,小模型又不准?最近我在尝试用…

作者头像 李华
网站建设 2026/5/25 14:59:24

Cute_Animal_For_Kids_Qwen_Image更新机制:版本升级部署说明

Cute_Animal_For_Kids_Qwen_Image更新机制:版本升级部署说明 1. 项目简介 Cute_Animal_For_Kids_Qwen_Image 基于阿里通义千问大模型,专门打造适合儿童的可爱风格动物图片生成器,通过输入简单的文字描述便可以生成可爱的动物图片。无论是用…

作者头像 李华
网站建设 2026/5/22 10:40:13

SAM3大模型镜像发布:一句话分割任意物体

SAM3大模型镜像发布:一句话分割任意物体 你有没有遇到过这样的情况:一张复杂的图片里有多个物体,你想把其中某个特定的东西单独抠出来,但手动画框太麻烦,精度还不好?现在,这一切都可以通过一句…

作者头像 李华
网站建设 2026/5/21 10:50:38

WAV和MP3哪个好?CAM++不同格式对比实验

WAV和MP3哪个好?CAM不同格式对比实验 在语音识别与说话人验证的实际应用中,音频文件的格式选择常常被忽视。很多人默认使用MP3,因为它体积小、通用性强;也有专业用户坚持用WAV,认为它无损、保真度高。但这些“常识”真…

作者头像 李华
网站建设 2026/5/28 21:43:31

CAM++与商业声纹系统对比:性价比实战评测

CAM与商业声纹系统对比:性价比实战评测 1. 引言:为什么我们需要说话人识别? 你有没有遇到过这种情况:公司客服接到一个电话,对方声称是重要客户,但你无法确认他是不是真的本人?或者&#xff0…

作者头像 李华
网站建设 2026/5/21 10:07:16

Android设备完整性检测修复终极指南

Android设备完整性检测修复终极指南 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 在现代Android生态系统中,设备完整性检测已成为保障应用安全的重…

作者头像 李华