使用 FFmpeg Gif to mp4

GIF to MP4 using FFmpeg

在 Telegram Premium 中, 可以使用 Animated Profile Pictures 功能来设置动态头像。但如果直接上传 GIF 图片, 头像会变成静态的。因此, 我们需要将 GIF 转换为 MP4 视频文件, 以便作为头像上传。同时, 这样还可以调整播放速度

检查 GIF 图像信息

确认 GIF 图层总数

使用 Photoshop 打开 input.gif, 并计算图层的数量。例如, input.gif 有 1-22 图层, 总计 22 个图层

Photoshop_gif_layer.png

设置循环次数和图层总数

[loop]loop=loop=3:size=22:start=0[speed];
                ^      ^
            循环次数   GIF 图层总数

控制播放速度

大于 1.0 是减速, 相当于拉长视频
小于 1.0 是加速, 相当于缩短视频

[speed]setpts=1.2*PTS[fps]

设置输出视频的帧数 (fps)

帧率不会影响视频的长度或速度。常见的帧率有 30、60、90 或 120

[fps]fps=30[v]

转换命令

最终拼接参数得到命令

ffmpeg -i input.gif -filter_complex "[0:v]scale=trunc(iw/2)*2:trunc(ih/2)*2[loop];[loop]loop=loop=3:size=22:start=0[speed];[speed]setpts=1.2*PTS[fps];[fps]fps=30[v]" -map "[v]" -movflags faststart -pix_fmt yuv420p output.mp4

其他例子

如果 input.gif 只有 4 个图层, 且希望视频时长变长, 可以多循环几次。例如, 循环 40 次

ffmpeg -i input.gif -filter_complex "[0:v]scale=trunc(iw/2)*2:trunc(ih/2)*2[loop];[loop]loop=loop=40:size=4:start=0[speed];[speed]setpts=1.0*PTS[fps];[fps]fps=30[v]" -map "[v]" -movflags faststart -pix_fmt yuv420p output.mp4 -y

原文

GIF to MP4 by ffmpeg
How to speed up/slow down a video
How to connect filter complex in ffmpeg?

最后更新于 2025-02-17
使用 Hugo 构建
主题 StackJimmy 设计