ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

视频转播客场景,VideoAgent 的 TTS 和 LLM 都找 TaoToken

视频转播客场景,VideoAgent 的 TTS 和 LLM 都找 TaoToken 1. VideoAgent 视频转播客真正难的是 LLM 口播改写和 TTS 配音这两条链路在 VideoAgent 这类视频智能体里把一期长视频转成播客流程通常被理解为“切片 配音 导出”。但实际跑起来最先出问题的往往不是切片而是 ASR 字幕进入 LLM 时的改写质量以及 TTS 合成时的接口配置。字幕稿直接丢给 TTS会出现书面语味重、断句怪、数字读错两个供应商分别配 key又会出现401 invalid api key、404 model not found、音频文件 0 字节这些排障噪音。这次我们把 VideoAgent 视频转播客的 LLM 和 TTS 都收到 TaoToken先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_intro 拿 Key再把 Base URL 填为 https://taotoken.net/api。这样口播改写和配音共用一套鉴权、一套网关、一套账单双链路成本也能拆开看。VideoAgent 本身负责的是编排它把“把这场讲座转成播客”拆成字幕提取、语义检索、口播稿生成、配音、音频合成等子任务。它不会替你决定 LLM 和 TTS 的供应商也不会替你优化调用成本。真正决定一期 60 分钟视频能不能稳定转成 40 到 50 分钟音频播客的是下面两条链路LLM 链路把 ASR 字幕、视频摘要、章节信息改写成适耳的口播稿TTS 链路把口播稿合成为可发布的音频文件并处理分段、停顿、音色一致性。这两条链路如果分别接不同平台排障会变成“猜”。LLM 报错要查 A 平台TTS 爆音要查 B 平台最后成本还分散在两张账单里。统一到 TaoToken 后至少鉴权、Base URL、Key 管理可以先标准化。下文按可跟做的顺序写先准备 Key再配 LLM再配 TTS最后把音频文件落盘并核算双链路成本。2. 接入前的最小准备Key、Base URL、模型 ID 和环境变量第一步不是改 VideoAgent 的源码而是把凭据和地址固定下来。打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_prepare 进入控制台创建 API Key。建议至少建两个 Keyvideoagent-llm只给播客口播改写链路使用videoagent-tts只给配音合成链路使用。这样月底看用量时能一眼分出 LLM Token 花了多少、TTS 字符或音频时长花了多少。Key 值形如YOUR_API_KEY实际使用时替换成你自己创建的值不要提交到 Git也不要写进前端代码。项目根目录可以先放一个.env文件# .env TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_LLM_API_KEYYOUR_API_KEY TAOTOKEN_TTS_API_KEYYOUR_API_KEY TAOTOKEN_LLM_MODELYOUR_LLM_MODEL TAOTOKEN_TTS_MODELYOUR_TTS_MODEL如果你习惯用 shell 临时注入也可以export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_LLM_API_KEYYOUR_API_KEY export TAOTOKEN_TTS_API_KEYYOUR_API_KEY注意这里有两个容易混的点Base URL 统一写https://taotoken.net/api不要在工具配置里给它加 UTM 参数模型 ID 不要凭记忆填先去模型对话或控制台确认当前账号可用的 LLM 与 TTS 模型。VideoAgent 视频转播客的输入通常是字幕文件、摘要文本或章节 JSON。LLM 需要的是文本TTS 需要的是改写后的口播稿。准备阶段先把目录建好video2podcast/ input/ lecture.mp4 work/ transcript.txt podcast_script.txt tts_parts/ list.txt output/ podcast_full.mp33. LLM 链路播客口播改写用 Claude Code / Codex / CC Switch 三件套接入LLM 链路的目标只有一个把“看起来正确、读起来别扭”的字幕稿改成“听起来自然、信息不丢”的播客口播稿。VideoAgent 可以调用本地脚本也可以让外部 coding agent 帮你维护改写脚本。这里给三种常见接入方式Claude Code、Codex、CC Switch。3.1 Claude Codesettings.json 与 ANTHROPIC_* 配置Claude Code 读取settings.json其中env可以固定供应商地址、Key 和模型。示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-sonnet-4-5 } }如果不想改文件也可以在当前终端临时注入export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELclaude-sonnet-4-5改完后新开一个终端运行 Claude Code 的检查命令确认它读到的 Base URL 不是默认地址。这里出现401优先查ANTHROPIC_AUTH_TOKEN是否还是占位符出现404优先查ANTHROPIC_BASE_URL是否被误写成别的路径。3.2 Codexconfig.toml 单独配置不要混用 ANTHROPIC_*Codex 使用config.toml不要把 Claude Code 的ANTHROPIC_*变量套进来。示例model YOUR_LLM_MODEL model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_LLM_API_KEY然后设置环境变量export TAOTOKEN_LLM_API_KEYYOUR_API_KEYCodex 里如果报model not found不要先改 Base URL先去控制台确认模型 ID如果报鉴权失败检查env_key指向的变量是否已经导出。两个工具各走各的配置排障路径才不会乱。3.3 CC Switch 三件套如果你用 CC Switch 管理多个供应商新增时按三件套填Provider Name: TaoToken Base URL: https://taotoken.net/api API Key: YOUR_API_KEY切换供应商后检查 Claude Code 侧是否写入ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL。Codex 侧仍然走config.toml和TAOTOKEN_LLM_API_KEY不要把三件套里的 Anthropic 变量直接复制到 Codex。3.4 口播改写脚本与提示词LLM 的输入不要直接是整段字幕。先做清洗去掉[音乐]、[掌声]、时间轴、重复语气词再保留数字、人名、结论和例子。提示词可以这样写你是播客口播编辑。把输入字幕改写成单人播客口播稿。 硬性要求 1. 保留数字、人名、关键结论和案例顺序 2. 删除“大家看这里”“如图所示”“这个画面”等依赖视觉的表达 3. 每段不超过 3 句长句拆短 4. 把书面语改成适耳表达但不要编造事实 5. 输出纯文本不要 Markdown不要标题。Python 调用示例import os from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_LLM_API_KEY], base_urlos.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api), ) with open(work/transcript.txt, encodingutf-8) as f: transcript f.read() prompt f你是播客口播编辑。把下面字幕改写成口播稿。 保留事实和数字删除视觉指向长句拆短输出纯文本。 {transcript} resp client.chat.completions.create( modelos.environ[TAOTOKEN_LLM_MODEL], messages[ {role: system, content: 你是严谨的播客口播编辑。}, {role: user, content: prompt}, ], temperature0.3, ) script resp.choices[0].message.content with open(work/podcast_script.txt, w, encodingutf-8) as f: f.write(script) print(usage:, resp.usage)运行后应该得到work/podcast_script.txt。这个文件就是 TTS 链路的输入。LLM 成本主要看prompt_tokens和completion_tokens所以在脚本里打印resp.usage别等月底再猜。4. TTS 链路把口播稿合成为音频文件TTS 链路比 LLM 更容易被低估。它不是“把文本丢进去”就结束长文本需要分段音色要一致数字和英文缩写要读对段落之间要留停顿。VideoAgent 视频转播客产出的是音频文件不是一段演示文本所以这里必须让 TTS 真正落盘。TTS 也走 TaoToken 的 Base URLhttps://taotoken.net/api。先做短文本验证curl -X POST https://taotoken.net/api/audio/speech \ -H Authorization: Bearer YOUR_API_KEY \ -H Content-Type: application/json \ -d { model: YOUR_TTS_MODEL, voice: alloy, input: 欢迎收听本期播客今天我们聊视频转播客的双链路成本。 } \ --output work/tts_parts/test.mp3然后检查文件是否真的有内容ffprobe -v error -show_entries formatduration,size -of defaultnoprint_wrappers1 work/tts_parts/test.mp3如果size是 0先不要怀疑 VideoAgent先查三件事Key 是否是 TTS Key、模型 ID 是否可用、请求体字段是否拼错。短文本通过后再跑长文本。Python 分段合成示例import os import re from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_TTS_API_KEY], base_urlos.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api), ) def split_text(text: str, max_len: int 1200): paragraphs [p.strip() for p in text.split(\n) if p.strip()] parts, buf [], for p in paragraphs: if len(buf) len(p) max_len: buf (\n if buf else ) p else: if buf: parts.append(buf) buf p if buf: parts.append(buf) return parts with open(work/podcast_script.txt, encodingutf-8) as f: script f.read() os.makedirs(work/tts_parts, exist_okTrue) parts split_text(script) for i, part in enumerate(parts, 1): path fwork/tts_parts/part_{i:03d}.mp3 with client.audio.speech.with_streaming_response.create( modelos.environ[TAOTOKEN_TTS_MODEL], voicealloy, inputpart, ) as response: response.stream_to_file(path) print(written:, path, len(part))分段之后要合并。用ffmpeg生成 concat 列表rm -f work/list.txt for f in work/tts_parts/part_*.mp3; do echo file $PWD/$f work/list.txt done ffmpeg -f concat -safe 0 -i work/list.txt -c copy output/podcast_full.mp3最后验证产物ffprobe -v error -show_entries formatduration,size -of defaultnoprint_wrappers1 output/podcast_full.mp3到这里可复现产出就包括LLM 与 TTS 双配置、podcast_script.txt、tts_parts/*.mp3和最终output/podcast_full.mp3。5. 双链路成本怎么算LLM Token 与 TTS 字符的两张账单视频转播客的成本不是一笔糊涂账它至少分成两张LLM 账单播客口播改写调用 LLM按输入 Token 和输出 Token 计费TTS 账单配音调用 TTS通常按字符数或音频时长计费。再加上 VideoAgent 本地的 ASR、切片、合并等资源消耗整体成本才是完整成本。下面给的是核算方法具体单价以 TaoToken 控制台和模型页实际显示为准。LLM 侧公式LLM 成本 prompt_tokens × 输入单价 completion_tokens × 输出单价一段 60 分钟讲座ASR 字幕可能有一万多字。你把字幕、提示词、章节摘要一起发给 LLM输入 Token 会明显高于输出。控制方法先清洗字幕去掉语气词、重复句、时间轴减少无效输入分章节改写不要每次把全文重发初稿和润色分开便宜模型做结构整理贵模型只做最终润色在脚本里记录每次usage按项目汇总。TTS 侧公式常见有两种TTS 成本 计费字符数 × 字符单价 或 TTS 成本 音频时长(分钟) × 分钟单价控制方法口播稿压缩别把 LLM 的废话也读出来片头、片尾、固定口播可以缓存复用长文本分段并行但每段都先用短样本确认音色失败重试要设上限避免网络抖动导致重复计费。统一到 TaoToken 后建议用不同 Key 跑两条链路。这样你可以在 API Keys 页面按 Key 看用量LLM 涨了还是 TTS 涨了一眼能分清。需要创建独立 Key 时从官网进入 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_cost 会更直接。6. 可复现完整流程从视频到 mp3 的本地命令与验证清单下面给一条最小可复现路径。假设 VideoAgent 或本地 Whisper 已经产出work/transcript.txt。第一步确认环境变量export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_LLM_API_KEYYOUR_API_KEY export TAOTOKEN_TTS_API_KEYYOUR_API_KEY export TAOTOKEN_LLM_MODELYOUR_LLM_MODEL export TAOTOKEN_TTS_MODELYOUR_TTS_MODEL第二步运行口播改写脚本生成work/podcast_script.txt。运行后检查三件事是否还有“如图所示”这类视觉指向数字和人名是否保留段落长度是否适合朗读。第三步先合成 200 字测试音频确认音色、语速、停顿。不要一上来就合成 40 分钟否则 TTS 报错会浪费等待时间。第四步分段合成全部音频python tts.py --script work/podcast_script.txt --outdir work/tts_parts第五步合并音频rm -f work/list.txt for f in work/tts_parts/part_*.mp3; do echo file $PWD/$f work/list.txt done ffmpeg -f concat -safe 0 -i work/list.txt -c copy output/podcast_full.mp3第六步验证ffprobe -v error -show_entries formatduration,size -of defaultnoprint_wrappers1 output/podcast_full.mp3成功标准output/podcast_full.mp3文件大小明显大于 0音频总时长与口播稿长度大致匹配每个分段都能单独播放合并后没有缺段、重复段、爆音LLM 与 TTS 的 Key 用量能在控制台分开看到。如果 VideoAgent 首次运行需要下载 Whisper、CosyVoice 等本地模型下载慢和磁盘占用是另一类问题不要和 TaoToken 的接口问题混在一起排。你可以把 ASR 留在本地把 LLM 口播改写和 TTS 配音切到 TaoToken 的https://taotoken.net/api这样链路边界更清楚。7. 常见报错与排查401、404、model not found、音频 0 字节视频转播客双链路最常见的报错集中在下面几类。401 invalid api key检查 Key 是否替换了YOUR_API_KEY请求头是否带Authorization: Bearer环境变量是否在当前 shell 生效。Claude Code 查ANTHROPIC_AUTH_TOKENCodex 查TAOTOKEN_LLM_API_KEY。404 not foundBase URL 写错。统一用https://taotoken.net/api不要自己拼接/v1或加多余路径。TTS 端点用https://taotoken.net/api/audio/speech做短测。model not found模型 ID 不在账号可用范围或者拼写错误。去模型对话页确认模型 ID不要沿用别的平台命名。音频 0 字节通常是 TTS 请求字段错、文本为空、超长、网络中断。先用 20 字短文本测再逐步加长。检查input是否传了空字符串检查输出目录是否存在。中文乱码文件读写统一encodingutf-8请求头Content-Type: application/json不要在 Windows 默认编码下读写字幕。合成超时把口播稿按 800 到 1500 字分段分段失败只重试当前段不要整篇重跑。成本异常LLM 侧看是否重复提交全文TTS 侧看是否失败后无限重试。脚本里设置最大重试次数并记录每次请求的模型、输入长度、返回状态。Claude Code 配置不生效检查settings.json是否在正确项目目录环境变量是否被 shell 覆盖。Codex 配置不生效检查config.toml中base_url是否指向https://taotoken.net/api同时确认没有把ANTHROPIC_*变量写进 Codex。8. 文末 CTA模型对话 → Coding Plan → 创建 Key → Claude Code 文档如果你准备把 VideoAgent 视频转播客跑通建议按下面顺序操作先去模型对话确认 LLM 和 TTS 模型 IDhttps://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_chat如果你的主要场景是 Claude Code、Codex 这类 coding agent查看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_plan创建 LLM 与 TTS 两个独立 Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_keys配 Claude Code 时参考文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_claudecode配置时记住两句话Key 用YOUR_API_KEY替换Base URL 填https://taotoken.net/api。LLM 链路负责把字幕改成适耳口播稿TTS 链路负责把口播稿变成podcast_full.mp3。两条链路分开建 Key、统一走 TaoToken视频转播客的成本和排障都会清楚很多。需要从头创建 Key 时从这里进入官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentvideopodcast_final 。
返回列表