Bash ffmpeg-设置可变视频持续时间
我使用此命令以批处理方式转换文件,并进行裁剪和重新缩放:Bash ffmpeg-设置可变视频持续时间,bash,ffmpeg,duration,Bash,Ffmpeg,Duration,我使用此命令以批处理方式转换文件,并进行裁剪和重新缩放: for i in $( ls *.mp4 ); do ffmpeg -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "../../archive/${i/.mp4/}.mp4" done 此命令将在第15秒开
for i in $( ls *.mp4 ); do
ffmpeg -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "../../archive/${i/.mp4/}.mp4"
done
此命令将在第15秒开始,并使视频持续30秒:
for i in $( ls *.mp4 ); do
ffmpeg -ss 00:00:15 -t 30 -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "${i/.mp4/}_test.mp4"
done
我想要的是一个命令,切断15秒从开始和15秒从每批视频结束。。。诀窍是每个视频都有不同的持续时间,所以“它有多长”必须是一个变量(持续时间减去15秒,如果我从开始算起15秒,也可以减去30秒)
视频持续时间示例:
video 1 - 00:25:19
video 2 - 00:15:34
video 3 - 00:19:21
video 4 - 00:22:49
etc.
你不能用一个简单的bash脚本来完成吗 如上所述,此命令将以秒为单位检索视频持续时间:
ffprobe -i some_video -show_entries format=duration -v quiet -of csv="p=0"
因此,您可以将其读入一个变量,然后只需抽出30秒,现在就可以在ffmpeg命令中设置持续时间
因此,步骤1将是您在问题中发布的第一个for循环
第2步是从电影持续时间中提取30秒,并将其保存在变量中
然后在步骤3中,重写第二个for循环,如下所示:
for i in $( ls *.mp4 ); do
ffmpeg -ss 00:00:15 -t $your_new_duration_variable -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "${i/.mp4/}_test.mp4"
done
我认为这将帮助您:最好使用glob,而不是解析*.mp4中I的
ls
:的输出;执行