手写multipart上传:claude-video零依赖调用Whisper API的完整原理指南 手写multipart上传claude-video零依赖调用Whisper API的完整原理指南【免费下载链接】claude-videoGive Claude the ability to watch any video. /watch downloads, extracts frames, transcribes, hands it all to Claude.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-videoclaude-video是一个给 Claude 装上眼睛和耳朵的开源技能/watch一条命令Claude 就能下载任意视频、按自动帧率抽帧、拉取带时间戳的字幕无字幕时回退到Whisper API语音转写像真的看过视频一样回答你的问题。本文面向新手完整拆解它最巧妙的一环——不安装任何第三方 SDK只用 Python 标准库手写 multipart/form-data零依赖上传音频完成 Whisper API 视频转写。先认识 claude-video字幕优先Whisper 兜底它的转写策略很务实先用 yt-dlp 拉取平台原生字幕免费、秒回、覆盖大多数公开视频只有当视频确实没有字幕本地文件、TikTok、部分 YouTube 无字幕上传时才走 Whisper API 兜底。按常理调用 Whisper API 应该pip install groq或pip install openai几行代码搞定。但 claude-video 的 whisper.py 文件头写得明明白白Pure stdlib — nopip install groqorpip install openaineeded.纯标准库无需安装任何 SDK。为什么要走这条难路零安装成本整个技能只依赖ffmpeg/yt-dlp两个外部命令首次运行由 setup.py 引导安装。再多一个 Python SDK 依赖首次体验就要多一步pip install。协议足够简单Whisper 上传就是一个标准的 multipart 请求手写约 30 行代码比翻 SDK 源码还透明。一套实现打两家Groq 与 OpenAI 的转写接口格式几乎一致一个_post_whisper()函数通吃两家端点与模型定义见 whisper.py#L28-L32。音频预处理先把体积压到最小再上传 ️上传入口是 transcribe_video()先从视频抽出音频再上传。但它抽的不是原始音频而是 extract_audio() 用 ffmpeg 压出的特定形态单声道mono16 kHz 采样率64 kbps MP3 编码结果是每分钟音频仅约 480 KB——50 分钟的播客约 24 MB刚好卡在 Whisper API 的 25 MB 上传限制之内。这也是 README 里Whisper 最长可处理约 50 分钟说法的由来。这不是随手写的参数而是为 API 限制反推数据格式的典范。核心拆解手写 multipart/form-data 请求体全文核心在 _build_multipart()。用过 Postman 或网页上传表单的读者都听过 multipart/form-data文本字段和文件被切成一段段分块拼成一个字节流段与段之间用**边界值boundary**分隔。它的组装就三步第一步用 UUID 生成唯一 boundaryboundary ----WatchBoundary uuid4().hex每次请求随机生成 32 位十六进制边界。两个要点随机性保证边界字符串不会和视频内容撞车请求头Content-Type: multipart/form-data; boundary...里的边界必须和请求体里的边界是同一个字符串——这是服务端切分段落的唯一依据。第二步文本字段在前文件段在后顺序固定本次请求共 4 个段3 个文本字段model、response_formatverbose_json、temperature0 1 个音频文件拼装后的骨架长这样--boundary Content-Disposition: form-data; namemodel whisper-large-v3 --boundary Content-Disposition: form-data; namefile; filenameaudio.mp3 Content-Type: audio/mpeg mp3 二进制内容 --boundary--规则很简单每段以--boundary\r\n开头跟一个Content-Disposition头、一个空行、内容再以\r\n收尾文件段多带一个Content-Type头用mimetypes.guess_type从扩展名推断结尾的--boundary--比普通边界多两个横杠表示最后一个段。第三步io.BytesIO 内存拼装不落临时文件整个请求体用 io.BytesIO 在内存中组装最后以(请求体字节, boundary)元组返回全程不产生磁盘临时文件。源码注释直接点明动机Whisper 的 multipart 上传小而可预测手写它正是为了留在纯标准库里。发送与重试一套聪明的容错策略 _post_whisper() 用urllib.request发 POST 请求其中有两处细节值得新手抄作业自定义 User-Agent默认的Python-urllib/3.x会被 Groq 前置的 Cloudflare WAF 规则 1010 直接拦截403连鉴权都不到。代码因此诚实地署名watch-skill/1.0 (claude-code; python-urllib)顺利过关。按错误码决定重试策略常量定义见 whisper.py#L143-L1454xx除 429客户端错误重试无意义直接报错退出并附上服务端返回的错误体429 限流优先尊重服务端Retry-After头最多重试 2 次网络错误超时、连接重置等按 2 秒基数递增退避最多共尝试 4 次。响应解析统一成管道通用的字幕格式Whisper 返回verbose_json但 claude-video 的流水线对原生字幕和Whisper 转写走同一套下游代码。关键在 _segments_from_response()它把 API 响应转成与 VTT 字幕解析 完全相同的{start, end, text}分段格式无分段时降级为整段文本兜底。于是入口 watch.py 完全不关心转写来自哪里——拿到分段列表后统一做--start/--end范围过滤、格式化成[MM:SS] 文本行与帧路径一起写进报告交给 Claude。这个统一数据结构的抽象是整个管道读起来干净利落的根本原因。零依赖方案给新手的 3 点启发 协议简单就别怕手写multipart/form-data 完整规则并不复杂用 BytesIO 自己拼比黑盒 SDK 更透明、更好调试。为 API 限制设计数据mono 16kHz 64kbps 不是随意选的是精确反推自 25 MB 上传上限。重试不是一句 sleep按错误码分流策略、429 听Retry-After、网络错误指数退避——这套三件套可直接搬进你自己的项目。延伸阅读想了解什么看哪里技能整体用法与帧预算设计SKILL.mdyt-dlp 下载与原生字幕优先逻辑download.py自动帧率抽帧逻辑frames.pyVTT 字幕解析与滚动去重transcribe.py入口编排下载→抽帧→转写watch.py版本演进记录CHANGELOG.md想动手体验git clone https://gitcode.com/GitHub_Trending/cl/claude-video ~/.claude/skills/watch然后在 Claude Code 里直接/watch 视频链接 你的问题。原生字幕免费可用仅无字幕视频需要配置 Groq首选更快更省或 OpenAI 的 API key。【免费下载链接】claude-videoGive Claude the ability to watch any video. /watch downloads, extracts frames, transcribes, hands it all to Claude.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-video创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

