视频理解为什么难

图像理解已经够难了,视频理解更难——视频是时间序列,有动态变化、有上下文依赖、有镜头切换。一个 10 分钟的视频有 18000 帧(按 30fps),你不可能每一帧都过一遍模型。视频理解的核心问题是:怎么从海量帧里提取出有意义的信息,又不至于成本爆炸。

多模态大模型把这个问题往前推了一步——它能同时理解图像、文本、语音。把视频按间隔抽帧,加上语音转写的文本,一起喂给多模态模型,就能做视频问答、视频摘要、视频检索。这就是当前视频理解应用的主流技术路线。

视频理解不是「看每一帧」,而是「看关键帧加听语音」。抓住时间线上的关键变化,比逐帧分析高效得多。
本文核心知识点
  • 视频结构化把视频拆解成镜头、关键帧、场景标签的结构化数据。
  • 抽帧策略按时间间隔或镜头切换点抽取关键帧,控制计算量。
  • 多模态 Embedding把视频帧和文本映射到同一向量空间,支持跨模态检索。
  • 视频检索用自然语言搜视频片段,基于多模态语义匹配。
视频理解配图:中央胶片放映机射出光束,下方抽出帧缩略图,右侧搜索框图标,蓝色渐变扁平风格
视频结构化的示意:从胶片中抽出关键帧,流向检索入口。

视频结构化的基本流程

视频结构化分三步:先做镜头检测,把视频切成一个个镜头片段;然后在每个镜头里选关键帧;最后对关键帧做内容识别(物体、场景、动作)。这样视频就从一个不可读的流,变成了带标签的结构化数据。

# 视频结构化管线
# 1. 镜头检测:检测画面切换点,切分成镜头
# 2. 关键帧抽取:每个镜头选 1-3 帧代表整个镜头
# 3. 内容识别:对关键帧做物体检测、场景分类、OCR
# 4. 语音转写:提取音频轨,转成文字
# 5. 结构化输出:
#    {
#      "video_id": "xxx",
#      "shots": [
#        {"start": 0.0, "end": 3.2, "keyframe": "frame_001.jpg", "tags": ["室内","人物"]},
#        {"start": 3.2, "end": 8.5, "keyframe": "frame_002.jpg", "tags": ["产品","特写"]}
#      ],
#      "transcript": "语音转写的完整文字"
#    }

抽帧策略:不是每帧都要看

抽帧太密,成本高、冗余多;抽帧太疏,漏掉关键变化。常见做法是按固定间隔抽(每秒 1-2 帧),再加上镜头切换点多抽几帧。对于短视频内容审核这种场景,间隔可以大一点;对于动作识别这种精细场景,间隔要小。

多模态 Embedding

多模态 Embedding 是让图像和文字映射到同一个向量空间。你输入一张图,它输出一个向量;你输入一句话,它也输出一个向量。两个向量距离近,就说明图和语义相关。这是多模态检索的基础。

模态输入输出
图像视频关键帧视觉向量
文本用户搜索词文本向量
语音视频语音转写文本向量

多模态检索:用文字搜视频

有了多模态 Embedding,你就能做「用文字搜视频」:用户输入「猫在沙发上睡觉」,系统把这句话转成向量,去和所有视频关键帧的向量做相似度匹配,返回最相关的视频片段。这比传统的关键词搜索强太多——传统搜索搜不到画面内容,只能靠标题和标签。

# 多模态视频检索流程
# 1. 离线:对所有视频抽帧,每帧做多模态 Embedding,存入向量库
# 2. 在线:用户输入查询词,做多模态 Embedding
# 3. 在向量库中找最近邻,返回对应的视频片段时间戳
# 4. 用户点击结果,直接跳到视频对应位置