如何为AVI格式文件添加自定义标签(macOS环境)
解决AVI非标准自定义标签添加问题的思路
首先得先搞清楚原视频里的自定义标签到底是什么结构——AVI属于RIFF容器格式,非标准标签一般是自定义四字符码的INFO块子项,或者是单独的RIFF chunk。先做第一步:
- 解析原视频的元数据结构:
用ffmpeg -i original.avi -dump命令输出详细的RIFF结构,或者用mediainfo --fullscan original.avi查看完整元数据,找到目标自定义标签的四字符码(比如CUST这类4个字符的标识)、对应的值,以及它在RIFF结构里的位置(比如是否在INFOLIST块下)。
接下来根据结构选择对应方法:
方法一:用Python直接操作RIFF结构(最灵活)
PyAV是高层封装,没法直接操作底层RIFF chunk,换用专门的RIFF处理库,比如riffio:
- 安装
riffio:pip install riffio - 编写脚本打开目标AVI文件,定位到
INFOLIST块(或者对应的chunk容器) - 添加自定义四字符码的chunk,注意值的长度要对齐到偶数(奇数长度补个空字节),示例代码:
import riffio with riffio.open("target.avi", "r+b") as f: # 定位到INFO LIST块 info_list = f.find_list("INFO") if info_list: # 自定义标签四字符码为MYTAG,值为"my custom content" value = "my custom content".encode("utf-8") # 对齐字节数到偶数 if len(value) % 2 != 0: value += b"\x00" info_list.write_chunk("MYTAG", value)
方法二:二进制编辑器手动修改(适合单个文件)
用macOS上的Hex Fiend打开原视频和目标视频,找到原视频里自定义标签的二进制段,复制后粘贴到目标视频的对应位置(比如INFO LIST块的末尾),注意要调整对应LIST块的大小数值——RIFF结构里LIST的大小字段是内部所有chunk的总字节数,需要重新计算并修改。
方法三:修改FFmpeg源码编译(适合批量处理)
如果需要批量处理,可修改FFmpeg的AVI muxer代码:
- 找到FFmpeg源码里的
libavformat/avienc.c文件 - 在
avi_write_info函数里添加自定义标签的写入逻辑,模仿标准TITLE标签的写法,加入你的四字符码和对应值 - 重新编译FFmpeg,之后用编译后的版本就能直接写入自定义标签
关键注意事项
- 自定义标签必须是四字符码(4个ASCII字符),这是RIFF格式的硬性要求
- 标签值的字节数必须是偶数,奇数长度要补空字节对齐
- 必须把标签放在正确的RIFF块下,通常是
INFOLIST块内,否则特定软件可能无法识别
内容的提问来源于stack exchange,提问作者Yarden
相关产品推荐
相关产品推荐

