← 博客 源码对比 Code Agent 是如何处理视频的 白话成稿 Codex · Claude · Pi · Grok

Code Agent 是如何处理视频的

Codex · Claude Code · Pi · Grok Build 源码对比 · 2026-08-04
写法:先结论,再分三块白话展开,最后回答「没能力为什么还能做好」

Code Agent 是如何处理视频的 交给 Codex 一段视频 · 它不会直接把 mp4 给模型看 · 任务却仍可能做完 Codex Pi Claude Grok 结论:四家都不会「直接看视频」 差在:格式允不允许 · 读文件时怎么挡 · 有没有生成/播放把场面做大 第一块 · 最重要 发给模型的数据 只有文字和图片 没有「视频」这种内容 门在格式上就锁了 四家答案一样:没有 第二块 · 日常体感 去读 mp4 时 Claude:直接报错 Codex:官方不看,可换路 Pi / Grok:不当图处理 都不会自动截帧给模型 第三块 · 容易误会 生成 / 播放 Grok 能产片、能播放 播放 ≠ 模型看过 理解仍要截帧再看图 三件事必须分开说 那 Codex 任务是靠什么做好的? 靠「不看视频也能完成」的办法,不是靠看懂了 mp4 例如:活本来就不用看画面 · 终端截帧再当图 · 你已经说明了内容
  1. 0 · 一个念头
  2. 1 · 先说结论
  3. 2 · 发给模型的数据里有没有视频
  4. 3 · 去读 mp4 时会发生什么
  5. 4 · 生成、播放会不会冒充理解
  6. 5 · 任务是靠什么做好的
  7. 6 · 其它细节往哪搁
  8. 7 · 自己做产品时怎么定
  9. 附录 · 四家流程

0 · 一个念头

我有一个很具体的念头。

我把一段视频交给 Codex。按现在的宣传,coding agent 好像都很「多模态」。可顺着代码往下挖会发现:Codex 允许用户提交的类型里,根本没有「视频」;能拿去「看」的,到本地图片就停了。

即便如此,很多时候任务仍然能推进得不错。

这就怪了:它到底在干什么?是偷偷会看视频,还是从来就没靠「看懂画面」在干活?如果是后者,我们把「做得好」和「会看视频」绑在一起——绑错了。

于是我对照了 Codex、Claude Code、Pi、Grok Build 的源码。结论有点反直觉。

1 · 先说结论

四家都不会「直接把 mp4 交给模型看」。

处理方式确实不一样——但差不在「谁更能看片」,而在:
① 发给模型的数据格式里有没有视频;
② 读一个 mp4 时是骂你、装死、还是当普通文件;
③ 产品上有没有生成/播放,让人误以为它会分析。

一句话:Code Agent 并不会「看视频」。真正能进模型「眼睛」的,一直是文字 + 图片。「把视频交给 agent 还能做好」——多半靠别的办法做完,不是软件把整段 mp4 塞进了多模态接口。

顺序白话名字在问什么为什么重要
第一块发给模型的数据请求里能不能带「视频」?这里没有,后面补不回来
第二块去读文件时对 .mp4 点读取,怎么反应?决定日常体感
第三块产品还提供了什么会不会生成、播放?和理解混没混?决定会不会被宣传带偏
问题结论(判定)补充
Codex 会不会原生处理视频? 不会 用户输入类型里没有视频
任务是靠什么做好的? 靠「不看视频也能完成」的办法 例如:活本来就不用看画面;终端截帧再当图;你已经说明了内容/给了字幕;只改旁边的文本配置。不是模型看懂了 mp4。具体哪一种,要看那一次对话记录
四家大不相同吗? 是,差在挡法和热闹程度 相同:都不会直接把视频交给模型。不同:拒绝响不响、有没有生成/播放
Grok 会不会看视频? 分析画面:不会 能生成、能播放;播放用的帧不会自动算「模型看过」

2 · 第一块:发给模型的数据里有没有「视频」?

用白话讲

判断 agent「能不能看 X」,第一刀不是看官网广告,而是看:它发给大模型的那包数据里,允许出现哪些内容。如果只允许文字和图片,就没有正规路径把「一整段 mp4」直接塞给模型——除非先截成图。

四家在这一层的答案一样:没有「视频」这种内容类型。

2.1 Codex

用户能提交的类型是固定列表:文字、图片(含本地图片路径)、Skill、Mention 等。没有「本地视频」。实时相关配置里也是不接收视频的。

