You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pyannote分箱结果用OpenAI Whisper将印地语音频转写为英文?

解决方案

要实现印地语音频的英文转写(转录+翻译),只需利用Whisper内置的翻译功能,修改以下核心逻辑即可:

  • 在调用model.transcribe()时添加task="translate"参数,让模型直接将印地语内容翻译成英文输出。
  • 保留language="hi"参数可帮助模型精准识别输入语言,进一步提升翻译准确性。

修改后的完整代码

import whisper
from pydub import AudioSegment
from pyannote.database.util import load_rttm
import os

# 加载Whisper模型(确保模型已缓存)
model = whisper.load_model("base")

# 提取音频片段并完成转录翻译的函数
def transcribe_segment(audio_path, start_time, end_time, model):
    audio = AudioSegment.from_wav(audio_path)
    segment = audio[start_time * 1000:end_time * 1000]
    segment.export("temp_segment.wav", format="wav")
    # 关键修改:添加task="translate"实现直接翻译为英文
    result = model.transcribe("temp_segment.wav", language="hi", task="translate")
    os.remove("temp_segment.wav")  # 转录完成后删除临时文件
    return result["text"]

# 加载RTTM文件中的说话人分箱结果
rttm_file = "audio1.rttm"
rttm_data = load_rttm(rttm_file)
diarization = rttm_data[next(iter(rttm_data))]  # 假设RTTM中仅对应一个音频文件

# 准备输出格式
audio_path = "hindi_audio.wav"
output = []

# 处理每个音频片段并完成转录翻译
for segment, _, speaker in diarization.itertracks(yield_label=True):
    start_time = segment.start
    end_time = segment.end
    transcript = transcribe_segment(audio_path, start_time, end_time, model)
    output.append({
        "speaker": speaker,
        "transcript": transcript,
        "start_time": start_time,
        "end_time": end_time
    })

# 打印结果
for entry in output:
    print(f"Speaker {entry['speaker']}: {entry['transcript']}")
    print(f"Start time: {entry['start_time']}")
    print(f"End time: {entry['end_time']}")
    print()

额外优化建议

若想避免生成临时文件,可直接将音频片段转换为Whisper支持的numpy数组格式,提升运行效率:

import numpy as np

def transcribe_segment(audio_path, start_time, end_time, model):
    audio = AudioSegment.from_wav(audio_path)
    segment = audio[start_time * 1000:end_time * 1000]
    # 直接转换为numpy数组,跳过临时文件步骤
    samples = np.array(segment.get_array_of_samples())
    audio_np = samples.astype(np.float32) / 32768.0  # 转换为Whisper要求的格式
    result = model.transcribe(audio_np, language="hi", task="translate")
    return result["text"]

内容的提问来源于stack exchange,提问作者Chaitanya Kale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:13:18