• 问题不大

    佬友们,请问有没有了解OPPO的Live Photo是怎么实现的?或者说OPPO是通过什么来保存Live Photo的视频信息的?

    需求: 探讨通过immich实现Live Photo在iOS和Android之间互通的可能性

    背景:

    - 最近主力机从iPhone转移到一加13,弄了个immich作为图片存储服务;

    - iPhone的Live Photo很明确就是图片+视频(HEIC+MOV)的形式,在immich server里也是这么体现的。

    - 可以使用《O+互联》将iPhone的Live Photo转移到一加,仍然是Live Photo,但是格式会变为jpg,jpg还能保存视频信息?

    - 一加的Live Photo竟然只有一张jpg图片?跟iPhone类似,从immich拉回一加的仍然是Live Photo(仅限由一加拍的Live Photo)

    图片

    图片

    主楼
  • zen

    用 file 命令看看那个文件 实际上到底是什么

    #1
  • bigjb

    图片隐写?看一下二级制

    #2
  • Douglas·Lee

    本质上是谷歌的技术,去搜索一下MVIMG (Android JPG Motion Picture)

    基本上就是利用exif信息记录xml数据,其中关键信息是视频的偏移量(Micro Video Offset),根据这个数据读取字节,就能获得一段视频。

    存储结构类似于夹心饼干

    下面引用一些可以参考的资料:

    https://medium.com/android-news/working-with-motion-photos-da0aa49b50c

    #3
  • 问题不大

    考虑过隐写,但我怀疑他们能用这种方式?等有空看看。我心思着隐写这不是之前搞ctf用的么

    #4
  • 问题不大

    专业,学到了。谢谢佬,我去学习学习。

    那这么看来,如果Android不支持heic+mov的话,是不可能实现通过immich无缝实现双平台互通了

    #5
  • Douglas·Lee

    BTW,如果你有需要的话,我之前写了个从这种照片中提取出视频的脚本```
    #!/bin/bash
    set -e
    function extract {
    local file="$1"
    local newFile="${file/%.jpg/.mp4}"
    if [[ -f "$newFile" ]]; then
    echo "File $newFile exists, so ignoring$file"
    else
    local offset_hex=$(strings -t x "$file" | grep 'ftypmp42' | cut -d ' ' -f 1)
    local offset=$(( 16#$offset_hex ))
    if [[ -n "$offset" ]]; then
    offset=$(( offset - 4 ))
    dd if="$file" of="$newFile" bs=1 skip="$offset" 2>/dev/null
    else
    echo "Not processing $file because the string 'ftypmp42' did not occur exactly once in file"
    fi
    fi
    }
    for f in "$@"; do
    if [[ "$f" == MVIMG*jpg ]]; then
    extract "$f"
    else
    echo "Ignoring $f because its file name does not match MVIMG*jpg pattern"
    fi
    done

    #6
  • 问题不大

    #快问快答添加

    #7
  • 问题不大

    非常感谢 ^-^

    #8
  • bigjb

    我怎么感觉这个就是图片隐写的一种应用啊

    #9
  • Douglas·Lee

    如果Android不支持heic+mov的话,是不可能实现通过immich无缝实现双平台互通了

    关于iOS与安卓针对Live Photos互通一直是个难点,希望老哥研究有成果给大家通报下

    #10
  • Douglas·Lee

    确实算是一种隐写

    #11
  • 问题不大

    OPPO的解决方案应该是魔改了谷歌的那一套,EXIF信息里没有关键字,文件里也搜不到“ftypmp42”关键字,所以那个脚本行不通。

    不过在EXIF里有一些关键字段,等有时间的时候我再琢磨琢磨

    图片

    #12
  • Douglas·Lee

    方便的话可以发一张原图我也测试一下嘛。

    #13
  • 问题不大

    MD5 (IMG20241105200249.jpg) = 2ba27343db17d6b20c0c58db598d4061

    https://www.123865.com/s/wThDVv-iHnc3?提取码:NVgv

    #14
  • xico

    看 EXIF 实在琢磨不出来偏移量,直接查文件标识就找到了。

    图片

    图片

    #15
  • 问题不大

    cool!

    奇怪,我查的时候 我没搜到ftypmp42,shell脚本也没识别出来这个串,那看来还是MVIMG

    #16
  • 橘子Jun

    其实就是Google的Motion Photo Format

    图片

    Android Developers

    图片

    动态照片格式 1.0  |  Android media  |  Android Developers

    OPPO在这个基础上添加了点内容(谷歌拍出来的OPPO相册不识别,但是谷歌相册可以识别OPPO的)

    我搞了个网页版动态照片解析,可以试试看

    motion-photo-parser.site.0to1.cf

    动态照片解析

    #17
  • 橘子Jun

    域名到期了,如果还有需求的话可以使用 https://motion-photo-parser.netlify.app

    #18

发表回复

登录后回复