ffmpeg - 使用 FFMPEG 将 Live Photo 元数据写入视频
问题描述
根据Apple Live Photo 文件格式,需要写入三段元数据才能使 JPEG 和 MOV 被接受为 Live Photo。我可以使用 exiftool 和 ffmpeg 来编写必要的内容标识符元数据。
对于 JPEG:
exiftool -TagsFromFile reference.jpeg -makernotes -ContentIdentifier image.jpeg
exiftool -ContentIdentifier="$id" image.jpeg
同样,ffmpeg 可用于编写具有匹配 id 的顶级 Quicktime 元数据。
但是我在使用定时元数据时遇到了问题:["com.apple.quicktime.still-image-time" : 0xFF]
.
我什至无法使用保留必要的定时元数据的 ffmpeg 生成现有实时照片 MOV 文件的副本。
ffmpeg -i original.mov -map 0 -c copy -movflags use_metadata_tags copy.mov
复制全局元数据(即 com.apple.quicktime.content.identifier),但丢失了可以使用 exiftool 确认的必要静止图像时间:
> exiftool -G -U -ee original.mov | grep 'Still Image Time'
[QuickTime] Still Image Time : -1
> exiftool -G -U -ee copy.mov | grep 'Still Image Time'
>
如何使用 ffmpeg 编写定时元数据——特别是静止图像时间数据?
编辑:看起来这可能正在发生,因为 ffmpeg 不知道如何处理mebx
数据流上的标签:
[mov @ 0x7fb232091400] Unknown hldr_type for mebx, writing dummy values
而且 ffmpeg 似乎没有办法复制未知流。这似乎也是处理fdsc
GoPro 元数据流中的标签的问题(例如,参见https://gist.github.com/radimklaska/8974637522a751adb49db0de3be482c9#file-gopro_hevc_to_dnxhd-sh-L125),因此它经常被复制为gpmd
数据,这确保了它不会被虚拟值覆盖,但这个技巧在实时照片mebx
元数据的情况下不起作用。
解决方案
我有同样的问题,我认为使用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
希望有人可以以此为基础。
推荐阅读
- javascript - MapStrateToProps 不使用 redux 连接到本地存储并做出反应
- c++ - 特定基类的抽象类的C++向量,作为另一个类成员
- django - 根据Django中的其他字段修改表单字段
- c# - 调用将在原始线程完成时在后台运行的方法
- amazon-web-services - Beanstalk rebuild app servers only and without affecting RDS
- javascript - JavaScript - 将对象推入数组失败
- html - 当一张卡片获得更多内容时,引导卡片不会调整高度
- postgresql - 如何在 Postgres 中创建任意记录排名?
- javascript - 如何查找数组中的任何元素是否与 JavaScript 中的 2、3 和 5 不同?
- amazon-web-services - 在 Lambda 函数中获取 Cognito 用户属性