文件导入成功后,你会看到三个标签页的状态发生了变化。如果遇到 H265 这类比较新的视频编码格式播放失败,也别慌,这并不会影响后续的转码操作,后续转码成功的 CONVERTED 视频会自动替换掉无法播放的 RAW 视频,其他情况下🎥标签仅显示 RAW 视频。🖼️标签在转码后会显示 compare slider,类似 Squoosh 的滑动控件,方便比对压缩前后的画质差异。实况控件每次切换都会刷新,且优先加载 CONVERTED 文件。
为了带来最原汁原味的体验,实况照片的显示我直接用了苹果官方的 LivePhotosKit JS。,用 CSS 也能实现类似的效果,而且优点多多,原理也不复杂,核心就是让原图淡出的同时,放大并淡入视频。
-qscale:v
来控制图片压缩质量,只需勾选 ✔️手动调参 即可。⚠️友情提示:不要修改参数中的输入输出文件名。点击下载按钮会展开一个下拉菜单,再次点击标题即可开始下载。旁边的 按钮可以让你修改文件名(不含扩展名),这个名字会同时用于下载和上传。按钮上方的 2x2 标签用于展示🖼️和🎥的文件大小和(预期)分辨率,箭头左边是 RAW,右边是 CONVERTED。转换完成后,右侧的→会变成醒目的绿色。
多线程开关右侧的三个按钮,分别对应于调整尺寸、🎬视频转码设置和🖼️图像转码设置。
曾经被这篇文章误导,以为 LivePhotosKit 对分辨率和格式有严格要求。实际上,它并不限制分辨率,也不强制要求 JPG 格式,但 H265 编码的视频确实播不了,哪怕浏览器本身支持。尽管如此,我还是为网页显示设置了友好的默认最大尺寸:🖼️1008 x 1344 和🎥720 x 960(保持宽高比)。你随时可以通过浮窗右上角的⟳按钮重置,或者点击⛶保持原始尺寸。
🎬视频设置项包括是否保留音频,设置转码格式(mp4, mov 和 webm)以及精确剪辑。把🎥进度条拖到你想要的位置,点击📸就能录入开始和结束时间戳。如果 RAW 视频无法播放,你可以手动输入时间,或者先转码再剪辑。此外,这里选择的转码格式也会影响云端转码后返回文件的扩展名(除非你在 API URL 里写死了)。
🖼️设置项包括转码格式(jpg,png 和 webp),目前没有提供输出质量之类的参数,实在有需求可以通过手动调参曲线救国。HEIC 质量系数只在导入 heic/heif 图片时起作用。截图功能可以让你从视频中轻松提取封面,默认会抓取你打开浮窗时🎥的播放进度。你可以选择从原始视频或转码后的视频中截取,或者只是修改时间戳数值,这个值会用于实况组件的 data-photo-time 属性,以及合成实况照片时 XMP 标签里的相关字段。
🚩接下来的模块都相对独立,点击模块标题可折叠/展开。
所以,如果你用的是 oppo 系手机,只需要切换到对应的 XMP meta 预设,就能导出正确的实况照片。 由于手头没有其他牌子手机,适配计划只能暂时搁置了。不过去线下体验店试了下,小米、荣耀在小红书上导出实况都只是分开的两个文件,那我估计就更难搞了🤔。最近 ColorOS 更新了一个视频🎥的功能,但最多只允许 3 秒,而 MLPW 导出的实况没有时长限制😎。
如果导入的是一张实况照片,MLPW 默认提取内嵌的 XMP 字段到输入框,如果提取失败,则会显示当前选中的预设值。点击右上角的可以清空输入框,点击⟳则能一键恢复到图片加载时的初始 XMP 数据。
Authorization: Basic btoa(USERNAME:PASSWORD)
和 Content-Type: application/xml
。点击右上角的💾可以保存当前的服务器配置(JSON 格式),保存后会出现在 API URL 的下拉菜单中。旁边的⿻按钮则用于配置的导入和导出。如果你剪贴板里有有效的配置,它会直接帮你写入 local storage 或询问是否覆盖;如果没有,它会主动把当前配置复制到剪贴板,方便你在不同设备间迁移配置。目前,我已经成功测试了📌Junze 大佬的 Dooong 公益图床、📌R2 Uploader 以及📌一个PHP 脚本。理论上,只要是常规的 RESTFul API 都能兼容。在 API URL 中,你可以用
{filename}
来代表文件名,在请求体中用{File}
来代表上传的文件本身。最大的挑战还是跨域问题,一个可行的方案是将其编译成本地 App,或者借助 CORS 转发服务器🖧来解决。
为了方便使用上传好的文件链接,下拉菜单里也安排了一键复制文件名的按钮✌。
云转换️️☁️的本质是利用 GET 请求来访问那些基于 URL 的转码服务。📌知名的公益服务WebP Cloud Services和Cloudflare Image都提供了一定的免费额度。每个免费账户每月能进行 5000 次免费转换,使用起来非常简单:
https://image.yourdomain.com/raw.jpg
。https://image.yourdomain.com/cdn-cgi/image/format=webp,quality=75,fit=scale-down/raw.jpg
。为了能明确指定转换后的格式,最终填入 API URL 的格式应该是这样的: https://image.yourdomain.com/cdn-cgi/image/format={webp},quality=75,fit=scale-down/{filename}
。其中{filename}
会被替换为 RAW 文件名,而{webp}
则会作为云转换后文件的后缀。
经过一个多月的学习和打磨,MLPW 在我看来已经达到可用的程度,所以写了这篇文章,分享并记录。当然,它还缺少 OPPO 以外机型的兼容性测试📱,也可能存在一些隐藏在特殊场景下的 bug🐞。目前,我用得最多的功能就是分离并压缩手机拍的实况照片,然后上传到博客当图床。未来,我最想加入的功能就是裁切,实现类似网页版 𝕏 那种酷炫的媒体编辑效果。