使用语音转文本添加字幕

在本指南中,你将了解如何使用语音转文本创建字幕。 添加字幕是将电视广播、网络广播、电影、视频、直播活动或其他产品的音频内容转换为文本,然后在屏幕、显示器或其他视觉显示系统中显示文本的过程。

概念包括如何将字幕与输入音频同步、应用亵渎内容筛选器、获取部分结果、应用自定义项以及识别多语言方案的口语。 本指南涵盖为语音添加字幕,但不包括扬声器 ID 或声音效果,如响铃。

下面是一些常见字幕方案:

  • 在线课程和教学视频
  • 体育活动
  • 语音和视频通话

下面是使用字幕时的注意事项:

  • 让受众知道字幕是由自动化服务生成的。
  • 在屏幕上水平居中标题,字体变大且突出。
  • 考虑是否使用部分结果、何时开始显示标题以及一次显示多少个单词。
  • 了解字幕协议,如 SMPTE-TT
  • 考虑输出格式,如 SRT(SubRip 文本)和 WebVTT(Web 视频文本轨道)。 这些内容可以加载到大多数视频播放器(如 VLC)上,从而自动将字幕添加到视频中。

提示

尝试使用 Speech Studio,并选择示例视频剪辑以查看实时处理或脱机处理的字幕结果。 字幕可以附带实时或预先录制的语音。 无论是显示实时字幕还是录制字幕,都可以使用语音 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 属性设置为介于 02147483647 之间的值来完成此操作。 设置的值是在语音服务返回 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 种候选语言,音频中应至少有一种语言。 语音服务返回音频中最有可能的语言。

用于提高准确性的自定义项

短语列表是在开始语音识别之前提供的单词或短语列表。 添加到短语列表的短语具有较高的重要性,从而更有可能被识别。

短语的示例包括:

  • 名称
  • 地理位置
  • 同音词
  • 行业或组织独有的单词或首字母缩写词

在某些情况下,训练自定义模型可能是提高准确性的最佳选择。 例如,如果要为齿颚矫正讲座添加字幕,则可能需要使用相应的域数据训练自定义模型。

后续步骤