在 Telegram Premium 中, 可以使用 Animated Profile Pictures 功能来设置动态头像。但如果直接上传 GIF 图片, 头像会变成静态的。因此, 我们需要将 GIF 转换为 MP4 视频文件, 以便作为头像上传。同时, 这样还可以调整播放速度
检查 GIF 图像信息
确认 GIF 图层总数
使用 Photoshop 打开 input.gif
, 并计算图层的数量。例如, input.gif
有 1-22 图层, 总计 22 个图层
设置循环次数和图层总数
[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?