我正在使用 ffmpeg 从视频中提取静态图像。从给定时间开始,使用 -ss 和 -t 参数提取给定持续时间的图像。
ffmpeg -ss 00:10:01 -t 2 -i /Volumes/OO_8/VideoSource.mkv -qscale:v 2 -start_number /Users/Olivier/Pictures/ScreenCaptures/ViewsOfNature-%4d.jpeg
(我首先从时间戳/持续时间开始,以便 ffmpeg 从该点启动解复用器。)
但是,我想使用多个起点(例如,在 00:01:12 时,提取 2 秒的图像;在 00:11:00 时,提取 4 秒的图像;等等)。我可以手动执行此操作,替换时间戳和持续时间,并每次移动输出图像,但理想情况下,我想一次输入时间戳和持续时间,而不是覆盖输出图像。有办法做到这一点吗?也许使用带有时间戳/持续时间的外部文件?
我对此还不熟悉,并且更喜欢使用 ffmpeg 来做,而不使用 bash。
答案1
我看不出有什么方法可以轻松使用 ffmpeg 来实现这一点。有一个片段复用器,但您无法设置片段的持续时间。
没有什么可以阻止你这样做,我认为这相当简单。只需创建一个包含逗号分隔的起点和持续时间列表的文本文件:
$ cat split.txt
00:01:05,5
00:06:10,2
00:08:25,1
然后在 Bash 中:
count=1
while read -r -d ',' start duration; do
ffmpeg -ss "$start" -i input.mp4 -t "$duration" "$count-output-%04d.jpg"
(( count++ ))
done < split.txt
这将创建以唯一数字(1、2、3、...)开头的输出文件。