You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++通过FFmpeg向MP4文件写入自定义元数据?

解决MP4文件写入自定义元数据的问题

你遇到的问题根源在于MP4格式的元数据有固定的标准字段映射规则:FFmpeg默认只会将title这类标准元数据字段写入到MP4对应的标准原子中(比如title对应MP4的©tit原子),而自定义字段直接用普通键名时,FFmpeg不会自动处理并写入到MP4文件结构里,导致Windows属性面板无法识别。

下面是两种可行的代码解决方案:

方案一:使用MP4专属自定义元数据格式

通过在自定义键名前添加mp4udta:前缀,告诉FFmpeg将该字段写入MP4的用户自定义数据(UDTA)原子中:

AVFormatContext *outContext;
// 注意键名前缀mp4udta:
av_dict_set(&outContext->metadata, "mp4udta:random", "Cloud Recording", 0);
avformat_write_header(outContext, nullptr);

方案二:写入XMP通用元数据

XMP是跨平台的通用元数据标准,Windows属性面板也能识别XMP中的自定义字段(需要FFmpeg编译时启用XMP支持,通常依赖libxml2)。只需在键名前添加xmp:前缀:

AVFormatContext *outContext;
// 键名前缀xmp:
av_dict_set(&outContext->metadata, "xmp:random", "Cloud Recording", 0);
avformat_write_header(outContext, nullptr);

验证方法

可以用FFmpeg的ffprobe工具验证元数据是否写入成功:

ffprobe -show_format -print_format json your_video.mp4

在输出的format.metadata节点中,应该能看到你添加的random字段(或带前缀的对应字段)。

另外,写入完成后可能需要刷新Windows资源管理器,或重新打开文件属性面板才能看到更新后的元数据。

内容的提问来源于stack exchange,提问作者Sourav Dey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:45:32