gpt4 book ai didi

bash - ffmpeg 从 10s 的视频中提取子剪辑; 30%; 60%;视频的最后 30 秒

转载 作者:行者123 更新时间:2023-12-04 23:02:39 25 4
gpt4 key购买 nike

我正在 Mac 终端上编写 Bash 命令。为了能够使用循环,我想提取不同输入文件 .mp4 视频的 4 个子剪辑:第一个子剪辑(从第二个 10 到 20),第二个子剪辑(从输入文件的 33% 阶段开始 10 秒),第三个子剪辑(从输入文件的 66% 开始的 10 秒)和第 4 个子剪辑(从输入文件结束前 30 秒开始的 10 秒)。

到目前为止,我只知道如何使其在固定时间(即秒)下工作,但这些仅对应于我的第一个视频(我有 +200):

#!/bin/bash
for file in *.mp4; do ffmpeg -i "$file" -vf "select='between(t, 10, 20) + between(t, 197, 207) + between(t, 393, 403) + between(t, 570,580)',
setpts=N/FRAME_RATE/TB" -qscale 0 -af "aselect='between(t, 10, 20) +
between(t, 197, 207) + between(t, 393, 403) + between(t, 570, 580)',
asetpts=N/SR/TB" ${file%.mp4}_1.mp4; done

对于第一个子剪辑,我总是想要从第二个 10 到 20,所以我可以保持原样,但是对于第二个到第四个子剪辑,我需要一些公式,但不知道是哪些。有什么建议么?

谢谢你的时间

最佳答案

首先,您需要以秒为单位获取视频持续时间:

DURATION=$(ffmpeg -i $file 2>&1 | grep "Duration" | awk '{print $2}' | sed 's/\..*//g' | awk '{split($1, a, ":"); print 3600*a[1] + 60*a[2] + a[3]}')

在此命令中,您查询 ffmpeg 的视频持续时间并通过搜索“持续时间”关键字 (grep)、获取时间字段 (awk)、丢弃厘秒 (sed) 并解析 H:M:S 字符串来解析结果进入几秒钟(awk)。

然后,您可以计算所需的间隔:
START1=10
END1=20
START2=$(($DURATION*33/100))
END2=$(($START2+10))
START3=$(($DURATION*66/100))
END3=$(($START3+10))
START4=$(($DURATION-30))
END4=$(($START4+10))

您需要整整几秒钟,因此使用返回整数的 bash 方法是一个不错的方法。

您应该确保您的视频至少持续 30 秒。

现在,您可以使用适当的时间替换来启动您的命令:
#!/bin/bash

for file in *.mp4
do
DURATION=$(ffmpeg -i $file 2>&1 | grep "Duration" | awk '{print $2}' | sed 's/\..*//g' | awk '{split($1, a, ":"); print 3600*a[1] + 60*a[2] + a[3]}')

START1=10
END1=20
START2=$(($DURATION*33/100))
END2=$(($START2+10))
START3=$(($DURATION*66/100))
END3=$(($START3+10))
START4=$(($DURATION-30))
END4=$(($START4+10))

ffmpeg -i "$file" -vf "select='between(t, $START1, $END1) + between(t, $START2, $END2) + between(t, $START3, $END3) + between(t, $START4, $END4)', setpts=N/FRAME_RATE/TB" -qscale 0 -af "aselect='between(t, $START1, $END1) + between(t, $START2, $END2) + between(t, $START3, $END3) + between(t, $START4, $END4)', asetpts=N/SR/TB" ${file%.mp4}_1.mp4
done

关于bash - ffmpeg 从 10s 的视频中提取子剪辑; 30%; 60%;视频的最后 30 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51121333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com