功能特性

動態照片解析

動態照片無水印解析與跨平台兼容

插件支持解析動態照片(Motion Photo / Live Photo),並能夠無水印提取封面圖片同視頻,生成跨平台兼容嘅動態照片文件。

平台兼容性

平台存儲方式插件支持說明
Google / Pixel單文件(JPEG + MP4)標準 Motion Photo 格式
小米 HyperOS單文件(JPEG + MP4)兼容 Google 標準 + 小米擴展
OPPO ColorOS單文件(JPEG + MP4)兼容 Google 標準 + OPPO 擴展
華為/榮耀單文件(JPEG + 標記)⚠️理論支持,未經實測驗證
iPhone雙文件(HEIC + MOV)獨立存儲,無法合成單文件
vivo OriginOS雙文件(JPG + MP4)獨立存儲,無法合成單文件

解析後嘅動態照片保存到相冊時,可被支持 Google Motion Photo 標準嘅設備同應用(如 Google Photos、部分原生相冊)正確識別並播放。

使用方式

動態照片解析係自動觸發嘅,無需額外操作:

  1. 當解析到包含動態照片嘅作品/動態時
  2. 插件會自動提取封面圖片同視頻
  3. 根據配置嘅兼容模式生成動態照片文件
  4. 喺合併轉發消息中發送

動態照片會以獨立文件嘅形式出現喺合併轉發消息中,保存到相冊後即可喺支持嘅設備上播放。

重要提示:必須保存原圖先可以被設備正確識別為動態照片。如果保存壓縮圖,會丟失視頻數據,只能睇到靜態圖片。

配置選項

插件提供咗 livePhotoSystem 配置項,用於指定生成嘅動態照片兼容系統。

配置方式

喺配置文件 config/app.yaml 中修改:

# 當解析到作品/動態包含動態照片時,合併轉發消息里發送嘅動態照片靜態圖兼容系統
# 可選值:'google'、'xiaomi'、'oppo'、'huawei_honor'
livePhotoSystem: google

可選值說明

說明推薦場景
googleGoogle Photos 標準格式默認選項,兼容性最廣
xiaomi小米 HyperOS 優化格式主要使用小米設備嘅群傾偈
oppoOPPO ColorOS 優化格式主要使用 OPPO 設備嘅群傾偈
huawei_honor華為/榮耀格式主要使用華為/榮耀設備嘅群傾偈

如果唔確定選擇邊個,建議使用默認嘅 google 模式,佢具有最好嘅跨平台兼容性。


實現原理

文件結構

動態照片本質上係將視頻數據附加到 JPEG 圖片文件末尾,並喺 JPEG 嘅 XMP 元數據中記錄視頻嘅位置同長度信息。

┌─────────────────────────────┐
│   JPEG 圖片數據              │
│   (SOI 0xFFD8 開始)         │
├─────────────────────────────┤
│   XMP 元數據 (APP1 段)       │
│   - MotionPhoto 標記         │
│   - 視頻長度                 │
│   - 時間戳                   │
├─────────────────────────────┤
│   MP4 視頻數據               │
│   (完整嘅 MP4 文件)          │
└─────────────────────────────┘

關鍵技術

1. XMP 元數據注入

插件使用 XMP(Extensible Metadata Platform)標準喺 JPEG 嘅 APP1 段中寫入 Motion Photo 元數據:

<x:xmpmeta xmlns:x="adobe:ns:meta/">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description
      xmlns:GCamera="http://ns.google.com/photos/1.0/camera/"
      xmlns:Container="http://ns.google.com/photos/1.0/container/"
      GCamera:MotionPhoto="1"
      GCamera:MotionPhotoVersion="1"
      GCamera:MotionPhotoPresentationTimestampUs="0">
      <Container:Directory>
        <rdf:Seq>
          <rdf:li>
            <Container:Item
              Item:Mime="image/jpeg"
              Item:Semantic="Primary"
              Item:Length="0" />
          </rdf:li>
          <rdf:li>
            <Container:Item
              Item:Mime="video/mp4"
              Item:Semantic="MotionPhoto"
              Item:Length="視頻字節數" />
          </rdf:li>
        </rdf:Seq>
      </Container:Directory>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>

2. EXIF 信息補全

部分廠商(如小米、OPPO)要求 JPEG 必須包含特定嘅 EXIF 信息先可以正確識別。插件會自動檢測並補全必要嘅 EXIF 段:

  • 圖片寬度同高度
  • 廠商特定標記(如 OPPO 嘅 OpCamera:MotionPhotoOwner

3. 廠商適配

唔同廠商對 Motion Photo 嘅實現略有差異,插件提供咗四種兼容模式:

4. 圖片格式轉換

如果原始封面唔係 JPEG 格式(如 PNG、WebP),插件會自動使用 FFmpeg 轉換為 JPEG:

ffmpeg -i input.png -frames:v 1 -q:v 2 output.jpg

技術參考

插件嘅動態照片實現參考咗以下開源項目同技術文檔:


常見問題

Last updated on

On this page