为什么 ffmpeg 提取的帧比实际的多很多?

为什么 ffmpeg 提取的帧比实际的多很多?

我正在使用 ffmpeg 从 gif 文件中提取帧。当我使用 python PIL 时,它显示该文件有 135 帧。甚至 Mac 中的属性窗口也显示相同数量的帧。但是,出于某种原因,ffmpeg 提取了 >50000 帧。其中很多都是重复的。

Gif 文件 -https://78.media.tumblr.com/dd7f01acad444ca85bea050afd15afaf/tumblr_nof6lmxQLC1utshuoo1_250.gif

我正在使用以下命令 ffmpeg -i input_gif.gif output/%d.jpg Log -https://pastebin.com/HBt58yKq

但是,我发现当我运行以下命令时它可以完美运行 ffmpeg -i input_gif.gif -vsync 0 output/%d.jpg Log -https://pastebin.com/Ykb7WkKA

答案1

检测到 GIF 的帧速率为 6.67,但单个帧延迟设置为 65535(以 1/100 秒为单位),因此每帧 655.35 秒。这意味着 135 个输入帧的总持续时间超过 24 小时。

图像序列复用器设置为恒定帧速率模式。因此,如果输入提供不同的帧数(每秒),ffmpeg 将探测输入的帧速率(6.67 fps),并丢弃或复制帧以匹配该速率。因此,在以 6.67 fps 重新创建 24 小时输出序列时,ffmpeg 将尝试生成超过 500K 帧。几乎所有这些帧都是重复的。

-vsync vfr-vsync 0禁用帧丢失/重复行为。

相关内容