使用 FFMPEG 将 Live Photo 元数据写入视频

Luk*_*rns 5 metadata ffmpeg apple-live-photos

根据Apple Live Photo 文件格式,JPEG 和 MOV 需要写入三部分元数据才能被接受为实时照片。我可以使用 exiftool 和 ffmpeg 编写必要的内容标识符元数据。

\n

对于 JPEG:

\n
exiftool -TagsFromFile reference.jpeg -makernotes -ContentIdentifier image.jpeg\nexiftool -ContentIdentifier="$id" image.jpeg\n
Run Code Online (Sandbox Code Playgroud)\n

同样,ffmpeg 可用于写入具有匹配 id 的顶级 Quicktime 元数据。

\n

但是我在定时元数据方面遇到了麻烦:["com.apple.quicktime.still-image-time" : 0xFF]

\n

我什至无法使用 ffmpeg 生成现有实时照片 MOV 文件的副本,以保留必要的定时元数据。

\n
ffmpeg -i original.mov -map 0 -c copy -movflags use_metadata_tags copy.mov\n
Run Code Online (Sandbox Code Playgroud)\n

复制全局元数据(即 com.apple.quicktime.content.identifier),但丢失必要的静态图像时间,可以使用 exiftool 确认:

\n
> exiftool -G -U -ee original.mov | grep \'Still Image Time\'\n[QuickTime]     Still Image Time                : -1\n> exiftool -G -U -ee copy.mov | grep \'Still Image Time\'\n> \n
Run Code Online (Sandbox Code Playgroud)\n

如何使用 ffmpeg\xe2\x80\x94 特别是静态图像时间数据写入定时元数据?

\n

编辑:看起来这可能会发生,因为 ffmpeg 不知道如何处理mebx数据流上的标签:

\n
[mov @ 0x7fb232091400] Unknown hldr_type for mebx, writing dummy values\n
Run Code Online (Sandbox Code Playgroud)\n

而且 ffmpeg 似乎没有办法复制未知流。这似乎也是处理fdscGoPro 元数据流中的标签的问题(例如,请参阅https://gist.github.com/radimklaska/8974637522a751adb49db0de3be482c9#file-gopro_hevc_to_dnxhd-sh-L125),因此它经常被复制过来作为gpmd数据,这确保它不会被虚拟值覆盖,但此技巧在实时照片元数据的情况下不起作用mebx

\n

Tim*_*Tim 1

我也有同样的问题,我想用bento4工具应该可以。我之前用它来复制也存储在这个结构中的 GPS 元数据,它在这种情况下也应该工作,但是我对它的了解不够,无法让它工作。

似乎mebx数据存储在 中moov/trak/mdia/minf/stbl/stsd,但是我无法正确移植它。

例如,这不起作用并创建一个大的损坏文件:

# Get atom from original file
mp4extract moov/trak IMG_1337.MOV trak.atom

# insert into converted file
mp4edit --insert moov:trak.atom IMG_1337-converted.MOV IMG_1337-converted-metadata.MOV
Run Code Online (Sandbox Code Playgroud)

希望有人可以在此基础上继续发展。