7月份的项目
·
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
更多推荐

所有评论(0)