deepseek生成

1. DeepSeek 翻译偶尔只返回一行

现象:明明传了多行字幕,DeepSeek 却合并成一行返回

原因:AI 模型没理解"按行翻译"的要求,随机抽风

解决方案

  • System prompt 明确说"每行分别翻译,一行对应一行,不要编号"
  • User prompt 去掉多余的"翻译:"前缀,直接传文本
  • 降低 temperature 到 0.1-0.3 减少创造性
{"role": "system", "content": "将每行中文翻译成闽南语,保持行数不变,每行一句译文,不加序号。"}

2. TTS 返回的 audio 不是 base64,而是包含 URL 的对象

现象

✗ 失败: argument should be a bytes-like object or ASCII string, not 'Audio'

原因qwen3-tts-flash 返回的 response.output.audio 是一个 Audio 对象,里面包含 url 字段指向 OSS 上的音频文件,而不是直接返回音频数据。

调试方法:打印 type()dir() 查看对象结构

print(f"response.output.audio类型: {type(response.output.audio)}")
print(f"audio属性: {dir(response.output.audio)}")

解决方案:从 audio.url 下载音频

audio_url = response.output.audio.url
audio_data = requests.get(audio_url).content

3. 变量未定义错误

现象

name 'subtitle_file' is not defined

原因save_translated_text() 直接传了字符串常量,没有赋值给变量,后面 TTS 调用时找不到

解决方案:先定义变量再使用

subtitle_file = f"MinNan_{info['bvid']}.txt"
save_translated_text(translated, subtitle_file)
qwtts.tts(subtitle_file, ...)

4. 字幕窗口切分逻辑

问题:如何确保每条字幕只被处理一次,不重不漏

解决方案:用 s >= cur_end 判断字幕是否超出当前窗口,超出则保存当前窗口并开启新窗口

for s, e, t in subs:
    if s >= cur_end:      # 字幕start超出窗口边界
        if texts:
            windows.append(...)  # 保存当前窗口
        cur_start = s     # 新窗口从当前字幕开始
        cur_end = s + 20
        texts = [t]       # 当前字幕加入新窗口
    else:
        texts.append(t)   # 在当前窗口内

5. 音频格式确认

确认qwen3-tts-flash 默认输出 WAV 格式,通过 OSS URL 下载


最终工作流

B站视频 → 提取字幕 → DeepSeek翻译成闽南语 → 保存为.txt
                                    ↓
                         按20秒窗口打包
                                    ↓
                         Qwen3-TTS生成音频
                                    ↓
                         下载OSS上的WAV文件
                                    ↓
                         保存为 字幕_起始s_结束s.wav
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