你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用语音转文本添加字幕
在本指南中,你将了解如何使用语音转文本创建字幕。 添加字幕是将电视广播、网络广播、电影、视频、直播活动或其他产品的音频内容转换为文本,然后在屏幕、显示器或其他视觉显示系统中显示文本的过程。
概念包括如何将字幕与输入音频同步、应用亵渎内容筛选器、获取部分结果、应用自定义项以及识别多语言方案的口语。 本指南涵盖为语音添加字幕,但不包括扬声器 ID 或声音效果,如响铃。
下面是一些常见字幕方案:
- 在线课程和教学视频
- 体育活动
- 语音和视频通话
下面是使用字幕时的注意事项:
- 让受众知道字幕是由自动化服务生成的。
- 在屏幕上水平居中标题,字体变大且突出。
- 考虑是否使用部分结果、何时开始显示标题以及一次显示多少个单词。
- 了解字幕协议,如 SMPTE-TT。
- 考虑输出格式,如 SRT(SubRip 文本)和 WebVTT(Web 视频文本轨道)。 这些内容可以加载到大多数视频播放器(如 VLC)上,从而自动将字幕添加到视频中。
字幕可以附带实时或预先录制的语音。 无论是显示实时字幕还是录制字幕,都可以使用语音 SDK 或语音 CLI 识别语音并获取听录。 还可以将批量听录 API 用于预先录制的视频。
字幕输出格式
语音服务支持输出格式,如 SRT(SubRip 文本)和 WebVTT(Web 视频文本轨道)。 这些内容可以加载到大多数视频播放器(如 VLC)上,从而自动将字幕添加到视频中。
提示
语音服务提供亵渎内容筛选器选项。 可以指定是要屏蔽、删除还是显示亵渎内容。
SRT(SubRip 文本)时间跨度输出格式为 hh:mm:ss,fff
。
1
00:00:00,180 --> 00:00:03,230
Welcome to applied Mathematics course 201.
WebVTT(Web 视频文本轨道)时间跨度输出格式为 hh:mm:ss.fff
。
WEBVTT
00:00:00.180 --> 00:00:03.230
Welcome to applied Mathematics course 201.
{
"ResultId": "8e89437b4b9349088a933f8db4ccc263",
"Duration": "00:00:03.0500000"
}
将音频输入到语音服务
如需实时字幕,请使用麦克风或音频输入流,而不是文件输入。 有关如何从麦克风识别语音的示例,请参阅语音转文本快速入门以及如何识别语音文档。 有关流式处理的详细信息,请参阅如何使用音频输入流。
如需预先录制的字幕,请将文件输入发送到语音服务。 有关详细信息,请参阅如何使用压缩的输入音频。
字幕和语音同步
你希望字幕与音频曲目同步,无论它是实时的还是预先录制的。
语音服务返回已识别语音的偏移量和持续时间。
- 偏移量:已识别的音频流的偏移量,表示为持续时间。 偏移量以时钟周期为单位,从
0
(零)时钟周期开始,与 SDK 处理的第一个音频字节相关联。 例如,偏移从开始识别时开始,因为那是 SDK 开始处理音频流的时间。 一个时钟周期表示一百纳秒,即一千万分之一秒。 - 持续时间:正在识别的语句的持续时间。 时钟周期中的持续时间不包括尾随或前导静音。
有关详细信息,请参阅获取语音识别结果。
获取部分结果
考虑何时开始显示标题以及一次显示多少个单词。 语音识别结果在语句仍在被识别时可能会发生更改。 每个 Recognizing
事件都会返回部分结果。 处理每个单词时,语音服务会在新上下文中重新评估语句,并再次返回最佳结果。 不保证新结果与上一个结果相同。 Recognized
事件返回语句的最终且完整的听录。
注意
部分结果的标点不可用。
如需预先录制的语音的字幕,或者无论延迟是否构成问题,都可以等待每条语句的完整听录,然后再显示任何单词。 在给定语句中每个单词的最终偏移量和持续时间的情况下,你知道何时显示后续单词以与声道保持同步。
实时字幕需要在延迟与准确性方面进行权衡。 可以尽快显示每个 Recognizing
事件中的文本。 但是,如果你可以接受一些延迟,则可以通过显示 Recognized
事件中的文本来提高字幕的准确性。 还有一些折中的方案,被称为“稳定的部分结果”。
可以请求语音服务返回更少且更准确的 Recognizing
事件。 通过将 SpeechServiceResponse_StablePartialResultThreshold
属性设置为介于 0
和 2147483647
之间的值来完成此操作。 设置的值是在语音服务返回 Recognizing
事件之前必须识别单词的次数。 例如,如果将 SpeechServiceResponse_StablePartialResultThreshold
属性值设置为 5
,则语音服务会在使用 Recognizing
事件向你返回部分结果之前至少确认五次单词识别。
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig->SetProperty(PropertyId::SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.SetProperty(common.SpeechServiceResponseStablePartialResultThreshold, 5)
speechConfig.setProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.setProperty(sdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
[self.speechConfig setPropertyTo:5 byId:SPXSpeechServiceResponseStablePartialResultThreshold];
self.speechConfig!.setPropertyTo(5, by: SPXPropertyId.speechServiceResponseStablePartialResultThreshold)
speech_config.set_property(property_id = speechsdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, value = 5)
spx recognize --file caption.this.mp4 --format any --property SpeechServiceResponse_StablePartialResultThreshold=5 --output vtt file - --output srt file -
请求更稳定的部分结果将减少“闪烁”或更改文本,但可能会增加延迟,因为你在等待更高的置信度结果。
稳定的部分阈值示例
在以下识别序列中,在不设置稳定的部分阈值的情况下,“math”被识别为单词,但最终文本为“mathematics”。 另外,“course 2”被识别,但最终文本是“course 201”。
RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied math
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZING: Text=welcome to applied mathematics course 2
RECOGNIZING: Text=welcome to applied mathematics course 201
RECOGNIZED: Text=Welcome to applied Mathematics course 201.
在前面的示例中,听录是累加的,没有收回任何文本。 但在其他情况下,你可能会发现部分结果不准确。 在任一情况下,不稳定的部分结果在显示时都可以被视为“闪烁”。
对于本示例,如果将稳定的部分结果阈值设置为 5
,则不会更改或返回任何单词。
RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZED: Text=Welcome to applied Mathematics course 201.
语言识别
如果音频中的语言会更改,请使用连续语言识别。 语言标识用于在与支持的语言列表比较时确定音频中所说的语言。 你最多可以提供 10 种候选语言,音频中应至少有一种语言。 语音服务返回音频中最有可能的语言。
用于提高准确性的自定义项
短语列表是在开始语音识别之前提供的单词或短语列表。 添加到短语列表的短语具有较高的重要性,从而更有可能被识别。
短语的示例包括:
- 名称
- 地理位置
- 同音词
- 行业或组织独有的单词或首字母缩写词
在某些情况下,训练自定义模型可能是提高准确性的最佳选择。 例如,如果要为齿颚矫正讲座添加字幕,则可能需要使用相应的域数据训练自定义模型。