Skip to content

使用本地脚本生成中英文配音 ​

这是项目提供的独立命令行工具,用于准备视频或演示配音,不是 Sharp Stock 应用内功能。需要安装 Python 3.10 或更新版本,无需安装额外 Python 库。在 Windows 的 PowerShell 或 Mac 的终端中运行。

配置 API Key ​

  1. 进入豆包语音新版控制台。
  2. 在需要使用的项目中开通“豆包语音合成模型 2.0”,确认可用额度及音色授权。
  3. 打开控制台的 API Key 管理,创建或复制可访问该项目的语音服务 API Key。脚本使用新版 X-Api-Key 鉴权,不需要 AppID 或 Access Token。
  4. 在运行脚本的终端中设置环境变量。请将示例值替换成实际密钥,不要将密钥写入脚本或提交到 Git。

Windows PowerShell(仅当前窗口):

powershell
$env:DOUBAO_TTS_API_KEY = '你的语音服务 API Key'

如需保存到 Windows 当前用户的环境变量:

powershell
[Environment]::SetEnvironmentVariable('DOUBAO_TTS_API_KEY', $env:DOUBAO_TTS_API_KEY, 'User')

先完成当前窗口配置,再执行保存命令。新打开的终端会读取保存的值;若终端所在应用已经运行,可能需要重启该应用。

Mac 终端(仅当前窗口):

bash
export DOUBAO_TTS_API_KEY='你的语音服务 API Key'

脚本只读取环境变量,不自动读取项目的 .env 文件。

生成配音 ​

在项目根目录运行。Windows 使用 python;Mac 若没有该命令,替换为 python3。

powershell
python scripts/doubao-tts.py --lang zh --text "欢迎使用 Sharp Stock。" --output output/voice_zh.wav
python scripts/doubao-tts.py --lang en --text "Welcome to Sharp Stock." --output output/voice_en.wav

--lang zh 自动使用“阳光青年 2.0”;--lang en 自动使用 Ryan(美式英语)。语言由参数选择,不根据文本猜测;中英混合内容仍使用所选音色。两种语言均通过 V3 HTTP 单向流接口调用 seed-tts-2.0。

也可从 UTF-8 文本文件读取完整文案,避免多行文本或引号影响终端命令:

powershell
python scripts/doubao-tts.py --lang zh --text-file output/narration.txt --output output/narration.wav

--text 和 --text-file 必须且只能指定一个。文本文件支持 UTF-8 BOM。每次命令发送一个合成请求,不自动分段;如服务提示文本过长,请按段准备文案并分别生成。

音频设置与注意事项 ​

  • 默认生成 24 kHz、16 位、单声道 WAV。脚本接收 PCM 后封装 WAV,避免流式 WAV 重复文件头。
  • 可增加 --sample-rate 48000 设置 48 kHz;可选值为 8000、16000、22050、24000、32000、44100、48000。
  • --speech-rate 0 为正常语速,范围 -50 到 100;-50 为 0.5 倍速,100 为 2 倍速。
  • --timeout 120 设置网络等待超时秒数,默认 120 秒,不是整个任务的总时限。
  • 输出文件夹会自动创建。已有同名文件时直接报错,不会覆盖,也不会为该次操作调用接口。
  • 未收到合成成功标记、音频损坏或网络失败时,不保存 WAV。错误不会自动重试,避免意外重复调用。
  • 音频会在内存中完整接收后保存;适合按段生成配音。生成结果占用内存与音频长度成正比。
  • 缺少密钥:检查当前终端的 DOUBAO_TTS_API_KEY。HTTP 401/403:检查语音服务密钥、项目及开通状态。错误码 45000000:检查音色权限。并发或额度错误:检查控制台用量。
  • 查看全部参数:python scripts/doubao-tts.py --help。

参考:官方 V3 接口说明、官方音色列表。Ryan 使用 en_male_ryan_uranus_bigtts,阳光青年使用 zh_male_yangguangqingnian_uranus_bigtts。Ryan 仅支持单向流,本脚本使用该接口。