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
的输出;执行