lcrworld
文章

我在安卓上实现了手机端一键实况图提取:OPPO、一加、三星、谷歌都能用

2 阅读 940 字 约 5 分钟 2026-08-20 18:43
今天和群友讨论了讨论实况图的问题,看着人家iPhone用户能通过苹果的JS库直接实现实况图,我就研究了研究能不能把安卓这条路子也给走出来,于是就有了今天的这篇文章。

也是把「选一张动态照片 → 自动抽出里面的视频 → 网页端悬浮/长按播放」这整条链路在安卓端真正跑通了。请允许我用这篇文章说我最终实现了什么、覆盖了哪些手机、效果如何。

我实现了什么

一句话概括:在安卓端把各厂商「实况图/动态照片」里的动态视频,准确识别并提取出来,做成一条可上线的完整链路。

用户侧的实际体验是这样:

在 App 里选一张实况图;
系统自动识别它是不是动态照片、抽出里面对应的 MP4 视频;
上传到图床,网页端就能通过 悬浮 / 长按 播放动态效果;
视频连带声音一起保留(HEVC 画面 + AAC 音轨都完好)。

覆盖了哪些手机

同一个提取引擎,适配了不同厂商完全不同的内嵌方式,能用同一套逻辑统一处理,并且进行了8层兜底,保证提取90%以上的安卓实况图:

三星 / 小米 :MVIMG_ 前缀 常规 Motion Photo ✅ HEVC/AAC 完整抽出
谷歌 Pixel :PXL_ 前缀 标准 Google Motion Photo(XMP 带 Offset/Length) ✅
OPPO / 一加: 无固定前缀(IMG_*) 视频嵌在文件中部,XMP 只给 Length、不给 Offset ✅ 成功

没有为某个机型写死逻辑,而是用一个通用的「字节级扫描 + XMP 解析」策略同时覆盖了它们。

关键成果

识别:通过全文件扫描「合法 ftyp + 紧随其后的 moov」,即使视频嵌在文件中部、即使文件名毫无特征也能正确识别。

提取:兼容 XMP 只给 Length 不给 Offset 的情况,以 ftyp box 起点定位,按 Length 精确切出完整 MP4。切出来的视频 ffprobe 复验 nb_streams=2、probe_score=100,画面 + 声音都正常。

播放体验:网页端复用了统一的播放器组件,「我的实况图」页面与外链播放器悬停/长按播放逻辑完全一致,并能根据封面/视频真实尺寸自动适配比例,不再裁切失真。

已经在线上

顺带一提,这套能力来自我自己做的一个实况图图床(LCR LIVE PHOTO),核心就是「动态照片上传 → 自动抽帧视频 → 网页端流动播放」,支持外链嵌入到任意网站。目前还在打磨中,未来会开放。

尾声:自己玩一玩




本文完

本作品采用 CC BY-NC-SA 4.0 许可协议

评论 (0)

支持 Markdown · Ctrl+Enter 发送
加载评论中...