#!/bin/bash
# ===================== 配置参数 =====================
# 视频源目录(会自动拼接当天日期)
VIDEO_BASE_DIR="/var/www/html/shequ/activity/public/uploads"
# 图片输出目录(与视频同目录,也可自定义)
OUTPUT_BASE_DIR="${VIDEO_BASE_DIR}"
# 截取间隔(秒)
INTERVAL=10
# 脚本锁文件(用于防止重复执行)
LOCK_FILE="/tmp/video_screenshot.lock"
# 日志文件
LOG_FILE="/var/log/video_screenshot.log"
# ===================== 核心逻辑 =====================
# 1. 检查是否已有任务在执行
if [ -f "${LOCK_FILE}" ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 检测到已有任务在执行,本次跳过" >> "${LOG_FILE}"
exit 0
fi
# 2. 创建锁文件
touch "${LOCK_FILE}"
trap 'rm -f "${LOCK_FILE}"; exit' EXIT # 脚本退出时自动删除锁文件
# 3. 获取当天日期(格式:20251219)
TODAY=$(date +'%Y%m%d')
VIDEO_DIR="${VIDEO_BASE_DIR}/${TODAY}"
# 4. 检查目录是否存在
if [ ! -d "${VIDEO_DIR}" ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 目录 ${VIDEO_DIR} 不存在,本次跳过" >> "${LOG_FILE}"
exit 0
fi
# 5. 遍历目录下的视频文件(支持常见格式:mp4、avi、mov、mkv)
VIDEO_FORMATS=("mp4" "avi" "mov" "mkv")
for FORMAT in "${VIDEO_FORMATS[@]}"; do
for VIDEO_FILE in "${VIDEO_DIR}"/*.${FORMAT}; do
# 跳过不存在的文件(比如目录下无该格式视频时)
[ -f "${VIDEO_FILE}" ] || continue
# 获取视频文件名(不含路径和后缀)
VIDEO_NAME=$(basename "${VIDEO_FILE}" .${FORMAT})
OUTPUT_DIR="${OUTPUT_BASE_DIR}/${TODAY}/${VIDEO_NAME}"
# 如果输出的目录已经存在,说明这个视频文件已经处理过了,不需要重复处理
if [ -d "${OUTPUT_DIR}" ]; then
continue # 跳过当前视频,处理下一个
fi
# 创建截图输出目录
mkdir -p "${OUTPUT_DIR}"
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 开始处理视频:${VIDEO_FILE}" >> "${LOG_FILE}"
# 使用ffmpeg每10秒截取一帧,命名为 视频名+序号.jpg
# -vf fps=1/${INTERVAL}:每INTERVAL秒1帧;%04d:4位序号(如0001、0002)
ffmpeg -i "${VIDEO_FILE}" -vf fps=1/${INTERVAL} -q:v 2 "${OUTPUT_DIR}/%04d.jpg" -y >> "${LOG_FILE}" 2>&1
if [ $? -eq 0 ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 视频 ${VIDEO_FILE} 处理完成" >> "${LOG_FILE}"
else
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 视频 ${VIDEO_FILE} 处理失败" >> "${LOG_FILE}"
fi
done
done
# 6. 脚本执行完成(锁文件会被trap自动删除)
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 本次任务执行完成" >> "${LOG_FILE}"
exit 0
ffmpeg视频切片
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 1.ffmpeg切片命令,以H264和AAC的形式对视频进行输出 ffmpeg -i input.mp4 -c:v...
- 第一步: 肯定是要下载FFmpeg啦 这个不想说了 直通车:https://ffmpeg.org/download...
- 解析视频编码的时候提是错误 Unknown encoder 'libx264': 这个是缺少libx264库 视频...