2026/5/21 13:26:30
网站建设
项目流程
上海网站改版哪家好,网络技术基础知识,地推网站信息怎么做,现在最好的企业网站管理系统以下提供 3 个实用 Shell 脚本#xff0c;适配园区24h 定时分段录制、多摄像头批量预处理、历史录像自动压缩场景#xff0c;可直接部署在 Linux 服务器#xff08;CentOS/Ubuntu#xff09;上#xff0c;支持后台运行、日志记录#xff0c;降低人工运维成本。
脚本 1适配园区24h 定时分段录制、多摄像头批量预处理、历史录像自动压缩场景可直接部署在 Linux 服务器CentOS/Ubuntu上支持后台运行、日志记录降低人工运维成本。脚本 1单摄像头 24h 定时分段录制核心脚本功能说明拉取 RTSP 摄像头流按1小时/段自动分割文件按「日期_时间_摄像头ID」命名便于检索如20260112_100000_cam001.mp4记录运行日志异常中断自动打印错误信息强制 TCP 传输避免园区网络丢包提高录制稳定性脚本代码保存为camera_record.sh#!/bin/bash# 智慧园区摄像头自动分段录制脚本# 配置参数根据园区实际情况修改RTSP_URLrtsp://admin:123456192.168.1.100:554/stream1# 摄像头RTSP地址CAMERA_IDcam001# 摄像头编号用于文件命名SAVE_DIR/data/park/record# 录像保存目录SEGMENT_TIME3600# 每段录像时长秒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}echoRTSP地址${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}21# 步骤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脚本使用说明修改配置参数RTSP_URL、CAMERA_ID、SAVE_DIR为园区实际信息赋予执行权限chmod x camera_record.sh后台运行避免终端关闭中断nohup ./camera_record.sh 查看日志tail -f /data/park/logs/cam001_record.log脚本 2多摄像头录像批量 AI 预处理功能说明遍历指定目录下所有监控录像批量完成「分辨率统一720P 帧率调整15fps 去除音频」适配 AI 分析模型输入要求减少算力消耗处理完成后保留原文件输出文件添加_ai_pre后缀支持断点续跑跳过已处理完成的文件脚本代码保存为batch_ai_preprocess.sh#!/bin/bash# 智慧园区录像批量AI预处理脚本# 配置参数INPUT_DIR/data/park/record# 原始录像目录OUTPUT_DIR/data/park/ai_input# 预处理后保存目录TARGET_RES1280x720# AI模型目标分辨率720PTARGET_FPS15# 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}21# 检查处理结果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脚本使用说明修改配置参数INPUT_DIR、OUTPUT_DIR为园区实际目录赋予执行权限chmod x batch_ai_preprocess.sh运行脚本批量处理耗时较长建议后台运行nohup ./batch_ai_preprocess.sh 查看处理进度tail -f /data/park/logs/batch_ai_preprocess.log脚本 3历史录像自动压缩H.265 编码节省 50% 存储功能说明压缩指定天数前的历史录像默认 7 天将 H.264 转为 H.265 编码压缩完成后可选择删除原文件节省存储空间按日期筛选避免压缩最新录像日志记录压缩进度和空间节省情况脚本代码保存为history_record_compress.sh#!/bin/bash# 智慧园区历史录像自动压缩脚本H.264→H.265# 配置参数RECORD_DIR/data/park/record# 录像存储目录KEEP_DAYS7# 保留最新7天的录像不压缩DELETE_ORGINAL0# 压缩后是否删除原文件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}21# 检查压缩结果并处理原文件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脚本使用说明修改配置参数RECORD_DIR、KEEP_DAYS、DELETE_ORGINAL赋予执行权限chmod x history_record_compress.sh建议通过crontab定时执行如每周日凌晨 2 点# 编辑定时任务crontab-e# 添加以下内容每周日凌晨2点执行02* *0/data/park/scripts/history_record_compress.sh查看压缩日志tail -f /data/park/logs/history_record_compress.log脚本部署与运维注意事项环境准备确保服务器已安装 FFmpegffmpeg -version验证存储规划提前规划录像目录的磁盘空间避免存储溢出日志清理定期清理日志文件可添加定时任务删除 30 天前的日志权限配置脚本运行用户需拥有录像目录的「读/写/执行」权限后台运行长时间运行的脚本如录制脚本使用nohup或screen保持后台运行