从任何视频中提取完美的一帧
一帧一帧地真正步进,按间隔取出一整批,或者让差异曲线替你找出切换点。一切都在这个标签页里解码,文件哪儿也不去。
拖放视频或点击上传
MP4 · WebM · MOV,以及你的浏览器能解码的其他格式 —— 文件不会离开你的设备
工作方式
放入视频
只要浏览器能解码就行。尺寸、分辨率和真实帧率都从文件本身读出 —— 那个 fps 输入框没了,因为它本来就是猜的。
定位到某一帧
方向键按整帧步进,每一步都会等画面真正变化。用滚轮放大检查焦点,按住 Alt 与上一次截取对比。
或者取出一整批
每 N 秒、均匀取 N 张,或某个区间内的每一帧。镜头扫描会把采样之间的差异画出来,让你去调阈值,而不是盲目相信它。
导出
PNG、JPG 或 WebP,原尺寸或缩小,逐张或打包成 ZIP。图库会告诉你它占了多少内存,并能把某一帧直接交给下一个工具。
截取会等待该帧
跳转是异步的,所以刚移动完就去画视频,拿到的是之前画面上的内容 —— 通常是前一帧。这里每次截取都会等到真正呈现的那一帧。
帧率是实测的
requestVideoFrameCallback 会报告每一帧的呈现时刻,所以帧率来自视频本身,而不是一个要你填的输入框。常见帧率会吸附,但 23.976 依旧是 23.976。
批量提取
每 N 秒、在区间内均匀取 N 张,或两点之间的每一帧。开始前就告诉你会取多少张,随时叫停随时停。
镜头切换检测
对缩小后的采样计算亮度差,画成一条可以点击的曲线。阈值是你能调的数字,不是藏起来的判断。
以光标为中心缩放
滚轮放大到 12×,拖动平移,双击复位 —— 在决定用哪一帧之前,先看清焦点或读清小字。
内存看得见
原尺寸 blob 累积得很快,所以列表只显示缩略图,每一帧都报出自己的体积,总量会在标签页变沉之前提醒你。
不上传任何内容
视频由浏览器从本地 object URL 解码。没有服务器,没有排队,也不对你处理的素材做遥测。
交接给套件里的其他工具
把某一帧直接送到 CropSnap、CompressSnap、抠图工具或 MemeBolt,无需下载再上传。
你看到的那一帧,而不是它前面那一帧
帧率是从视频本身测出来的,而且每次截取都会等到该帧真正显示出来 —— 你保存下来的,就是你当时看到的那一帧。
由你已经有的浏览器来解码
视频从本地 object URL 播放,帧被画到 canvas 上,所以提取的速度就是你自己解码器的速度,前面没有任何编码队列。不上传、不在服务器上排队,想丢掉这个文件,关掉标签页就够了。
封面图、佐证、参考
为封面挑出最干净的一帧、抓住 bug 出现的确切那一帧、为设计收集参考、或者记录 00:04:11 到底发生了什么 —— 这些都需要你当时看到的那一帧,而不是它前面那一帧。帧率实测、跳转有等待,屏幕上的帧号就是文件里的帧号,来回步进每次都会回到同一张画面。
你的视频保留在你的设备上。没有上传、没有数据库、没有跟踪——文件只存在于本地内存中,关闭标签页即消失。
常见问题
Q我的视频会被上传吗?+
不会。浏览器从本地 object URL 解码,帧在同一个标签页里画到 canvas 上。没有服务端,关掉页面文件就没了。
Q它怎么知道帧率?+
它去测。视频会静音播放极短一瞬,同时 requestVideoFrameCallback 报告每一帧的呈现时刻,间隔的中位数就是帧率。浏览器不提供这个回调时,工具会照实说明,而不是假装知道。
Q为什么步进比以前慢?+
因为现在每一步都会等新的一帧真正呈现,才算完成。这个等待,正是「保存你看到的那一帧」和「保存前一帧」之间的差别。
Q可以一次提取很多帧吗?+
可以。批量标签页支持每 N 秒一张、在区间内均匀取 N 张,或两点之间的每一帧,单次最多 500 张。开始前会告诉你数量,按「停止」或 Escape 立刻中断。
Q镜头检测到底在测什么?+
在宽 64 像素的缩略图上,相邻采样之间的平均绝对亮度差。所有数据都会画出来,你能看到每个采样离阈值有多远,从而去调阈值,而不是相信一个看不见的分数。
Q导出的帧是什么质量?+
默认使用视频的原始分辨率,可选无损 PNG,或带质量滑块的 JPG/WebP。当你要的是一张联系表而不是母版时,也可以按 50% 或 25% 导出。