uBlock Origin 完整指南:4 大核心能力 + 上手 5 步,免费拦截广告与跟踪器

uBlock Origin 完整指南:4 大核心能力 + 上手 5 步,免费拦截广告与跟踪器

uBlock Origin 完整指南:4 大核心能力 上手 5 步,免费拦截广告与跟踪器 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 网…

2026/8/30 14:33:41
NSFW内容审核API实战:从图片视频检测到异步处理与工程落地

NSFW内容审核API实战:从图片视频检测到异步处理与工程落地

开发者在做 UGC 内容社区、社交应用或面向公众的内容平台时,几乎都躲不开一个问题:用户上传的图片、视频里混入了露骨或违规内容。人工审核不仅成本高,而且速度和尺度很难稳定;传统基于关键词的过滤方案对图片视频又完全无效。近期…

2026/8/30 14:33:41
oMLX vs Ollama vs LM Studio 终极对比:本地 LLM 推理服务器该如何选?

oMLX vs Ollama vs LM Studio 终极对比:本地 LLM 推理服务器该如何选?

oMLX vs Ollama vs LM Studio 终极对比:本地 LLM 推理服务器该如何选? 【免费下载链接】omlx LLM inference server with continuous batching & SSD caching for Apple Silicon — managed from the macOS menu bar 项目地址: https://gitcode.co…

2026/8/30 14:33:41
美团2016研发笔试题复盘:大厂笔试真正考的是基本功

美团2016研发笔试题复盘:大厂笔试真正考的是基本功

最近翻到一份老掉牙的题目合集——《美团2016研发工程师笔试题(一)》,看的过程中反倒有点感慨。那时候大厂笔试没有现在这么卷,也没有铺天盖地的面经和题库,题目出得比较“素”。但恰恰因为朴素,它把研发工程师真正的基本功暴露得…

2026/8/30 14:33:41
AI驱动Blender建模:从自然语言到3D场景的自动化实践

AI驱动Blender建模:从自然语言到3D场景的自动化实践

在实际 3D 场景制作流程里,最耗时的往往不是创意,而是把创意翻译成 Blender 操作。重复建模、调材质、摆灯光、设相机,这些步骤会占掉大量时间。如果能把自然语言需求交给 DeepSeek 做场景拆解,再让 Codex 这类终端编程 Agent 按照…

2026/8/30 14:33:41
大规模盲测揭示AI抗体设计真实边界与工程化路径

大规模盲测揭示AI抗体设计真实边界与工程化路径

做计算抗体筛选时,最常被问到的一个问题是:“你预测的序列真能结合吗?”这个问题很难拍胸脯回答。模型在自家验证集上表现不错,但换一个靶点、换一套表达系统,结果往往天差地别。最近,一场少见的大规模盲测…

2026/8/30 14:28:41