如何检测 AI 生成视频?容器元数据、SEI marker 与帧水印逐层排查
判断一段视频是不是 AI 生成的,光盯着画面看不出名堂——Sora、可灵、Veo 这代模型的画面质量已经过了"一眼假"的阶段。真正有效的入手点在文件内部:视频文件从容器到码流有好几层可以藏来源信息的地方,生成平台或主动或被监管要求地在里面留了痕迹。这篇按从外到内的顺序,把每一层怎么查讲清楚。
第零步:搞到原始文件,这一步决定一切
先理解转码对证据的破坏有多彻底。你把视频发到社交平台,平台会用自己的编码器重新压制一遍:码流换成平台的 H.264/H.265 参数,容器重新封装,encoder 字段变成平台转码集群的标识,原文件的工具字段、AIGC 标签、C2PA 全部消失。录屏更不用说——那是对着屏幕重新生成了一个无关的新文件。
所以最理想的检测样本是从生成平台直接下载、没经过任何转手的 MP4/MOV。微信里转出来的、抖音上保存的,能查到东西的概率会低得多(不是零——帧水印有时还在,后面会说)。
第一层:容器元数据(moov → udta → meta → ilst)
MP4/MOV 的元数据放在 box 树的 ilst 列表里,有两种键:iTunes 风格的四字符键(©too 编码工具、©swr 软件)和 keys box 配套的字符串键(encoder、tool、software)。检查这几个键的值是否命中已知 AI 工具名。一个实际例子:部分 Veo 导出的视频,©too 的值就是一个单词 "Google"——平平无奇,但正常相机和剪辑软件不会这么写。
国产平台的 AIGC 隐式标识
这层有个中国特色的可靠线索。《人工智能生成合成内容标识办法》(2025 年 9 月 1 日起施行)要求生成平台在文件中加入显式和隐式标识,隐式标识落到 MP4 上,就是 ilst 里一个键名为 AIGC 的条目,值是 JSON:
{"Label":"1","ProduceID":"...","ContentProducer":"001191330106MA2CFLDG4R10001"} Label 为 "1" 即声明 AI 生成;ContentProducer 是生产者注册编码,可以反查平台——上面这串编码对应通义万相(Wan)。这套机制让合规的国产平台视频反而比海外平台更好溯源。
第二层:码流里的 SEI marker
再往里一层是视频码流本身。H.264/H.265 允许在码流中插入 SEI(补充增强信息)单元,部分平台在里面留了 ASCII 工具标记。对 mdat box 的前 1MB 做字节扫描,可能找到这些字符串:kling-ai、sora、runway、pika-labs、luma-ai、hailuo、pixverse、vidu-ai、genmo、haiper。
SEI 的价值在于它的位置:嵌在码流里而不是容器里。"重新封装但不重新编码"的操作(比如用 ffmpeg -c copy 把 MP4 转成 MOV)会换掉全部容器元数据,但 SEI 原封不动。当然,真转码(重新编码)还是会把它抹掉。
第三层:C2PA / Content Credentials
Sora 等平台的部分导出带 C2PA manifest(JUMBF 容器,存放在 MP4 的 uuid box 中,一般在文件头部区域)。浏览器版的做法是扫描文件前 2MB,找 c2pa、digitalSourceType、claim_generator、contentauth 这些特征文本,再对命中区域做工具名匹配和来源类型判断:trainedAlgorithmicMedia 记高置信度。注意这是快速扫描而非签名验证,区别在 C2PA 文章里有完整说明。
第四层:文件名和帧水印
文件名是最弱的信号——谁都能改——但默认下载名确实带信息,作为辅助线索记低置信度。
容器和码流都没命中时,最后一招是看画面本身的水印,分两种:
- 可见角标:《标识办法》的显式标识要求,落地形式是画面角落的"AI 生成"半透明文字。国内平台基本统一放在左上或右下角。检测方法是对角部区域做亮度分析:找比周围明显亮的短笔画游程、检查它们是否聚成紧凑的文字状区块、亮度分布是否双峰。多个指标同时命中才报,避免把普通台标误判成 AI 标识。
- 隐形水印:嵌在像素里的不可见信号。检测思路是对抽样帧做 Haar 小波变换,在低频子带里找量化嵌入的痕迹——RGB 三通道噪声水平的异常不对称、跨通道提取比特的异常一致性等指标,至少两项同时命中才报告。这类分析给出的是"存在水印状统计异常"的概率判断,置信度天然低于元数据命中,结果要谨慎解读。
抽帧依赖 ffmpeg.wasm,页面采取懒加载:只有元数据层全部落空、确实需要看帧时才下载和初始化它,所以多数检测在元数据层就结束了,很快。
结果怎么读
- C2PA 命中或容器里有明确工具名/AIGC 标签:强线索。结合是不是原始文件判断,基本可以下结论。
- 只有文件名或低置信度水印指标:辅助线索,单独不构成结论,要结合视频来源和上下文。
- 什么都没有:最常见也最容易误读的结果。它只说明这份文件里没有可读信号——可能是真拍的,也可能是被转码洗干净的 AI 视频。这时候去找更接近源头的版本,比换十个检测工具都有用。
有原始视频文件的话,拖进来逐层扫一遍,全程本地处理
开始检测 →常见问题
AI 生成视频一定能检测出来吗?
不能保证。检测依赖原始文件里保留的 C2PA、容器元数据、SEI marker、文件名或帧水印。经过社交平台转码、录屏、剪辑软件重新导出后,容器层信号基本会被洗掉;SEI 和帧水印能多扛一些处理,但也不是不可摧毁。
为什么一定要拿原始视频文件?
因为转码是毁灭性的。社交平台收到视频后会用自己的编码器重新压制:新的码流、新的容器、新的 encoder 字段,原文件的 ©too、AIGC 标签、C2PA 全部被替换或丢弃。从生成平台直接下载的文件和从微信里转出来的文件,可检测性是两个世界。
检测时视频会上传到服务器吗?
不会。文件在浏览器本地读取:容器和码流扫描直接在内存里做,需要抽帧时才懒加载 ffmpeg.wasm,在本机解码几帧做水印分析。整个过程没有任何字节离开你的电脑。
什么是 SEI marker?为什么它比容器元数据更难洗掉?
SEI(Supplemental Enhancement Information)是 H.264/H.265 码流内部的附加信息单元,部分平台在里面写入了工具标识(如 kling-ai、pika-labs)。它嵌在视频码流里而不是容器里,所以只换容器不重新编码的操作(如 MP4 转 MOV)动不了它;但重新编码会把它彻底抹掉。
浏览器版的 C2PA 检测和完整验证一样吗?
不一样。浏览器版扫描容器中的 C2PA/JUMBF 来源文本(digitalSourceType、claim_generator 等)并匹配已知工具,不校验签名链和证书链。它回答'有没有 AI 来源声明',不出具'记录可信且未被篡改'的结论,后者请用 c2patool 做完整验证。