MP4转码时如何保留相机厂商MakerNotes元数据
问题:转码H.264到H.265时完整保留松下相机MP4的所有元数据
背景
我用松下DC-TZ202相机录制了一段MP4视频,通过ffprobe original.MP4确认它包含H.264视频流和AAC音频流(详情见文末[1])。我需要把视频转码为H.265,同时完整保留所有元数据,包括厂商专属的自定义元数据。
尝试的FFmpeg命令
我先尝试了这条FFmpeg命令,试图兼顾转码和元数据保留:
ffmpeg -y -i original.MP4 \ -c:v libx265 -tag:v hvc1 \ -c:a aac \ -movflags use_metadata_tags \ -map_metadata:s:0 0:s:0 \ -brand mp42 \ h265.MP4
这条命令的设计目标:
- 用
use_metadata_tags保留自定义(厂商专属)元数据结构 - 将输入第一个流的元数据映射到输出第一个流
- 自动映射全局元数据到输出
- 用
brand mp42确保输出为MP4 v2格式(和输入文件一致)
问题:元数据大量丢失
通过以下diff命令对比输入输出的元数据,发现大量元数据没有被保留,包括Exif信息、松下专属传感器数据、XML元数据等:
diff -u <(exiftool -args -g1 original.MP4) <(exiftool -args -g1 h265.MP4)
差异片段(注:第一个减号来自diff -u,第二个减号来自exiftool -args):
[...]--ExifIFD:ColorSpace=sRGB --ExifIFD:ComponentsConfiguration=Y, Cb, Cr, - [...] -File:FileType=MP4 -File:MIMEType=video/mp4 --IFD0:Make=Panasonic --IFD0:Model=DC-TZ202 --IFD0:ModifyDate=2026:02:01 09:42:59 [...]--IFD1:ThumbnailOffset=8172 --InteropIFD:InteropIndex=R98 - DCF basic file (sRGB) --InteropIFD:InteropVersion=0100 --Panasonic:AccelerometerX=2 --Panasonic:AccelerometerY=20 [...]--XML:ClipMainClipContentClipMetadataAccessCreationDate=2026:02:01 09:42:59+02:00 --XML:ClipMainClipContentClipMetadataAccessLastUpdateDate=2026:02:01 09:42:59+02:00 --XML:ClipMainClipContentClipMetadataDeviceManufacturer=Panasonic --XML:ClipMainClipContentClipMetadataDeviceModelName=DC-TZ202 --XML:ClipMainClipContentClipMetadataRating=0 [...]
后续尝试的补救方法
- 用ExifTool批量复制标签
尝试用这条命令复制所有元数据,但仅部分标签被更新,多数厂商专属标签仍缺失:
exiftool -tagsfromfile original.MP4 -all:all -overwrite_original h265.MP4
- 手动设置单个标签
尝试手动写入松下专属标签,但ExifTool提示仅在标签存在时才写入,无法创建新的厂商专属标签块:
exiftool -v3 -Panasonic:AccelerometerX=2 -overwrite_original h265.MP4
命令输出:
Writing Panasonic:AccelerometerX if tag exists ======== h265.MP4 Rewriting h265.MP4... FileType = MP4 FileTypeExtension = MP4 MIMEType = video/mp4 Editing tags in: MakerNotes Creating tags in: Rewriting Movie Rewriting MovieHeader [nothing changed in MovieHeader] Rewriting Track Rewriting TrackHeader [nothing changed in TrackHeader]
核心疑问
容器格式都是MP4,仅视频编码从H.264换成H.265,理论上应该能完整还原所有元数据块。请问如何才能在输出MP4中完整保留输入文件的所有元数据?
[1] 输入文件的ffprobe信息
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.MP4': Metadata: major_brand : mp42 minor_version : 1 compatible_brands: mp42avc1 creation_time : 2026-02-01T09:42:59.000000Z Duration: 00:00:02.40, start: 0.000000, bitrate: 19952 kb/s Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 18952 kb/s, 25 fps, 25 tbr, 90k tbn (default) Metadata: creation_time : 2026-02-01T09:42:59.000000Z vendor_id : [0][0][0][0] Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 122 kb/s (default) Metadata: creation_time : 2026-02-01T09:42:59.000000Z vendor_id : [0][0][0][0]
内容的提问来源于stack exchange,提问作者akraf
相关产品推荐
相关产品推荐

