本文由 FrameSprite 作者工作流整理,AI 辅助编写,引用原始技术资料;构造案例不代表模型或引擎实测。
区分时间定位、帧呈现和画布导出,记录目标时间与实际媒体时间,排查重复截帧。
赋值 currentTime 后立即 drawImage 可能读到上一幅画面。先等待本次 seeked,并确认尺寸与当前数据可用;支持时用视频帧回调观察 mediaTime。相同时间不一定再次触发定位事件,暂停状态的回调也需要超时处理。浏览器定位不是逐帧解码保证。
一次只保留一个抽帧任务,注册完成监听后再定位。快速拖动产生的新任务应取消旧任务的写出权限,避免较慢的旧定位覆盖最近选择。
加载元数据后检查 videoWidth、videoHeight 与 readyState。时间已经相同且数据可用时走当前帧路径;不要等待一个不会发生的 seeked。错误和超时都要释放监听。
记录目标时间、定位结束时间和可获取的 mediaTime。不要用固定等待 100 毫秒代替就绪判断,也不要把 currentTime 四舍五入当作已解码帧编号。
用左、右两个明显不同的占位画面测试,增加同一时间重复请求与最后可定位时间。先确认抽帧链路,再换回帧灵动画;导出失败不能保存一个看似成功的空文件。
请求 4 定位到 0.2 秒,请求 5 定位到 0.8 秒;两者完成顺序倒置。
只接受请求 5 的写出,拒绝迟到的请求 4。
只验证任务归属,不代表在真实视频中获得了指定编码帧。
阶段 | 检查 |
|---|---|
定位 | seeked |
呈现 | mediaTime |
写出 | 当前请求身份 |
抽帧请求 11 定位到 0.8 秒,随后请求 12 改为 1.2 秒;如果请求 11 的完成事件晚到,就不能把它的画面交给请求 12。给每次取样分配编号,在定位完成、解码就绪和绘制提交三个阶段都核对最新编号。仅给 currentTime 赋值后马上 drawImage,可能仍画出旧帧。还应记录实际呈现的媒体时间与目标时间,设置超时并保留失败说明;不要用一段固定延迟把定位问题变成不同设备上的随机错误。
动画中停顿姿态可能合法重复。只有目标时间、实际媒体时间与画面一起记录,才能判断是模型保持动作还是浏览器抓到了旧帧。交付时保留取样时间列表,避免接收者仅凭文件名推断帧间隔。
本次补充由 AI 辅助整理,按公开原始技术资料核对。可下载的输入与预期结果是原创构造案例,不代表模型或引擎实测;实际项目应按步骤保留自己的验收记录。
不能,它表示定位过程结束。
定位后的行为需实际验证,并提供超时与回退。
先排查抽帧时序,无须先重生成素材。
HTMLMediaElement seeked · MDN
Video frame callback metadata · MDN
原文:https://cn.framesprite.com/guides/sprite-video-frame-capture-seek-readiness
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。