Qwen3-ASR-0.6B步骤详解:启用timestamp输出+生成SRT/VTT字幕文件的完整流程

张开发
2026/4/9 13:55:10 15 分钟阅读

分享文章

Qwen3-ASR-0.6B步骤详解:启用timestamp输出+生成SRT/VTT字幕文件的完整流程
Qwen3-ASR-0.6B步骤详解启用timestamp输出生成SRT/VTT字幕文件的完整流程1. 环境准备与模型部署在开始使用Qwen3-ASR-0.6B之前我们需要先搭建好运行环境。这个模型支持多种部署方式这里介绍最常用的transformers库部署方法。1.1 安装必要依赖首先确保你的Python环境在3.8以上版本然后安装核心依赖包pip install transformers torch torchaudio gradio pip install numpy pandas如果你需要处理音频文件建议额外安装pip install pydub ffmpeg-python1.2 快速模型加载Qwen3-ASR-0.6B可以通过transformers库直接加载无需手动下载权重文件from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor import torch # 加载模型和处理器 model_name Qwen/Qwen3-ASR-0.6B model AutoModelForSpeechSeq2Seq.from_pretrained( model_name, torch_dtypetorch.float16, device_mapauto ) processor AutoProcessor.from_pretrained(model_name)2. 基础语音识别功能在深入了解时间戳功能之前我们先看看如何用这个模型进行基本的语音识别。2.1 简单语音转文字下面是一个最简单的语音识别示例import torchaudio # 加载音频文件 audio_path your_audio.wav waveform, sample_rate torchaudio.load(audio_path) # 处理音频并识别 inputs processor( waveform.squeeze().numpy(), sampling_ratesample_rate, return_tensorspt ) with torch.no_grad(): outputs model.generate(**inputs) # 获取识别结果 transcription processor.batch_decode(outputs, skip_special_tokensTrue)[0] print(f识别结果: {transcription})2.2 支持的多语言识别Qwen3-ASR-0.6B支持52种语言和方言你可以指定语言来提高识别准确率# 指定中文识别 inputs processor( waveform.squeeze().numpy(), sampling_ratesample_rate, return_tensorspt, text你好 # 提供提示文本可提升准确率 )3. 启用时间戳输出功能时间戳功能是Qwen3-ASR-0.6B的一大亮点可以精确到每个词的出现时间。3.1 配置时间戳参数要启用时间戳输出需要在处理音频时设置相应参数# 启用时间戳输出 inputs processor( waveform.squeeze().numpy(), sampling_ratesample_rate, return_tensorspt, return_timestampsTrue, # 关键参数启用时间戳 chunk_length_s30, # 分块处理长音频 stride_length_s[5, 5] # 重叠处理避免边界问题 )3.2 获取带时间戳的识别结果生成带时间戳的识别结果with torch.no_grad(): outputs model.generate( **inputs, return_timestampsTrue, # 生成时也要启用 output_scoresTrue ) # 解析时间戳结果 result processor.batch_decode( outputs, skip_special_tokensFalse, # 保留特殊token以解析时间戳 output_offsetsTrue # 输出时间偏移量 ) timestamps result[0][chunks] for chunk in timestamps: print(f[{chunk[timestamp][0]:.2f}-{chunk[timestamp][1]:.2f}s]: {chunk[text]})4. 生成字幕文件有了时间戳信息我们就可以生成各种格式的字幕文件了。4.1 生成SRT字幕文件SRT是最常见的字幕格式结构简单明了def generate_srt(timestamps, output_pathsubtitle.srt): with open(output_path, w, encodingutf-8) as f: for i, chunk in enumerate(timestamps, 1): start format_timestamp(chunk[timestamp][0]) end format_timestamp(chunk[timestamp][1]) text chunk[text].strip() f.write(f{i}\n) f.write(f{start} -- {end}\n) f.write(f{text}\n\n) def format_timestamp(seconds): 将秒数转换为SRT时间格式 hours int(seconds // 3600) minutes int((seconds % 3600) // 60) secs int(seconds % 60) millis int((seconds - int(seconds)) * 1000) return f{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d} # 使用示例 generate_srt(timestamps, output.srt)4.2 生成WebVTT字幕文件WebVTT是用于网页的视频字幕格式与SRT类似但更现代化def generate_vtt(timestamps, output_pathsubtitle.vtt): with open(output_path, w, encodingutf-8) as f: f.write(WEBVTT\n\n) for i, chunk in enumerate(timestamps, 1): start format_vtt_timestamp(chunk[timestamp][0]) end format_vtt_timestamp(chunk[timestamp][1]) text chunk[text].strip() f.write(f{start} -- {end}\n) f.write(f{text}\n\n) def format_vtt_timestamp(seconds): 将秒数转换为VTT时间格式 hours int(seconds // 3600) minutes int((seconds % 3600) // 60) secs int(seconds % 60) millis int((seconds - int(seconds)) * 1000) return f{hours:02d}:{minutes:02d}:{secs:02d}.{millis:03d} # 使用示例 generate_vtt(timestamps, output.vtt)5. 完整实战示例下面是一个完整的示例从音频文件到生成字幕文件的全流程import torch import torchaudio from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor def audio_to_subtitles(audio_path, output_baseoutput): # 1. 加载模型 model AutoModelForSpeechSeq2Seq.from_pretrained( Qwen/Qwen3-ASR-0.6B, torch_dtypetorch.float16, device_mapauto ) processor AutoProcessor.from_pretrained(Qwen/Qwen3-ASR-0.6B) # 2. 加载和处理音频 waveform, sample_rate torchaudio.load(audio_path) inputs processor( waveform.squeeze().numpy(), sampling_ratesample_rate, return_tensorspt, return_timestampsTrue, chunk_length_s30, stride_length_s[5, 5] ) # 3. 生成带时间戳的识别结果 with torch.no_grad(): outputs model.generate( **inputs, return_timestampsTrue, output_scoresTrue ) # 4. 解析结果 result processor.batch_decode( outputs, skip_special_tokensFalse, output_offsetsTrue ) timestamps result[0][chunks] # 5. 生成字幕文件 generate_srt(timestamps, f{output_base}.srt) generate_vtt(timestamps, f{output_base}.vtt) return timestamps # 使用示例 if __name__ __main__: audio_path your_audio_file.wav subtitles audio_to_subtitles(audio_path) print(字幕文件生成完成)6. 实用技巧与问题解决在实际使用中可能会遇到一些问题这里提供一些实用技巧。6.1 处理长音频文件对于超过30秒的长音频建议使用分块处理# 优化长音频处理 inputs processor( audio_array, sampling_ratesample_rate, return_tensorspt, return_timestampsTrue, chunk_length_s30, # 每块30秒 stride_length_s[5, 5], # 前后重叠5秒 paddinglongest # 自动填充 )6.2 提高识别准确率通过一些技巧可以提升识别效果# 提供语言提示 inputs processor( audio_array, sampling_ratesample_rate, return_tensorspt, return_timestampsTrue, text_prompt这是中文内容, # 提供语言提示 languagezh # 明确指定语言 )6.3 常见问题处理问题1内存不足解决方案使用半精度模型和分块处理model AutoModelForSpeechSeq2Seq.from_pretrained( Qwen/Qwen3-ASR-0.6B, torch_dtypetorch.float16, # 使用半精度减少内存占用 device_mapauto )问题2识别结果不准确解决方案提供更多上下文信息inputs processor( audio_array, sampling_ratesample_rate, return_tensorspt, return_timestampsTrue, text_prompt会议记录 项目讨论 技术方案 # 提供关键词提示 )7. 总结通过本文的详细步骤你应该已经掌握了使用Qwen3-ASR-0.6B进行语音识别并生成带时间戳字幕文件的完整流程。这个模型在准确性和效率方面都有很好的表现特别适合需要生成字幕的各种应用场景。关键要点回顾环境配置简单只需安装transformers等基础库时间戳功能需要显式启用相关参数SRT和VTT是两种最常用的字幕格式生成方法类似长音频需要分块处理避免内存问题和识别误差提供语言和内容提示可以显著提升识别准确率下一步建议尝试处理不同语言和方言的音频探索批量处理多个音频文件的方法考虑将字幕生成功能集成到你的应用中现在你可以开始为自己的音频内容生成专业的字幕了获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章