用shell执行,如果是windows,用git bash执行。也就是装个git软件
[Shell] 纯文本查看 复制代码 #!/bin/bash
#我这里要切除的开头和结尾都是 7 秒
title_sequence="00:01:50" #要去掉片头的时间
beg=7 #把title_sequence转化成秒
end=7 #片尾秒
#用 for 循环直接获取当前目录下的 mp4、mp3、avi 等文件循环处理,单个文件可以去掉 for 循环
filename="*.mp4"
for i in $filename; do
#将元数据信息临时保存到 tmp.log 文件中
echo $i
./ffmpeg -i "$i" > tmp.log 2>&1
#获取视频的时长,格式为 00:00:10,10 (时:分:秒,微妙)
time="`cat tmp.log |grep Duration: |awk '{print $2}'|awk -F "," '{print $1}'|xargs`"
echo $time
#求视频的总时长,先分别求出小时、分、秒的值,这里不处理微秒,可以忽略
hour="`echo $time |awk -F ":" '{print $1}' `"
min="`echo $time |awk -F ":" '{print $2}' `"
sec="`echo $time |awk -F ":" '{print $3}'|awk -F "." '{print $1}' `"
#echo $hour $min $sec
num1=`expr $hour \* 3600`
num2=`expr $min \* 60`
num3=$sec
#计算出视频的总时长(秒)
sum=`expr $num1 + $num2 + $num3`
#总时长减去开头和结尾就是截取后的视频时长,并且这里不需要再转回 hour:min:sec 的格式,直接使用结果即可
newtime=`expr $sum - $beg - $end`
echo $newtime
#截取新视频存放目录,哪果不存在则创建
if [[ ! -d ./out_mp4 ]];then
mkdir ./out_mp4
fi
pwd
#####/usr/local/ffmpeg/bin/ffmpeg -ss 00:00:07 -i $i -t $newtime -c:v copy -c:a copy /data/tmp/$i -y
echo "文件名不能有空格"
#./ffmpeg.exe -i "$i" -map 0:v -c:v copy -bsf:v h264_mp4toannexb raw.h264 -y
#./ffmpeg.exe -fflags +genpts -r 27.2 -i raw.h264 -i "$i" -map 0:v -c:v copy -map 1:a -af atempo=0.90666 -movflags faststart ./out_mp4/"$i" -y
# -ss去掉片头,-t一直截到视频的尾部的总时长,减掉尾部时长的总时长,就是去掉了片尾
./ffmpeg.exe -ss $title_sequence -i $i -t $newtime -c:v copy -c:a copy ./out_mp4/$i -y
done |