Azure Transcription

Polar Sponsor
爱发电 赞助
.NET 9.0

企业级语音转写,支持实时流式转写、说话人分离、多语言及批量音频处理。

Azure语音转写专业版

功能概述

Azure语音转写专业版是一项面向实际任务的技能,主要用于1. 实时流式转写;执行 批量转写队列管理 操作,处理输入数据并返回结果;

核心要点

  • 验证执行结果,确认输出符合预期格式;
  • 参考 批量转写队列管理 相关配置参数进行设置;
  • 执行 实时流式转写 操作,处理输入数据并返回结果;

使用与执行

参考 实时流式转写 相关配置参数进行设置;2. 说话人分离(Diarization);输入 : 用户提供说话人分离(Diarization)所需的指令和必要。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

结果检查与注意事项

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Azure语音转写专业版

核心能力

1. 实时流式转写

import os
from azure.ai.transcription import TranscriptionClient

client = TranscriptionClient(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    credential=os.environ["TRANSCRIPTION_KEY"]
)

# 实时流式转写
stream = client.begin_stream_transcription(locale="zh-CN")

# 发送音频文件进行实时转写
stream.send_audio_file("realtime_audio.wav")

# 接收实时转写结果
for event in stream:
    if event.is_partial:
        print(f"[实时] {event.text}", end="r")
    else:
        print(f"[完成] {event.text}")
  • 执行批量转写队列管理操作,处理输入数据并返回结果

  • 验证执行结果,确认输出符合预期格式

  • 参考批量转写队列管理相关配置参数进行设置

  • 执行实时流式转写操作,处理输入数据并返回结果

  • 验证执行结果,确认输出符合预期格式

  • 参考实时流式转写相关配置参数进行设置

2. 说话人分离(Diarization)

# 启用说话人分离的批量转写
job = client.begin_transcription(
    name="meeting-with-diarization",
    locale="zh-CN",
    content_urls=["https:///meeting.wav"],
    diarization_enabled=True,
    diarization_config={
        "max_speakers": 5,
        "enabled": True
    }
)

result = job.result()

# 输出带说话人标识的转写结果
for segment in result.segments:
    speaker = segment.speaker  # 说话人标识: Speaker1, Speaker2, ...
    print(f"[{speaker}] [{segment.start_time:.1f}s-{segment.end_time:.1f}s] {segment.text}")

输入: 用户提供说话人分离(Diarization)所需的指令和必要参数。 处理: 按照skill规范执行说话人分离(Diarization)操作,遵循单一意图原则。

  • 执行说话人分离(Diarization)操作,处理输入数据并返回结果
  • 验证执行结果,确认输出符合预期格式
  • 异常时参考错误处理章节进行恢复
  • 关键参数: 说话人分离(diarization) 选项

3. 批量转写队列管理

import os
from concurrent.futures import ThreadPoolExecutor, as_completed
from azure.ai.transcription import TranscriptionClient

