我平时会在微博上看到一些挺好玩的表情包,顺手想保存下来时,才发现事情没有想象中简单:网页上看起来明明是 GIF,下载到手却是 MP4。
这倒也不是微博显示错了。为了让播放更流畅、文件更小,很多所谓的 GIF 动图,实际上是一个循环播放的 MP4 视频。对微博来说这很合理,对想收藏表情包的人来说,就多了一道工序:先把 MP4 下载下来,再打开 ffmpeg 转成 GIF。
偶尔弄一次还好。可当你连续遇到几个想保存的表情包,打开终端、输入转换命令、等待输出文件的过程,很快就从“收藏一个好玩的东西”变成了“认真处理一个媒体文件”。
于是我借助 Claude 写了一个油猴脚本,把这件事压缩成一次点击:脚本会在微博动图的右上角放一个下载按钮,点击后直接下载当前媒体文件,并尽量给它一个 GIF 用户能够理解的下载入口。
脚本已经发布到 GreasyFork:
安装微博 GIF 动图下载器(MP4/GIF)
为什么需要这个脚本
微博里的 GIF 经常不是传统意义上的 .gif 图片,而是通过
原来的处理方式大概是这样:
# 先下载微博里的 MP4
# 再使用 ffmpeg 转成 GIF
ffmpeg -i input.mp4 -vf "fps=12,scale=480:-1:flags=lanczos" output.gif
这套方法当然能用,ffmpeg 也很可靠。问题是,看到一个表情包就要手动下载、改文件名、打开终端,再输入一串参数,步骤有点多。
这个油猴脚本并没有重新发明 GIF 转换器。它做的是更靠前的一步:在微博网页上直接提供下载入口,让你先把当前动图保存下来。至于是否需要转换、转换成什么尺寸,可以根据自己的使用场景决定。
它主要解决了这些麻烦:
不用打开开发者工具寻找视频地址。
不用在页面源码或网络请求里反复确认哪个文件才是当前动图。
不用每次都从零开始处理一个想收藏的表情包。
下载按钮就在动图右上角,看到就能点。
油猴脚本适合处理这种重复的小操作。它不改变微博的内容,只是在已经显示出来的媒体旁边补了一个入口。
安装方式
1. 安装脚本管理器
桌面浏览器需要先安装一个用户脚本管理器,例如:
Tampermonkey
Violentmonkey
不同浏览器的扩展商店页面可能不一样,选择自己正在使用的浏览器版本安装即可。
2. 从 GreasyFork 安装
打开脚本页面:
微博GIF动图下载器 - MP4/GIF
点击页面上的“安装此脚本”,再在油猴弹窗里确认安装。安装完成后,刷新微博页面即可。
上面这张图就是安装完成后的效果:动图右上角会出现一个橙色的 ↓ GIF 按钮。它只是一个浮动入口,不会遮住整个视频,也不需要额外打开面板。
使用方法
打开微博网页版。
找到一条以动图形式展示的内容。
等待媒体加载完成。
点击视频右上角的 ↓ GIF 按钮。
浏览器会开始下载对应的 MP4 文件。
脚本的目标是把“找到并下载微博动图”这一步变成一次点击。微博页面里的资源本身通常还是 MP4,下载后如果你需要真正的 .gif 文件,再交给 ffmpeg 转换即可。这样做的好处是,下载和转换分开了:想留 MP4 就留 MP4,想做 GIF 时再按用途调整帧率、尺寸和压缩参数。
例如,下载后可以继续使用:
ffmpeg -i input.mp4 -vf "fps=12,scale=480:-1:flags=lanczos" output.gif
MP4 通常体积更小,画质也更容易保留,所以我没有在脚本里强制把所有视频转成 GIF。
它大概是怎么工作的
脚本会监听页面中的视频元素,并为符合条件的媒体添加一个下载按钮。按钮和对应的视频保持关联,点击时直接读取视频的资源地址,然后调用浏览器下载能力。
微博页面是动态加载的,滚动后还会继续出现新内容。因此脚本不能只在页面第一次打开时扫描一次,而需要处理后续插入的节点。实现上,这类需求通常会结合定时检查或 DOM 变化观察,让新出现的动图也能获得按钮。
这里没有把脚本源码整段贴出来。真正值得保留的是它解决问题的方式:把原本需要打开开发者工具、寻找网络请求的动作,压缩成页面上的一次点击。
下载失败时可以检查什么
如果按钮没有出现,先确认以下几点:
油猴扩展是否已经启用。
GreasyFork 页面上的脚本是否处于启用状态。
当前是不是微博网页版,而不是客户端或内嵌页面。
动图是否已经加载完成。
刷新页面后按钮是否出现。
浏览器是否拦截了下载,或等待用户允许多个文件下载。
如果微博改动了页面结构,脚本也可能需要更新。遇到问题时,可以到 GreasyFork 的脚本页面查看版本、反馈讨论和更新记录。
关于权限和使用边界
安装用户脚本前,建议先阅读脚本源码和 GreasyFork 页面列出的权限。下载按钮只应该用于保存自己有权保存和使用的内容,不要绕过版权限制,也不要把他人的作品重新上传或用于商业用途。
这个脚本的目标很小:让浏览器里已经看得到的循环视频,更容易保存到自己的设备里。它不是一个微博内容抓取器,也不负责批量下载整页媒体。
最后
我一直觉得,浏览器脚本最舒服的状态不是“功能很多”,而是某个动作终于不再需要绕路。这个脚本做的事情很简单:看到微博上的好玩表情包,点一下,先把 MP4 下载下来;需要 GIF 时,再用 ffmpeg 转换。
对我来说,这比每次都手动找地址、下载、转码舒服多了。毕竟写脚本的目的不是把事情弄得更复杂,而是把那些重复的小麻烦提前处理掉。
如果你也经常在微博上看到想保存的表情包,可以到 GreasyFork 安装试试:
安装微博 GIF 动图下载器