新建一个 videostart.sh文件,内容如下:
#!/bin/bash
echo "开始检查转码videoprocess程序是否运行..."
processID=$(ps -ef | grep videoprocess | grep -v "grep" | awk "{print $2}")
echo $processID
# 判断$processID为空,此处意思为如果$processID为空,那么重启
if [ -z "$processID" ]
then
# 启动程序
sh /mnt/87T/html/storage/app/public/videos/videoprocess.sh
else
echo "videoprocess程序正在运行中..."
fi
# ps -ef 展示进程
# | grep your_keywords 按关键字筛选
# | grep -v “grep” 屏蔽grep程序本身的进程
# | awk ‘{print $2}’ 只打印第二列
# process_id=${语句} 将语句执行的返回值赋值给process_id,注意等号前后不能有空
# [ -z "$process_id”] 判断$process_id为空
# [[ -z "$process_id”]] 判断$process_id不为空 , 注意这里前后有两个中括号,Shell的这个语法有点奇怪
# kill -9 $process_id 杀掉变量$process_id指定的进程
新建一个 videoprocess.sh文件,内容如下:
#!/bin/bash
# 指定需要压缩的视频文件目录,目前默认是当前目录
#current_dir=$PWD
today=$(date +%Y%m%d)
current_dir="/mnt/87T/html/storage/app/public/videos/${today}"
# 遍历当前目录下所有的mp4文件
for file in "$current_dir"/*.mp4; do
# 输出文件名
echo "Compressing $file ..."
# 提取文件名,不包括扩展名
filename="${file%.*}"
# 文件扩展名
ext=$(basename "$file" | cut -d. -f2-)
# 新文件地址
newfile="$filename-720.$ext"
# 如果文件已经存在 不处理
if [ -f $newfile ]; then
continue
fi
logfile="$filename.log"
# 如果日志已经存在 说明已经处理了
if [ -f $logfile ]; then
continue
fi
log720="$filename-720.log"
# 如果日志已经存在 说明已经处理了
if [ -f $log720 ]; then
continue
fi
# 使用FFmpeg压缩视频,处理信息写入日志
# 开始处理写入一个log文件,表示文件在处理中
# 使用 FFmpeg 获取音频时长
duration=$(ffmpeg -i "$file" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//)
echo "${duration}" > "${filename}.log"
# 获取当前时间
begin=$(date "+%Y-%m-%d %H:%M:%S")
ffmpeg -i "$file" -s 720x640 "${newfile}"
end=$(date "+%Y-%m-%d %H:%M:%S")
echo "开始时间,$begin,结束时间,$end" > "${filename}-720.log"
done
echo "Compression complete."