使用 FFmpeg 将视频适配到 Telegram 视频贴纸规格
url
ogimage
date
Aug 3, 2025
slug
adapting-videos-to-telegram-video-stickers-using-ffmpeg
status
Published
tags
FFmpeg
summary
包含 FFmpeg 操作: 调整帧持续时长, 重设画面大小, 重编码和封装
type
Post
Telegram 视频贴纸
这是 Telegram 相对 Lottie 动画贴纸降级推出的一个更简单的动画贴纸模式, 可以让用户使用普通的视频动画直接添加到贴纸包中使用, 相比于 Lottie 动画贴纸, 其制作门槛和难度大幅降低.
以下是视频贴纸的规格指标:
- 视频编码为 VP9
- 封装格式为 WebM
- 持续时间不超过 3 秒
- 任意长或宽等于 512px 且不超过 512 px
- 文件体积不超过 256 KB.
- 不包含音频流
在转换适配前需要预处理好需要的片段, 原片的总时长最好不超过 10 秒, 最好在 6 秒以内, 因为超过这个持续时间之后强行加速帧持续时间只会显得片段内容杂乱, 变得没有意义. 除此之外还有视频分辨率, 让目标内容集中在 800px 的范围之内是更合理的选择.
加速
调整视频帧持续时长并指定目标帧率, 使视频加速, 持续时长缩短:
ffmpeg -i animation.mp4 -r 16 -filter:v "setpts=0.5*PTS" animation_speedup.mp4
关键参数:
r: 确定的目标帧率, 用于防止丢帧, 这里的 animation.mp4 文件原始帧率大致是 8 FPS, 所以加速到两倍就是 16 FPS.
filter:v: 过滤器setpts=0.5*PTS, 将原始帧持续时间调整为 0.5 倍, 也就是让整体帧的显示时间加速到两倍, 如果要减慢视频则可以使用整数倍.
重设大小
ffmpeg -i animation_speedup.mp4 -vf scale=512:-1 animation_speedup_512.mp4
关键参数:
vf: 视频过滤器也就是filter:v的别名, 参数scale=512:-1将视频的宽度缩放为 512px 并保持纵横比(-1), 如果想要优先缩放高度则是scale=-1:512. 注意, 一些视频编码器要求画面的宽高必须是 n 的整数倍, 此时可以将-1调整为需要的整数倍, 比如 2 的整数倍保持就是-2.
重新编码
ffmpeg -i animation_speedup_512.mp4 -c:v vp9 -an animation_speedup_512_vp9.webm
将输入视频重新编码为 VP9 编码, 输出封装为 WebM, 使用
an 来丢弃音频流.如果最终输出的视频体积超过 256 KB, 可以添加
crf 参数调整视频恒定质量:ffmpeg -i animation_speedup_512.mp4 -c:v vp9 -crf 30 -an animation_speedup_512_vp9.webm