class BatchTranscriptionManager:
    def __init__(self, endpoint, key, max_workers=5):
        self.client = TranscriptionClient(endpoint=endpoint, credential=key)
        self.max_workers = max_workers
        self.results = []
        self.failed = []

    def submit_transcription(self, audio_url, name, locale="zh-CN", 
                              diarization=True, callback=None):
        """提交单个转写任务"""
        try:
            job = self.client.begin_transcription(
                name=name,
                locale=locale,
                content_urls=[audio_url],
                diarization_enabled=diarization
            )
            result = job.result()
            
            output = {
                'name': name,
                'status': result.status,
                'transcript': result.transcript,
                'segments': result.segments if hasattr(result, 'segments') else []
            }
            self.results.append(output)
            
            if callback:
                callback(output)
            return output
        except Exception as e:
            self.failed.append({'name': name, 'error': str(e)})
            return None

    def batch_transcribe(self, audio_files, locale="zh-CN", diarization=True):
        """批量转写"""
        with ThreadPoolExecutor(max_workers=self.max_workers) as executor:
            futures = []
            for audio in audio_files:
                future = executor.submit(
                    self.submit_transcription,
                    audio['url'], audio['name'], locale, diarization
                )
                futures.append(future)
            
            for future in as_completed(futures):
                future.result()
        
        return {'success': self.results, 'failed': self.failed}

    def export_results(self, format='srt', output_dir='./transcripts'):
        """导出转写结果"""
        os.makedirs(output_dir, exist_ok=True)
        for result in self.results:
            if format == 'srt':
                self._export_srt(result, output_dir)
            elif format == 'vtt':
                self._export_vtt(result, output_dir)
            elif format == 'json':
                self._export_json(result, output_dir)

    def _export_srt(self, result, output_dir):
        path = os.path.join(output_dir, f"{result['name']}.srt")
        with open(path, 'w', encoding='utf-8') as f:
            for i, seg in enumerate(result['segments'], 1):
                start = self._format_time(seg.start_time)
                end = self._format_time(seg.end_time)
                speaker = f"[{seg.speaker}] " if hasattr(seg, 'speaker') else ""
                f.write(f"{i}n{start} --> {end}n{speaker}{seg.text}nn")

    def _format_time(self, seconds):
        h = int(seconds // 3600)
        m = int((seconds % 3600) // 60)
        s = int(seconds % 60)
        ms = int((seconds % 1) * 1000)
        return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"
  • 执行批量转写队列管理操作,处理输入数据并返回结果
  • 验证执行结果,确认输出符合预期格式
  • 异常时参考错误处理章节进行恢复
  • 关键参数: 批量转写队列管理 选项

能力覆盖范围

本skill还覆盖以下能力场景: 企业级语音转写工、支持实时流式转写、批量处理与自定义、语音转写专业版、面向企业团队与专、业用户的高级语音、转写工具、核心能力、实时流式语音转写、支持麦克风输入与、流式音频、自动识别不同说话、支持大规模音频文、件处理、自定义语音模型集、提升专业领域识别、准确率、多语言混合转写。这些能力在上述核心功能中均有对应处理逻辑。

适用场景

场景一:企业会议实时字幕

企业会议系统实时生成字幕与会议纪要。

# 会议实时字幕系统
meeting_manager = BatchTranscriptionManager(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    key=os.environ["TRANSCRIPTION_KEY"]
)

# 实时流式转写会议音频
stream = client.begin_stream_transcription(locale="zh-CN")

print("=== 会议实时字幕 ===")
for event in stream:
    if not event.is_partial:
        timestamp = event.timestamp
        print(f"[{timestamp}] {event.text}")

# 会后批量处理录音(带说话人分离)
meeting_manager.submit_transcription(
    audio_url="https:///meetings/full_meeting.wav",
    name="quarterly-review-20260118",
    locale="zh-CN",
    diarization=True
)

场景二:客服通话批量转写

客服中心批量转写通话录音,用于质检与分析。

# 批量转写客服通话
manager = BatchTranscriptionManager(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    key=os.environ["TRANSCRIPTION_KEY"],
    max_workers=5
)

# 定义批量任务
call_recordings = [
    {"url": "https:///calls/call_001.wav", "name": "call_001"},
    {"url": "https:///calls/call_002.wav", "name": "call_002"},
    {"url": "https:///calls/call_003.wav", "name": "call_003"},
    {"url": "https:///calls/call_004.wav", "name": "call_004"},
    {"url": "https:///calls/call_005.wav", "name": "call_005"},
]

# 批量转写(启用说话人分离)
results = manager.batch_transcribe(call_recordings, locale="zh-CN", diarization=True)

# 导出为SRT格式
manager.export_results(format='srt', output_dir='./call_transcripts')

print(f"成功: {len(results['success'])}, 失败: {len(results['failed'])}")

场景三:多语言视频字幕批量生成

视频平台批量生成多语言字幕。

# 多语言字幕生成
video_manager = BatchTranscriptionManager(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    key=os.environ["TRANSCRIPTION_KEY"],
    max_workers=3
)

# 中文视频生成中文字幕
chinese_videos = [
    {"url": "https:///videos/video_cn_01.wav", "name": "video_cn_01"},
    {"url": "https:///videos/video_cn_02.wav", "name": "video_cn_02"},
]
video_manager.batch_transcribe(chinese_videos, locale="zh-CN", diarization=False)
video_manager.export_results(format='vtt', output_dir='./subtitles/zh-CN')

# 英文视频生成英文字幕
english_videos = [
    {"url": "https:///videos/video_en_01.wav", "name": "video_en_01"},
    {"url": "https:///videos/video_en_02.wav", "name": "video_en_02"},
]
video_manager.batch_transcribe(english_videos, locale="en-US", diarization=False)
video_manager.export_results(format='vtt', output_dir='./subtitles/en-US')

使用流程

1. 环境准备

# 依赖说明
pip install azure-ai-transcription

# 配置环境变量
export TRANSCRIPTION_ENDPOINT="https://.cognitiveservices.azure.com"
export TRANSCRIPTION_KEY="API_KEY"

2. 实时转写

import os
from azure.ai.transcription import TranscriptionClient

client = TranscriptionClient(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    credential=os.environ["TRANSCRIPTION_KEY"]
)

# 启动实时转写
stream = client.begin_stream_transcription(locale="zh-CN")
stream.send_audio_file("audio.wav")

for event in stream:
    print(event.text)

3. 批量转写

manager = BatchTranscriptionManager(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    key=os.environ["TRANSCRIPTION_KEY"]
)

results = manager.batch_transcribe(
    audio_files=[{"url": "https:///audio.wav", "name": "test"}],
    locale="zh-CN",
    diarization=True
)

manager.export_results(format='srt')

命令参数说明

  1. -with-diarization: 命令参数,用于指定操作选项
  2. -review-20260118: 命令参数,用于指定操作选项
  3. -CN: 命令参数,用于指定操作选项
  4. -US: 命令参数,用于指定操作选项

命令参数说明

  • -US: 命令参数,用于指定操作选项
  • -CN: 命令参数,用于指定操作选项

命令参数说明

  • -CN: 命令参数,用于指定操作选项
  • -US: 命令参数,用于指定操作选项

命令参数说明

  • -CN: 命令参数,用于指定操作选项
  • -US: 命令参数,用于指定操作选项

命令参数说明

  • -US: 命令参数,用于指定操作选项
  • -CN: 命令参数,用于指定操作选项

命令参数说明

  • -US: 命令参数,用于指定操作选项
  • -CN: 命令参数,用于指定操作选项

命令参数说明

  • -CN: 命令参数,用于指定操作选项
  • -US: 命令参数,用于指定操作选项

命令参数说明

  • -US: 命令参数,用于指定操作选项
  • -CN: 命令参数,用于指定操作选项

命令参数说明

  • -US: 命令参数,用于指定操作选项
  • -CN: 命令参数,用于指定操作选项

输入格式

参数名 类型 必填 说明
content string 是 相关说明
content string 否 相关说明, 默认: 默认值
content string 否 相关说明, 可选值: json/text/markdown
style string 否 输出风格, 参考 references/style.md

输出格式

{
  "success": true,
  "data": {
    result: "相关说明",
    result: "相关说明",
    result: "相关说明",
    "metadata": {
      "template_used": "reviewer",
      "word_count": 0,
      "style": "专业"
    }
  },
  "error": null
}

输出模板参考: assets/output.json

异常处理

错误场景 原因 处理方式
配置错误 参数缺失或格式错误 检查依赖说明中的配置要求
运行时错误 运行环境不满足 确认运行环境符合依赖说明
网络错误 连接超时或不可达 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案

依赖说明

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux
  • Python版本: 3.8及以上

第三方依赖

依赖项 类型 是否必需 获取方式
LLM API API 必需 由Agent内置LLM提供
Python 3 运行时 必需 python.org 下载安装
azure-ai-transcription Python SDK 必需 pip install azure-ai-transcription
Azure认知服务 云服务 必需 Azure门户创建资源
concurrent.futures Python标准库 必需 Python自带

API Key 配置

  • TRANSCRIPTION_ENDPOINT:Azure认知服务端点URL
  • TRANSCRIPTION_KEY:Azure认知服务订阅密钥
  • 与免费版使用相同的认证配置,完全兼容

可用性分类

  • 分类: MD+EXEC(纯Markdown指令,核心功能需要exec命令行执行能力)
  • 说明: 基于Markdown的AI Skill,通过自然语言指令驱动Agent执行专业语音转写任务。支持实时流式转写、说话人分离、批量队列等企业级功能,通过Python SDK调用Azure AI服务。与免费版完全兼容,可直接复用免费版的认证配置与基础转写流程。

API Key配置方式:

export API_KEY="your_api_key_here"

配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统。

案例展示

转写参数配置

参数 说明 免费版 专业版
locale 语言代码 支持 支持
diarization_enabled 说话人分离 不支持 支持
max_speakers 最大说话人数 不支持 可配置
custom_model 自定义模型 不支持 支持
profanity_filter 敏感词过滤 不支持 支持
punctuation 标点恢复 不支持 支持

输出格式对比

格式 用途 特点
纯文本 文档归档 最简格式
SRT 视频字幕 带序号与时间戳
VTT Web视频字幕 HTML5标准
JSON 程序处理 含完整元数据

常见问题

Q1:实时转写有延迟怎么办?

实时转写延迟受网络条件影响。建议使用稳定的网络连接,并适当增大音频缓冲区。

Q2:说话人分离准确率如何提升?

确保音频质量良好,说话人间隔清晰。设置合理的max_speakers参数,避免过多或过少。

Q3:批量转写如何处理失败任务?

专业版BatchTranscriptionManager自动记录失败任务,可通过retry_failed方法重试。

Q4:自定义语音模型如何接入?

在Azure门户训练自定义模型后,在转写配置中指定custom_model参数即可。

Q5:与免费版的API配置是否兼容?

完全兼容。专业版与免费版使用相同的TRANSCRIPTION_ENDPOINT和TRANSCRIPTION_KEY配置。

错误处理

错误场景 原因 处理方式
LLM响应超时或无响应 网络延迟或模型负载过高 执行ping命令测试网络连通性,检查防火墙和代理设置连接,执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令请求;确认Agent平台LLM服务正常
输入内容格式不正确 用户输入不符合skill预期格式 检查输入是否符合skill使用说明中的格式要求,参考示例章节
执行结果与预期不符 指令描述不够明确或上下文不足 提供更详细的指令描述,补充必要的上下文信息
命令执行失败 运行环境不满足要求或权限不足 确认运行环境符合依赖说明中的要求;检查命令权限设置

已知限制

  • 需要API Key,无Key环境无法使用
  • 依赖云服务,需要网络连接

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习