用icedump与nticedump完整提取显卡Option ROM/VBIOS指南
2026/9/29 17:04:23
以下提供 3 个实用 Shell 脚本,适配园区24h 定时分段录制、多摄像头批量预处理、历史录像自动压缩场景,可直接部署在 Linux 服务器(CentOS/Ubuntu)上,支持后台运行、日志记录,降低人工运维成本。
20260112_100000_cam001.mp4)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}exit0fiRTSP_URL、CAMERA_ID、SAVE_DIR)为园区实际信息chmod +x camera_record.shnohup ./camera_record.sh &tail -f /data/park/logs/cam001_record.log_ai_pre后缀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}exit0INPUT_DIR、OUTPUT_DIR)为园区实际目录chmod +x batch_ai_preprocess.shnohup ./batch_ai_preprocess.sh &tail -f /data/park/logs/batch_ai_preprocess.loghistory_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}exit0RECORD_DIR、KEEP_DAYS、DELETE_ORGINAL)chmod +x history_record_compress.shcrontab定时执行(如每周日凌晨 2 点):# 编辑定时任务crontab-e# 添加以下内容(每周日凌晨2点执行)02* *0/data/park/scripts/history_record_compress.shtail -f /data/park/logs/history_record_compress.logffmpeg -version验证)nohup或screen保持后台运行