要点
能提交:文字、图片、本地图片路径…
不能提交:视频路径 / 视频内容块
官方能「看」的入口:只有图

2.2 Pi

协议里用户内容只有:文字、图片。提问时可选「带一组图片」,没有「带一组视频」。会话树、分支摘要是另一套能力,改不了「模型只收字和图」。

2.3 Claude Code

「读文件」返回类型大致是:文字、图片、笔记本、PDF。图片只认常见静图格式。依赖库里若出现 Video 名字,是别人 SDK 的类型,不是主流程在发「视频内容块」。

2.4 Grok Build

对话内容块只有文字和图片。代码里和视频地址相关的,主要是生成完下载文件,不是拿视频当视觉输入。所以 Grok 再像「视频产品」,分析这一侧和另外三家一样——请求里没有视频块。

小结

门在「能提交什么」上就锁了。唯一正经绕法:先变成图片(截帧/截图),再走各家已有的看图。

3 · 第二块:去读一个 mp4,会发生什么?

用白话讲

体感来自:我让 agent 打开这个文件,它回了什么。四家对图片有成熟流程;对视频则是报错、没通道、或不当图处理。没有任何一家默认:打开 mp4 → 自动截帧 → 自动给模型看。

图片视频你的感觉
Claude压缩后当图读明确:二进制,不能读拒绝最响
Codex看图工具 / 本地图没有「读视频」工具不报视频错,也不会看;可用终端自己绕
Pi认静态图不认 video不会当图给模型
Grok粘贴图 / 读 image当二进制拒绝挡文件;旁边能生成、能播

Claude:两张名单

图名单(png/jpg…)→ 压缩后当图。二进制名单(含 mp4/mov/webm…)→ 直接报错,不会解成一帧帧画面。你很难误以为「它其实看过了」。

Codex:看图工具只服务图片

没有官方「用户给 mp4 → 自动截帧 → 送模型」。但 agent 仍可能:用终端跑 ffmpeg 导出几张图再看图;或任务根本是改代码/脚本,不用看画面。所以常出现「没能力却还能做好」。

Pi / Grok

Pi 默认极简,视频不是一等公民。Grok 挡文件时接近 Claude 那么硬,但产品上还能生成和播放,人容易晕(见下一块)。

小结

相同:都不会默认「读 mp4 = 模型看视频」。不同:拒绝响不响、有没有终端可绕。Claude 拒绝最响;Codex 换路空间最大。

4 · 第三块:生成、播放,会不会冒充「会分析」?

用白话讲

分析画面:四家都不会直接吃视频。让人觉得差很多的,是会不会生成视频、会不会播放,以及文案有没有把这两件事和「理解内容」写成一回事。Grok 在前两件上最热闹。

能力CodexClaudePiGrok模型算看过吗?
直接分析视频
看图片
生成视频无*产出文件,≠ 看懂
播放视频不会(给人看)

* 文档里可能出现 Sora 等名字,不是「丢 mp4 就会分析」的正式路径。

Grok 请拆成三件事:

  1. 分析——看图,模型算看过图;
  2. 生成——写出 mp4 文件;
  3. 播放——终端播给你看,模型不当作看过。

正确说法:会产片、会播给你看;理解内容仍要截帧再看图。
错误说法:「Grok 会分析视频」。

5 · 回到念头:任务是靠什么做好的?

判定(结论)

靠「不把 mp4 交给模型看」也能完成任务的办法,不是靠「看懂了视频」。

5.1 候选路径:不能拿单个案例排「常见程度」

官方路径不会把你的 mp4 直接送进图片视觉。下面列的是可能发生的路径,不是经过统计的频率排名;判断某次任务到底走了哪条,必须看那次对话和工具日志。

路径靠什么实际在干什么怎么验证
A任务本来就不用看画面改脚本、修播放器、写配置、对接 API对话里几乎没读 mp4、也没截帧
B自己截帧再当图看终端 ffmpeg 导出图,再走看图日志里有 ffmpeg,后面有看图
C你已经把内容说明白了口述、字幕、剧本、关键截图用户消息里已有描述或图
D只动旁边的文本srt / json / prompt读的是文本
E嘴上「看过」(坏)根据文件名瞎编没图没帧却描述细节 → 打回

5.2 当前 Codex 实测:直接失败,截帧后成功

实测(事实)· 2026-08-04

同一个本地 MP4,先直接交给当前 Codex 的 view_image,再用 ffmpeg 抽帧后交给同一图片入口。结果清楚地复现了路径 B。

