OZ Blog

29 12月 2021

视频转码时保留元数据

最近有几个旧相机拍摄的视频需要转码,但转码后发现相机生产商、相机型号、视频创建日期等元数据丢失。这篇文章记录了一次用 exiftool 保留视频文件元数据的实践。

转码的需求主要来源是,我需要用 digikam 来管理照片和视频,而这些视频的编码格式不受软件支持。这些视频是用 PENTAX Optio H90 拍摄的,封装格式为 AVI。

保留元数据的目的是,我希望在 digikam 中能通过拍摄时间、相机型号对照片和视频排序。

注:下列 shell 环境主要为 Powershell。

1 源文件元数据分析

查看视频文件的元数据

exiftool -G1 -s -a

1.1 设备型号

1.2 拍摄时间

2 转换结果分析

使用 Adobe Media Encoder 转码后文件的元数据情况如下:

关于拍摄时间的问题,经过了解,一般认为,XMP-exif 不是标准元数据节,xmp-tiff 更为通用。

3 解决问题

目标很明确,要在主要应用程序中正确读取到上述数据。

3.1 增加设备型号元数据

经过测试,xmp-tiff 是设备型号数据常用的元数据节,可以被访达、digikam 读取。根据前面的分析,由于转码后设备型号被丢弃,这里需要对转码后的视频文件进行手动写入元数据。对同一批旧视频、器材一致的情况,需要写入的内容是固定的,比较好操作。

# 单个文件的处理 exiftool -Make='PENTAX' -Model='PENTAX Optio H90' IMGP0982.mp4
# 批量文件的处理,Winodws exiftool -Make='PENTAX' -Model='PENTAX Optio H90' mp4

上述命令实现的结果是,将 Make 和 Model 写入到目标文件 xmp-tiff 元数据节下。

3.2 复制拍摄时间元数据

经过测试,XMP-xmp、QuickTime 是拍摄时间数据常用的元数据节。根据前面的分析,由于拍摄时间未丢失,这里需要依据每一个目标文件的 XMP-exif:DateTimeOriginal 来更新 XMP-xmp、QuickTime 等元数据节中的时间标签。

# 单个文件的处理 exiftool "-AllDates<XMP-exif:DateTimeOriginal" IMGP0982.mp4
# 批量文件的处理,macOS exiftool "-AllDates<XMP-exif:DateTimeOriginal" mp4

执行后,目标文件的日期时间相关元数据标签被改写,包括:

至于 ModifyDate,我个人倾向于认为是媒体文件被修改的时间,例如截取、裁剪、信息修改等,虽然也被调整为拍摄时间,但拍摄时间比较重要,也就无所谓了。

参考

评论