我想使用 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