Agent视频理解实战:抽帧、音频转写与OCR融合的完整链路
1. 为什么是"看视频"而不是"读字幕":Agent理解视频的真正难点
这两年做Agent开发的人应该都有个明显感受:让模型读文档、读网页、读JSON都已经很成熟了,但一旦丢给它一段视频,几乎所有的Agent都会直接卡壳。你总不能把一段25分钟的视频截成几千帧全塞进上下文里,上下文窗口再大也经不住这么造。于是"claude-video"这类Skill的出现,本质上解决的是一个很务实的问题—— 如何在不炸掉上下文的前提下,让Agent真正理解视频里发生了什么 。
先聊一个容易被新手忽略的点:很多人以为视频理解约等于字幕识别,只要把视频里的语音转成文字,Agent就算"看过"视频了。这个想法只对了一半。视频里有大量信息不在语音里:画面的构图、人物的动作、场景的切换、屏幕录制的界面变化、PPT上的图表、演示者的肢体语言,甚至视频里硬字幕直接烧录在画面上的文字,这些东西光靠语音转写是拿不到的。更麻烦的是,很多视频本身就是纯画面内容,比如监控录像、产品演示、UI操作录屏、球赛集锦,压根没有语音通道,或者语音通道全是背景音乐。这种情况下一整套"视频理解"的链路就不是锦上添花,而是唯一可行方案。
那Agent"看视频"的难点到底在哪?总结下来有三个:
第一, 视频是连续流,模型是离散输入 。视频本质上是每秒24到60帧的连续画面,配上一条音频轨。模型能消化的是离散的文本块和少量图片,没法直接"播放"一段视频。必须有一层转换层,把连续流切成模型能吞下的单元。
第二, 信息密度分布极不均匀 。一段访谈视频可能前10分钟都在聊同一个话题,画面几乎不动,中间突然切了一个PPT,信息密度瞬间暴涨。如果均匀抽帧,可能把关键画面漏掉,或者抽了几十张几乎一模一样的废帧浪费上下文。抽帧策略的好坏,直接决定了Agent理解视频的质量上限。
第三, 多模态信息要融合,而不是拼接 。真正靠谱的视频理解,不是"画面识别一遍 + 音频转写一遍 + 最后拼在一起"这么简单。画面里的人物在指着一个白板说话,语音里说的是"这个数据增长了30%",白板上写着的是柱状图——这三者必须关联起来,模型才能得出"他在汇报业绩增长"这个判断,而不是分别得出三个孤立的事实。
claude-video这个Skill做的事情,就是把上面三个难点拆成一条可落地的流水线:先用ffmpeg抽帧拿到视觉信息,再用语音转写拿到音频内容,再通过OCR识别画面中的硬字幕和文字信息,最后把这三路输出汇总成结构化的markdown,交给Agent去推理。下面我逐个环节拆开讲。
2. 视频理解链路拆解:抽帧、音频、OCR各有各的活
一段视频要变成Agent能读的文本,核心是三条提取链路并行工作,每条链路负责一类信息源。
2.1 画面抽帧:先把"连续"变成"离散"
ffmpeg承担最基础的活:抽帧。链路里最关键的参数是 抽帧间隔 。抽得太密,上下文瞬间被废帧占满;抽得太疏,关键画面直接被跳过。
我实测下来,不同内容类型的视频,最优抽帧间隔差异非常大:
| 视频类型 | 推荐抽帧间隔 | 理由 |
|---|---|---|
| 访谈/播客(画面基本不动) | 每10秒1帧 | 画面信息量低,省上下文为主 |
| 产品演示/UI操作录屏 | 每2-3秒1帧 | 操作细节密集,漏帧会丢掉关键点击动作 |
| 体育赛事/舞蹈/动作戏 | 每1秒1帧 | 动作变化快,稀疏抽帧会截到大量中间姿态 |
| PPT讲解/课程视频 | 每5秒1帧+场景检测 | 结合场景切换补充关键幻灯片画面 |
实际执行时,ffmpeg命令大概长这样:
ffmpeg -i input.mp4 -vf "fps=1/3,scale=960:-2" -q:v 3 -frame_skip 0 frames/frame_%04d.jpg
这里
fps=1/3
表示每3秒输出一帧,
scale=960:-2
把宽度缩到960像素同时保持宽高比,
-q:v 3
控制JPEG质量在较高档位。分辨率不能太高,一张1920宽的截图可能1MB以上,扔给视觉模型会拖慢响应速度;960宽度在"能看清画面细节"和"传输体积可控"之间是个比较合适的平衡点。
但均匀抽帧有个硬伤:镜头切换的那一瞬可能会被卡在帧间缝隙里。所以稍微成熟一点的链路会加一道
场景检测
:ffmpeg的
select
滤镜配合场景分数,在画面剧烈变化时额外补一帧。
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',scale=960:-2" -vsync vfr frames/scene_%04d.jpg
gt(scene,0.3)
的意思是,当相邻两帧的画面差异评分超过0.3时,把这帧保留下来。0.3这个阈值可以根据视频类型微调,综艺节目切换快可以降到0.2,访谈节目画面变化少可以升到0.4,否则会抓出一堆因为人物轻微移动导致的无意义切帧。
2.2 音频转写:语音是信息密度最高的单通道
绝大多数视频里,语音承载的信息量远大于画面。音频转写这步用whisper系列的模型就够用,效果和速度平衡得比较好的是
whisper-large-v3
或
faster-whisper
的medium/large模型。
音频提取要先从视频里剥离音轨:
ffmpeg -i input.mp4 -vn -ac 1 -ar 16000 audio.wav
-ac 1
强制单声道,
-ar 16000
设置16kHz采样率。这两个参数都是whisper的输入要求,不是随便定的。多声道会干扰语音识别,16kHz正好覆盖人声频段且能大幅减小文件体积。
转写这一步我有两条实战建议:
第一,
启用VAD(语音活动检测)
。whisper默认会傻乎乎地转写整段音频,包括中间10秒没人说话的环境音,结果就是生成一堆"嗯""啊""(音乐声)"之类的垃圾文本。用
faster-whisper
时打开VAD过滤静音段,转出来的文本干净得多。实测同一段40分钟的讲座音频,开VAD后转写时间能缩短30%,而且文本质量明显提升。
第二, 输出格式选带时间戳的SRT或JSON 。很多人转写只拿纯文本,这很可惜。带时间戳的转写结果可以让Agent在做"某个时间点发生了什么"这类问答时,把时间轴对上,回答会精确很多。后面Agent做视频时间轴摘要也用得上。
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe(
"audio.wav",
vad_filter=True,
language="zh",
word_timestamps=True
)
for seg in segments:
print(f"[{seg.start:.1f}s - {seg.end:.1f}s] {seg.text}")
2.3 OCR识别:把烧进画面的字抠出来
OCR是被很多人忽略的一环,但恰恰是"看视频"能力里含金量最高的部分。想想这些场景:视频里的PPT文字、代码演示的报错信息、游戏直播的UI文字、老电影的硬字幕——这些全是烧录在画面像素里的,语音转写拿不到任何信息。没有OCR,Agent看这类视频基本等于瞎猜。
OCR选型上,把PaddleOCR和RapidOCR都试过,综合下来RapidOCR轻量易部署,CPU上也能跑得动,中文识别精度足够日常使用。PaddleOCR精度更高但对依赖环境更挑剔,如果只做CPU推理建议直接用RapidOCR体验更顺滑。
具体做法是把第2.1步抽出来的关键帧逐张喂给OCR引擎,只保留置信度高于阈值的文字块。这里要特别注意: 抽帧策略直接影响OCR效果 。PPT讲幻灯片用均匀抽帧就能拿到完整文字,但如果是视频里闪过的弹窗提示,就得靠场景检测补帧才能恰好截到那一帧。所以一个完整的链路应该同时跑均匀抽帧和场景检测,然后对两批帧都做OCR。
OCR的难点往往在预处理,直接拿抽出来的原始帧识别,经常遇到字幕模糊、背景干扰、反光之类的问题。我的经验是先对帧图像做一次简单的对比度和锐化增强再送去OCR:
from PIL import Image, ImageEnhance, ImageFilter
img = Image.open("frame_0012.jpg")
img = ImageEnhance.Contrast(img).enhance(1.8)
img = ImageEnhance.Sharpness(img).enhance(2.0)
img = img.convert("L") # 转灰度,OCR引擎对灰度图识别更稳健
img.save("frame_0012_enhanced.jpg")
这一步看着不起眼,但对识别率的影响非常明显,尤其对带阴影的白色字幕,灰度化之后文字和背景的对比度更清晰,识别结果能提升一个台阶。
2.4 三路信息怎么拼装成Agent能读的"视频文本"
三条链路各跑完一遍,手上就有了三类中间产物:抽帧得到的图片序列(jpeg文件)、whisper转出的带时间戳文本、OCR提取的画面文字。接下来要做的是把这三类信息按时间轴对齐拼装成一个结构化的markdown文档,让Agent把这段文本"读"进去。
拼装顺序很有讲究,好的排序能大幅降低模型的理解难度。我常用的模板长这样:
# 视频内容转写报告
## 视频基本信息
- 文件名: product-demo-0421.mp4
- 时长: 00:12:35
- 分辨率: 1920x1080
- 总帧数: 18900
- 抽取关键帧: 142张
- 音频转写字符数: 6842
- OCR识别文本块: 87处
## 时间轴索引
- [00:00:00 - 00:01:20] 开场介绍
- [00:01:20 - 00:05:45] 功能点1演示
- [00:05:45 - 00:10:10] 功能点2演示
- [00:10:10 - 00:12:35] 总结与QA
## 逐段内容
### 第1段 (00:00:00 - 00:01:20)
语音转写: 大家好,欢迎来到本期产品演示,今天主要带大家看一下我们新版本...
画面文字(OCR): [PRODUCT TOUR] [WELCOME SCREEN] [v3.2]
关键帧文件: frames/frame_0001.jpg, frames/frame_0005.jpg
### 第2段 (00:01:20 - 00:05:45)
语音转写: 首先是我们重构后的数据面板,可以看到左侧导航多了一个...
画面文字(OCR): [DASHBOARD] [METRICS OVERVIEW] [REVENUE +23%]
关键帧文件: frames/frame_0018.jpg, frames/frame_0024.jpg
注意我在每段末尾列出了关键帧的文件路径。这样设计是有意图的:Agent在推理时如果发现语音转写和OCR信息之间有不一致,可以主动引用"关键帧文件"请求查看对应图片。这套"按需取帧"机制能让模型在不炸上下文的前提下拥有"视觉检查"的能力。实现方式是在Skill的system prompt里约定一个工具调用协议,比如明确告诉Agent"当OCR和语音转写内容存在冲突或画面信息缺失时,可以调用frame_lookup工具并传入帧文件路径来查看原图"。
3. 从零跑通:安装、配置、测试一个Skill的完整流程
3.1 环境准备踩过的坑
claude-video这类Skill本质上是一个围绕Claude Code或类似Agent框架的插件包,通过自定义的Skill机制扩展Agent的工具调用能力和Prompt行为。装的过程本身不难,但有几个前置依赖容易翻车。
第一是ffmpeg必须装带libx264和libass的版本。很多人拿系统自带的精简版ffmpeg,一到抽帧或者字幕处理就报
Unknown encoder 'libx264'
,当场傻眼。macOS上老老实实用Homebrew装完整版:
brew install ffmpeg --with-libx264 --with-libass
Linux上用apt装的话注意检查编码器列表:
ffmpeg -encoders | grep x264
如果查不到libx264,需要先跑
sudo apt install ffmpeg x264 libx264-dev
再确认。这个坑特别隐蔽,因为不带x264的ffmpeg也能处理简单转码,只有你抽帧拉升、加字幕时才暴露问题。
第二是Python环境里PaddleOCR和faster-whisper有版本兼容问题。faster-whisper需要
ctranslate2
版本匹配,PaddleOCR需要
paddlepaddle
匹配。直接用
pip install
最新版大概率能跑通,但如果你在旧项目里升级过某些包,可能遇到
numpy
版本冲突,建议直接为Skill建一个独立虚拟环境:
python -m venv claude-video-env
source claude-video-env/bin/activate
pip install faster-whisper rapidocr-onnxruntime opencv-python pillow
个人经验是别在系统环境里装全套,Skill涉及的机器学习依赖太多,跟其他项目抢环境会让你想砸电脑。
3.2 Skill目录结构和Agent接入
一个标准Skill的目录结构长这样:
claude-video/
├── SKILL.md # Skill的核心Prompt定义,告诉Agent什么时候该用什么工具
├── requirements.txt # Python依赖
├── config.yaml # 可调参数:抽帧间隔、OCR阈值、whisper模型大小等
├── scripts/
│ ├── extract_frames.py # 抽帧脚本
│ ├── transcribe_audio.py # 音频转写脚本
│ ├── run_ocr.py # OCR识别脚本
│ ├── build_report.py # 三路信息拼装报告
│ └── frame_lookup.py # 供Agent按需查看关键帧
├── assets/
│ └── prompt_templates/ # 拼装报告的模板文件
└── bin/
└── analyze.sh # 一键分析入口脚本
SKILL.md是灵魂,Agent框架靠读这个文件来决定"什么时候触发这个Skill、怎么用"。核心内容是一段行为约定,我节选几段比较关键的:
# Skill: Video Understanding
## 何时触发
当用户提供视频文件路径,或要求分析、总结、检索视频内容时,自动激活本Skill。
## 输入要求
确认视频文件存在且可读,检查ffmpeg和Python依赖是否可用。
## 处理流程
1. 调用 analyze.sh,传入视频路径和可选参数(抽帧间隔、是否OCR、语言)
2. analyze.sh 依次执行:抽帧 -> 音频转写 -> OCR -> 生成报告
3. 将生成的markdown报告作为上下文,结合用户问题回答
4. 当回答需要确认画面细节时,调用 frame_lookup 工具查看关键帧
## 输出约定
- 优先引用带时间戳的内容,回答尽量包含具体时间点
- 当画面信息与语音转写冲突时,明确标注"画面显示X,语音提到Y"
- 涉及数字、代码、专有名词时,以OCR识别内容为准并校验语音转写
3.3 跑通第一个视频问答
环境齐了之后,跑一个完整的视频理解测试,最稳妥的做法是先拿一段 画面和语音信息都比较丰富的短视频 练手,比如一段3分钟的B站科技UP主评测视频。用命令行直接跑:
cd claude-video
./bin/analyze.sh --input ~/Downloads/phone-review.mp4 --fps-interval 3 --lang zh --ocr true
脚本会按照SKILL.md里约定的流程,先用ffmpeg抽帧(每3秒抽一帧并做场景检测补帧),这段3分钟的视频大约会产生80到120张关键帧;然后抽出音频轨用faster-whisper转写;再对全部关键帧跑OCR;最后build_report.py把三路信息拼装成上面那种结构的markdown报告。跑完之后在终端里就能看到:
- 抽帧数量统计
- 音频转写时长和字符数
- OCR识别到的文本块数量
- 生成的report.md路径
然后让Agent基于这份报告回答问题。我用的一个经典测试问题是:"这个视频里提到了哪几个竞品?对比结论是什么?"Agent会先从转写文本里找到竞品名称,再用OCR结果补充画面上可能出现的品牌Logo文字,最后综合给出答案。如果转写文本里只说"左边这款产品",没提名字,OCR识别到了画面里的产品名,Agent就会借助OCR信息补充完整,不至于答得模棱两可。
4. 踩坑实录:Claude Video最常见的五个翻车现场
工具跑通了只是万里长征第一步。真正接手大量真实视频之后,各种幺蛾子就陆续冒出来了。以下五个问题是我反复踩过之后沉淀下来的排查思路,每一个都对应具体的场景和修复方案。
4.1 大视频文件运行时直接超时
第N次跑一个45分钟大小的网络研讨会视频时,脚本执行到一半直接卡死,超过Agent平台默认的120秒工具调用时限被强制中断。排查后发现问题出在三个环节的叠加效应上:45分钟视频每3秒抽一帧会产生900张原图,每张图都要过一遍PaddleOCR,CPU推理模式下这一步耗时就接近5分钟。加上whisper转写45分钟音频,整体耗时严重超限。
解决思路不是优化单个环节,而是 分层降级 :先快速跑音频转写拿到文本主信息,OCR只针对场景检测标出的"重点帧"跑,而不是全量抽帧都跑OCR。另外还可以加一道视频分段逻辑,把长视频按10分钟为一个单位拆开,每个单位单独跑一轮生成子报告,最后合并成总报告。这样即使某段处理失败,也不会影响整体结果。
4.2 纯音乐视频把Agent"带偏"了
有个用户让我分析一段游戏MV,whisper把歌词和音乐全转成了文本,Agent一本正经地分析"这首歌的歌词讲述了...",完全没意识到这是纯音乐配画面。这个问题的本质是: 语音转写通道永远有输出,即使它输出的全是噪声或歌词 ,模型会误以为"有文本就是有语音内容"。
修复方案是在转写完成后加一个 音频通道探测 步骤:用ffmpeg的silencedetect统计整段音频的有效语音占比,如果语音覆盖率低于5%(比如音乐MV、纯BGM视频),就在报告里明确标注"本视频音频通道以音乐为主,语音内容置信度较低,请优先参考OCR和画面帧分析结果"。这样Agent就不会傻乎乎地把歌词当语义内容分析了。
ffmpeg -i audio.wav -af silencedetect=noise=-30dB:d=0.5 -f null - 2>&1 | grep "silence_end" | awk -F: '{sum+=$2} END {print "total_silence:", sum}'
把检测到的静音时长除以音频总时长,就能粗略估算语音覆盖率,低于阈值就打上低置信度标记。
4.3 高动态场景抽帧抽出的全是废帧
处理一段篮球集锦时,Agent给出的描述是"球员在场上跑动,画面多次切换",但具体投篮动作、得分瞬间完全没分析到。我检查了抽出来的关键帧,发现均匀抽帧每隔3秒取一帧,结果截到的全是球在空中的过渡姿态,真正决定"这球进了没有"的瞬间反而被完美错过。
这是均匀抽帧策略在高动态视频上的天然缺陷。改进方法是 把均匀抽帧和场景检测配合使用 ,并额外针对运动检测的高响应区段做密集补帧。简单粗暴的做法是:先用场景检测标出画面剧烈变化的时间点,在每个时间点前后1秒内额外补抽3帧,再把这几帧单独送视觉模型分析,让模型回答"这个瞬间画面里最重要的是什么"。
4.4 中文字幕OCR识别出来全是乱码
我以为自己已经是老手了,结果第一次处理带中文字幕的日剧时,OCR吐出来一堆看不懂的字符,英文和数字倒是识别得挺准。排查后发现问题出在PaddleOCR的文本方向分类器上——当视频字幕带有倾斜渐变或者半透明阴影时,预处理不够会造成文字块切割错位,识别置信度骤降。
后面总结了两个实用技巧:一是OCR前先做一次
自适应阈值二值化
,把半透明字幕从背景里彻底分离出来;二是PaddleOCR有一个
text_direction
参数可以显式指定,在SKILL.md里我直接把它写死成
"lr"
(从左到右),避免分类器误判方向导致后续识别全乱。
4.5 长视频Token爆炸:估算抽帧上限
如果不对长视频做截断,上下文爆炸的概率很大。我遇到过一个用claude-video分析一部90分钟纪录片的需求,按每5秒一帧估算能抽出1000多张关键帧,光关键帧描述就超过2万token,加上音频转写和OCR,直接干到了接近10万token。Agent在处理时明显变慢,回答质量也急剧下降。
我的建议是 估算Token预算后再决定抽帧策略 。假设视频时长T秒,目标抽帧数N,每帧描述平均token数C(通常一张被视觉模型描述过的帧约100到200token),音频转写每分钟大约150到250token,那么总Token预算大约为:
Total ≈ N × C + (T / 60) × 200 + OCR文本块数 × 15
如果你给Agent的上下文预算只有3万token,反推N就不能超过150。所以"抽帧间隔设多少"不应该拍脑袋,而应该基于上下文预算倒推。执行阶段动态计算:先生成音频转写和场景检测结果,实际语音内容少的视频优先保证视觉抽帧数量,语音密集的视频反过来收缩抽帧数,这样能在有限预算内最大化信息增益。
5. 让Skill输出更稳定可控的进阶操作
当基础链路跑通、踩坑也趟平之后,剩下的问题就是如何让输出质量更进一步稳定。这里分享三个我自己调优后受益最明显的方向。
5.1 抽帧参数动态化,别再一刀切
之前我把抽帧间隔写死在config.yaml里,后来发现不同来源的视频对参数要求差得太多。现在的做法是让Skill在跑链路之前先自己"侦察"一下视频类型:用ffmpeg的fps和scene检测跑一遍全片,统计出平均镜头切换频率,再根据这个值动态决定抽帧间隔。
def determine_interval(video_path: str) -> float:
# 先粗筛镜头切换频率
probes = subprocess.run(
["ffmpeg", "-i", video_path, "-vf", "select='gt(scene,0.3)',showinfo", "-f", "null", "-"],
capture_output=True, text=True
)
num_scene_changes = len(re.findall(r"pts_time:([\d.]+)", probes.stderr))
duration = float(subprocess.run(
["ffprobe", "-v", "error", "-show_entries", "format=duration",
"-of", "default=noprint_wrappers=1:nokey=1", video_path],
capture_output=True, text=True
).stdout.strip())
scenes_per_minute = num_scene_changes / (duration / 60)
if scenes_per_minute > 15:
return 1.0 # 高动态:体育、动作戏
elif scenes_per_minute > 5:
return 3.0 # 中动态:产品演示、Vlog
else:
return 8.0 # 低动态:访谈、讲座
用这个函数替换掉固定值之后,处理不同类型视频的适应能力明显提升,不用再为每个视频手动调参。
5.2 "带着问题看视频":把用户意图注入提取阶段
基础链路是"先把视频所有信息提取出来,再让Agent回答问题",这种方式有个天然浪费:如果用户只想知道"视频里出现的所有产品名",你根本不需要为抽帧和OCR花那么多token把全片内容描述一遍。
优化思路是让用户问题前置,把意图注入提取阶段。比如用户在提问前已经明确"我想了解这个视频讲了什么错误处理方案",脚本在抽帧时,可以告诉OCR引擎"优先识别包含'错误''exception''error'等关键字的帧",并在OCR后先做一轮关键词筛选,只把包含相关语义的OCR文本块放进上下文。音频转写也可以做同样的关键词摘要。这样不仅省Token,回答还更聚焦。
5.3 结构化输出协议:让Agent按格式回答
最后一步是约定输出格式。没有约束的Agent回答容易天马行空,输出太发散。我在SKILL.md里增加了一段输出协议约定,要求Agent在回答视频相关问题时分三个层次组织答案:
- 全局摘要 :用2到3句话概括整个视频的核心内容。
- 分段解析 :按时间轴列出视频的段落结构,每段内容是"时间段 + 核心事件 + 关键信息"。
- 细节证据 :对用户的具体问题给出回答,引用具体的时间点、OCR识别的原文字样、画面帧的文件路径作为佐证。
这个输出协议在实际使用中价值极高,尤其当你把Agent的分析结果作为下游流程的输入时,结构化的报告可以直接对接知识库入库或自动生成会议纪要,不用再做二次解析。
拿我最近处理的一段产品发布会视频举例:Agent输出的结构化报告里,"细节证据"部分准确引用了"00:03:25处画面上出现的PRICING页面OCR文本:$19/month, $49/year",配合语音转写里"我们为个人用户提供了更灵活的价格方案",两个信息互相印证,输出结论的可信度比单纯靠一路信息高得多。
6. 最后说点实际的体会
做"Agent看视频"这个方向半年多,最大的感受是:技术链路本身不神秘,抽帧、转写、OCR三件套都是现成的工具,真正的壁垒在于 对视频内容的理解和对细节的处理 。什么时候抽帧、抽多了怎么办、OCR识别出错怎么兜底、Token预算怎么分配——这些琐碎但致命的问题,才是决定一个Skill能不能从demo变成生产力工具的关键。
对准备上手的人,我的建议是:先找三段不同类型的视频(一段访谈、一段录屏、一段高动态集锦)跑一遍,看看链路在哪里卡住,再根据卡点调优。别一上来就追求完美支持一切视频类型,那只会让你陷入参数调优的无底洞。
最后分享一个压箱底的小技巧:所有中间产物(关键帧、音频转写文本、OCR结果)都保留完整的文件路径,并且写入最后的报告文件。你会发现当Agent在回答"这个画面的具体内容是什么"时,能够快速调用frame_lookup工具查看原图,而不用把整批图片重新处理一遍。这个设计让"视频理解"和"视频检索"的边界变得非常自然:理解是第一次跑链路,检索是后续按需查帧,两者共用同一份中间产物,成本极低。
火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。
更多推荐
所有评论(0)