FFmpeg录制RTSP流:自定义文件名重复时自动重命名方案咨询
解决方案:自动重命名的RTSP流定时录制脚本
我之前帮同事处理过类似的定时录制RTSP流的需求,刚好可以给你一套完整的可落地方案——核心是用Shell脚本处理自动重命名逻辑,搭配FFmpeg完成录制,最后通过crontab定时执行。
1. 编写自动重命名的录制脚本
先创建一个bash脚本(比如record_rtsp.sh),这个脚本会自动检测目标文件是否存在,生成不重复的文件名,再调用FFmpeg开始录制。
#!/bin/bash # 配置参数 RTSP_URL="rtsp://your-rtsp-stream-url" # 替换成你的RTSP流地址 BASE_DIR="/path/to/save/videos" # 替换成你的视频保存目录 BASE_FILENAME="video-$(date +%m%d%Y)" # 基础文件名,格式:video-月日年 EXTENSION=".mp4" DURATION=3600 # 录制时长:1小时=3600秒 # 创建保存目录(如果不存在) mkdir -p "$BASE_DIR" # 生成不重复的文件名 TARGET_FILE="$BASE_DIR/$BASE_FILENAME$EXTENSION" COUNTER=1 while [ -f "$TARGET_FILE" ]; do TARGET_FILE="$BASE_DIR/$BASE_FILENAME-$COUNTER$EXTENSION" COUNTER=$((COUNTER + 1)) done # 调用FFmpeg录制视频 echo "开始录制,保存至:$TARGET_FILE" ffmpeg -i "$RTSP_URL" -t "$DURATION" -c:v copy -c:a copy -y "$TARGET_FILE" # 可选:添加日志记录,方便排查问题 # echo "$(date +%Y-%m-%d_%H:%M:%S) 录制完成:$TARGET_FILE" >> "$BASE_DIR/record_logs.txt"
脚本说明:
- 自动重命名逻辑:先尝试使用基础文件名(比如
video-02222018.mp4),如果文件已存在,就依次添加-01、-02后缀,直到找到一个不存在的文件名。 - FFmpeg参数:
-i "$RTSP_URL":指定输入的RTSP流地址-t "$DURATION":设置录制时长(3600秒=1小时)-c:v copy -c:a copy:直接复制流的音视频编码,避免重新编码,节省CPU资源(如果你的RTSP流编码不兼容MP4,可能需要改成-c:v h264 -c:a aac)-y:这里其实我们已经确保文件名唯一,保留该参数可防止意外情况导致的录制中断
2. 给脚本赋予执行权限
保存脚本后,记得给它加可执行权限:
chmod +x /path/to/record_rtsp.sh
3. 设置crontab定时任务
现在把脚本加入crontab,让它定时运行。
首先打开crontab编辑界面:
crontab -e
然后添加定时规则,比如每天凌晨0点自动录制1小时,就加这一行:
0 0 * * * /path/to/record_rtsp.sh >> /path/to/record_rtsp.log 2>&1
crontab规则说明:
0 0 * * *:代表每天0点0分执行(格式:分 时 日 月 周),你可以根据需求修改,比如想每天中午12点录制,就改成0 12 * * *>> /path/to/record_rtsp.log 2>&1:把脚本的输出和错误信息都写入日志文件,方便后续排查问题
4. 测试脚本
在正式定时运行前,建议手动运行一次脚本,验证是否能正常录制并生成正确的文件名:
/path/to/record_rtsp.sh
如果一切正常,你会在指定目录看到生成的视频文件,重复运行脚本的话,会自动生成带递增序号的文件名。
内容的提问来源于stack exchange,提问作者Xeno Boss
相关产品推荐
相关产品推荐

