本帖最后由 fei888888 于 2023-8-18 17:26 编辑
感谢@sbwfnhn提供的脚本,命令如下:
[Shell] 纯文本查看 复制代码 #!/bin/bash
#我这里要切除的开头8秒和结尾7 秒
title_sequence="00:00:08" #要去掉片头的时间
beg=8 #把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
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 -ss $title_sequence -i $i -t $newtime -c:v copy -c:a copy ./out_mp4/$i -y
done
软件下载地址:
ffmpeg(注意:解压到某个目录后需要添加环境变量,具体可以百度,如不添加环境变量,命令中的ffmpeg需要给全路径)
https://wwww.lanzoub.com/ibehV15q7iud
git
https://wwww.lanzoub.com/iEvuF15q7myb
密码:ddhj
使用教程如下:
1.命令复制保存为.sh文件(命令中默认获取的是MP4格式的文件,如其他格式需要修改)
2.命令放在你要处理的视频目录下
3.在目录下左击鼠标选择git Bash Here
4,执行 ****.sh
5.视频会输出到同目录的out_mp4下(输出目录可以在命令中修改)
|