ffmpeg缩略图:每2秒,在0、1、3、5秒生成

Jim*_*ler 2 video ffmpeg

我正在使用 ffmpeg 从一段 .mov 视频生成缩略图。我想每两秒获取一次缩略图,因此,几乎直接从https://trac.ffmpeg.org/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video复制,我'我正在做:

ffmpeg -i test.mov -f image2 -vf fps=fps=1/2 thumb%04d.jpg
Run Code Online (Sandbox Code Playgroud)

这有效,并为我提供了缩略图,但它们对应于视频中第 0、1、3、5……秒的图像。我原以为是 0、2、4、6、... 秒;我不确定为什么缩略图之间最初有一秒的间隙,然后才确定为每两秒制作一次。

有没有办法让它们在 0、2、4、6... 秒时出现,或者这只是“它是如何工作的”?谢谢!

AJ2*_*J29 6

这与您的问题无关,但我过去遇到过参数“fps”的帧精度问题。相反,我使用了“选择”过滤器:

ffmpeg -i test.mov -vf "select='not(mod(n,50))',setpts='N/(25*TB)'" -f image2 thumb%04d.jpg
Run Code Online (Sandbox Code Playgroud)

如果您正在处理 25 fps 的电影,这应该也适合您。

编辑:

对于 NTSC,将选择过滤器更改为:

select='not(mod(n,60))',setpts='N/(30*TB)'"
Run Code Online (Sandbox Code Playgroud)

对于电影,将其更改为

select='not(mod(n,48))',setpts='N/(24*TB)'"
Run Code Online (Sandbox Code Playgroud)

基本上,它将 PTS(呈现时间戳)覆盖为正确的值,并在每次帧编号是“Mod”函数中的值的倍数时选择帧。该值必须等于帧速率的两倍。

请原谅我默认使用 PAL 的值,我主要在欧洲使用 FFMPEG 进行广播:)