ffmpeg - 来自视频不同部分的图像并按增量编号

ffmpeg - 来自视频不同部分的图像并按增量编号

我正在使用 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、...)开头的输出文件。

相关内容