步骤操作当前会话的新鲜结果
样本隔离选择只有 source.mp4、没有同目录字幕或 JSON 的 15.069 秒视频;临时改名为 sample.mp4H.264 · 864×496 · 24 fps · AAC;SHA-256 67190c6532f5…72ae19
直接读取view_image(sample.mp4)image content omitted because it could not be processed;没有画面进入视觉结果,也没有产生内容描述
Shell 抽帧ffmpeg 在 0、2.5、5、7.5、10、12.5 秒取六帧,拼成 JPEG 联系表成功生成 1296×496 静态图
图片读取view_image(contact-sheet.jpg)成功看到厨房内两名成年人,并能比较六帧中的人物表情和取景范围变化
本次实测的关键命令
ffprobe -v error -show_entries format=duration,size:stream=codec_type,codec_name,width,height,avg_frame_rate sample.mp4
ffmpeg -i sample.mp4 -vf "fps=1/2.5,scale=432:248:force_original_aspect_ratio=decrease,pad=432:248:(ow-iw)/2:(oh-ih)/2:black,tile=3x2" -frames:v 1 contact-sheet.jpg

这次能下的结论:当前 Codex 会话没有直接处理该 MP4 的图片视觉路径;Agent 在直接读取失败后,可以调用 Shell 抽帧,再通过静态图片获得画面信息。内容识别发生在 JPEG 进入 view_image 之后,不是在 MP4 阶段。

这次不能下的结论:一个样本不能证明 A–E 哪条最常见,也不能覆盖所有 Codex 版本、产品界面或未来服务端能力。本次只直接验证了当前环境中的路径 B;六张采样帧也不能替代完整时间轴、音轨或逐帧动作理解。

Codex 强的是「一轮轮用工具(包括终端)+ 看图 + 改代码」,不是「内置视频理解」。
「交给视频仍做好」≠「视频能力已经接通」。
你怎么做更可能发生什么
mp4 → Claude 读文件明确报错 → 你立刻知道没看成
mp4 → Codex官方不看;活能绕开画面就照样做成 → 容易误以为会处理视频
Grok 生成/打开 mp4能产、能播 → 「会视频」感觉更强;模型仍没按视频去理解

6 · 其它细节往哪搁?

图要压多小、最长边多少——只影响截帧后清不清晰,不会 magically 变成「会看视频」。文档里的 Sora 名、SDK 里的 Video 类型名,没有提交路径就等于用户用不上。这些都不是第四套秘密能力。

7 · 若我们自己做产品,默认怎么定?

不说「因为第几块」,直接说该怎么做:

因为模型根本收不到视频

因为读 mp4 不会自动变成「看过」

做成固定流程:

流程
视频文件
  → 沙箱里 ffmpeg 截帧(关键画面 / 均匀取样,需要时抽字幕)
  → 压成各家都吃得下的静图
  → 走各家已有的「看图」
  → 输出带时间信息的说明
  → 截帧失败就明确失败,禁止假装分析过

因为生成/播放容易冒充理解

记日志时别混

附录 · 四家流程(查阅)

简图
Codex   图片→看图工具→模型 │ 视频→官方无对等路径,终端可自助截帧
Claude  读图→压缩当图     │ 读 mp4→报错(二进制)
Pi      读静图→缩放→模型   │ 视频不是一等能力
Grok    (A)看图 (B)生成mp4 (C)终端播放(给人看)│ 读 mp4→拒绝

收束

回到开头:把视频给了 Codex。它没有原生处理视频的能力,却仍可能做得很好。

源码解释是:

  1. 它确实不会把视频当成「给模型看的视频」——分析这一侧,四家一样。
  2. 这条换路已在当前环境实测:直接读 MP4 失败,ffmpeg 抽帧后看图成功;其它旁路及其常见程度仍需对应会话日志。
  3. 体感差很多:Claude 拒绝响;Codex 换路空间大;Pi 默认极简;Grok 分析同样不会直接看,但生成和播放把「会视频」演得很真。
别问「哪个 Code Agent 会看视频」。
问「截帧和看图接在谁家路径上,以及生成/播放有没有被算成已经理解」。
白话成稿 · 2026-08-04 · 发布于 Silent Star
本机实测补证 · 2026-08-04 · MP4 直接读取失败,ffmpeg 六帧联系表进入图片视觉成功
已去掉「因支柱一 / video-in / MECE」等内部切口,改成第一块、第二块、第三块白话