将 GIF 转换为视频会改变其时长

将 GIF 转换为视频会改变其时长

我想使用 ffmpeg 将 gif 文件转换为视频。我正在使用:

ffmpeg -y -i /gif/583fd7661b46d.gif -strict -2 -an -b:v 32M /gif/mp4/583fd7661b46d.avi

我在 photoshop 中制作的 gif 时长为 27 秒,但生成的视频“583fd7661b46d.avi”的时长为 15 秒。如何才能使生成的视频中的 gif 时长相同?

答案1

使用您的示例,我发现了问题:

在您的 GIF 中,最后一帧(空帧)的持续时间为10370ms。它似乎被 忽略了ffmpeg,从而产生了差异。

如果我将输出格式更改为.mp4,则持续时间将正确。更改编码器没有效果。

所以,这是 中的一个错误ffmpeg。这个可能可能是由于输出格式的限制,这种情况不太可能发生(这个问题也存在于.mkv),但在这种情况下,它至少应该打印一个警告。查看他们的错误追踪器, 我发现#4235(使用 FFmpeg 将 GIF 转换为 MP4 会生成不符合 GIF 帧时间的视频。)- 看起来这个问题对于.mp4格式来说已经修复,但对于其他格式来说还没有修复。

答案2

只需应用系数等于original time / achieved time您情况下的分数的演示时间戳过滤器即可。因此,您可以在输出文件名之前27/15添加过滤器。-filter:v "setpts=27/15*PTS"

有关 FFmpeg wiki 上的帧速率变化的更多信息:https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

相关内容