ffmpeg - 设置可变视频持续时间

时间:2017-02-17 08:49:30

标签: 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开始,并使视频长达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秒......诀窍是每个视频的持续时间不同,所以"它是多长时间#34;必须是一个变量(如果我从头开始计算15秒,则持续时间减去15秒或减去30秒)

视频时长示例:

video 1 - 00:25:19
video 2 - 00:15:34
video 3 - 00:19:21
video 4 - 00:22:49
etc.

1 个答案:

答案 0 :(得分:1)

你不能用简单的bash脚本做到这一点吗?

如上所述here此命令将以秒为单位检索视频持续时间:

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