你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何使用视频翻译
注意
此功能目前处于公开预览状态。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
本文介绍如何在工作室中使用 Azure AI 语音视频翻译。
只需一个原始视频即可开始使用。 查看视频翻译是否支持你的语言和区域。
创建一个视频翻译项目
要创建视频翻译项目,请执行以下步骤:
登录 Speech Studio。
选择要使用的订阅和语音资源。
选择“视频翻译”。
在“创建和管理项目”页上,选择“创建项目”。
在“新建项目”页上,选择“语音类型”。
对于“声音类型”,可以选择“预生成的神经网络声音”或“个人声音”。 对于预生成的神经网络声音,系统通过将视频中的说话人声音与预生成的声音匹配,自动选择最合适的预生成语音。 系统针对个人语音提供了一种模型,该模型只需几秒即可生成高质量的语音副本。
注意
要使用个人声音,需要申请访问权限。
通过拖放视频文件或手动选择文件来上传视频文件。
确保视频采用 .mp4 格式、小于 500 MB 且短于 60 分钟。
提供“项目名称”,然后选择“说话人数”、“视频语言”、“翻译为”语言”。
如果要使用自己的字幕文件,请选择“添加字幕文件”。 可以选择上传源字幕文件或目标字幕文件。 字幕文件可以采用 WebVTT 或 JSON 格式。 可以通过选择“下载示例 VTT 文件”来下载示例 VTT 文件以供参考。
查看定价信息和行为准则后,继续创建项目。
上传完成后,可以在项目选项卡上检查处理状态。
创建项目后,可以选择该项目以查看详细设置,并根据偏好进行调整。
查看并调整声音设置
在“项目详细信息”页上,该项目在“视频”下提供“翻译”和“原始”这两个选项卡,并支持并排比较。
在视频右侧,可以查看原始脚本和翻译后的脚本。 如果将鼠标悬停在原始脚本的各个部分上,会使视频自动跳转到原始视频的相应片段,如果将鼠标悬停在已翻译脚本的各个部分上,会使视频跳转到相应的已翻译片段。
还可以根据需要添加或移除片段。 如果要添加片段,请确保新片段的时间戳不与上一个和下一个片段重叠,且片段结束时间应大于开始时间。 时间戳的正确格式应为 hh:mm:ss.ms
。 否则,无法应用更改。
可以使用视频下方的音频波形直接调整脚本的时间范围。 选择“应用更改”后,将会应用调整。
如果遇到声音名称为“无法识别”的片段,可能是因为系统无法准确检测声音,尤其是在说话人声音重叠的情况下。 在这种情况下,建议手动更改声音名称。
如果要调整声音,请选择“声音设置”进行一些更改。 在“声音设置”页上,可以调整声音类型、性别和声音。 选择“声音”右侧的声音示例以确定所选的声音。 如果发现没有声音,可以通过选择“添加说话人”来添加新的声音名称。 更改设置后,选择“更新”。
如果多次进行更改但尚未完成,只需选择“保存”即可保存所做的更改。 进行所有更改后,选择“应用更改”将其应用到视频。 只有在选择“应用更改”后,才会向你收费。
可以通过选择“新语言”将原始视频翻译为新语言。 在“翻译”页上,可以选择新的翻译语言和声音类型。 翻译好视频文件后,系统将自动创建一个新项目。
相关内容
视频翻译 REST API 有助于将视频翻译无缝集成到应用程序中。 它支持上传、管理和优化视频翻译,并多次迭代进行持续改进。 本文介绍如何通过 REST API 使用视频翻译。
此图高度概括了该工作流。
可使用以下 REST API 操作进行视频翻译:
操作 | 方法 | REST API 调用 |
---|---|---|
创建翻译 | PUT |
/translations/{translationId} |
列出翻译 | GET |
/translations |
按翻译 ID 获取翻译 | GET |
/translations/{translationId} |
创建迭代 | PUT |
/translations/{translationId}/iterations/{iterationId} |
列出迭代 | GET |
/translations/{translationId}/iterations |
按迭代 ID 获取迭代 | GET |
/translations/{translationId}/iterations/{iterationId} |
按操作 ID 获取操作 | GET |
/operations/{operationId} |
按翻译 ID 删除翻译 | DELETE |
/translations/{translationId} |
有关代码示例,请参阅 GitHub。
本文概述了 API 过程的主要步骤,包括创建翻译、创建迭代、检查每个操作的状态、按迭代 ID 获取迭代,以及按翻译 ID 删除翻译。 有关完整详细信息,请参阅表中每个 API 对应的链接。
创建翻译
要提交视频翻译请求,需要按照以下说明构造 HTTP PUT 请求路径和正文:
指定
Operation-Id
:每个操作的Operation-Id
必须是唯一的。 它可确保单独跟踪每个操作。 将[operationId]
替换为操作 ID。指定
translationId
:translationId
必须是唯一的。 将[translationId]
替换为翻译 ID。设置所需的输入:包括详细信息,例如
sourceLocale
、targetLocale
、voiceKind
和videoFileUrl
。 确保具有来自 Azure Blob 存储的视频 URL。 有关视频翻译支持的语言,请参阅支持的源语言和目标语言。 可以将voiceKind
参数设置为PlatformVoice
或PersonalVoice
。 对于PlatformVoice
,系统通过将视频中的说话人声音与预生成的声音匹配,自动选择最合适的预生成语音。 系统针对PersonalVoice
提供了一种模型,该模型只需几秒即可生成高质量的语音副本。注意
要使用个人声音,需要申请访问权限。
将
[YourResourceKey]
替换为语音资源密钥,将[YourSpeechRegion]
替换为语音资源区域。
创建翻译不会启动翻译过程。 可以通过创建迭代来开始翻译视频。 下面是 Windows shell 示例。 如果 URL 包含 &
,请确保使用 ^&
对 &
进行转义。 在以下示例代码中,我们将使用公共视频 URL,欢迎将其用于你自己的测试。
curl -v -X PUT -H "Ocp-Apim-Subscription-Key: [YourResourceKey]" -H "Operation-Id: [operationId]" -H "Content-Type: application/json" -d "{\"displayName\": \"[YourDisplayName]\",\"description\": \"[OptionalYourDescription]\",\"input\": {\"sourceLocale\": \"[VideoSourceLocale]\",\"targetLocale\": \"[TranslationTargetLocale]\",\"voiceKind\": \"[PlatformVoice/PersonalVoice]\",\"speakerCount\": [OptionalVideoSpeakerCount],\"subtitleMaxCharCountPerSegment\": [OptionalYourPreferredSubtitleMaxCharCountPerSegment],\"exportSubtitleInVideo\": [Optional true/false],\"videoFileUrl\": \"https://speechstudioprodpublicsa.blob.core.windows.net/ttsvoice/VideoTranslation/PublicDoc/SampleData/es-ES-TryOutOriginal.mp4\"}}" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/translations/[translationId]?api-version=2024-05-20-preview"
重要
通过 API 创建的数据不会显示在 Speech Studio 中,并且 API 与 Speech Studio 之间的数据不会同步。
你应该会收到以下格式的响应正文:
{
"input": {
"sourceLocale": "zh-CN",
"targetLocale": "en-US",
"voiceKind": "PlatformVoice",
"speakerCount": 1,
"subtitleMaxCharCountPerSegment": 30,
"exportSubtitleInVideo": true
},
"status": "NotStarted",
"lastActionDateTime": "2024-09-20T06:25:05.058Z",
"id": "mytranslation0920",
"displayName": "demo",
"description": "for testing",
"createdDateTime": "2024-09-20T06:25:05.058Z"
}
status 属性应从 NotStarted
状态发展为 Running
,最后变更为 Succeeded
或 Failed
。 可定期调用按操作 ID 获取操作 API,直到返回 Succeeded
或 Failed
状态。 通过此操作可监视翻译创建过程的进度。
按操作 ID 获取操作
按特定操作的 ID 检查该操作的状态。 操作 ID 对于每个操作都是唯一的,因此可以单独跟踪每个操作。
将 [YourResourceKey]
替换为语音资源密钥,将 [YourSpeechRegion]
替换为语音资源区域,将 [operationId]
替换为要检查的操作 ID。
curl -v -X GET -H "Ocp-Apim-Subscription-Key:[YourResourceKey]" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/operations/[operationId]?api-version=2024-05-20-preview"
你应该会收到以下格式的响应正文:
{
"id": "createtranslation0920-1",
"status": "Running"
}
创建迭代
要开始翻译视频或更新现有翻译的迭代,需要按照以下说明构造 HTTP PUT 请求路径和正文:
- 指定
Operation-Id
:每个操作(例如创建每次迭代)的Operation-Id
必须是唯一的。 将[operationId]
替换为此操作的唯一 ID。 - 指定
translationId
:如果在单个翻译下执行多个迭代,则翻译 ID 保持不变。 - 指定
iterationId
:每个操作的iterationId
必须是唯一的。 将[iterationId]
替换为迭代 ID。 - 设置所需的输入:包括详细信息,例如
speakerCount
、subtitleMaxCharCountPerSegment
、exportSubtitleInVideo
或webvttFile
。 默认情况下,输出视频中没有嵌入字幕。 - 将
[YourResourceKey]
替换为语音资源密钥,将[YourSpeechRegion]
替换为语音资源区域。
下面是 Windows shell 示例。 如果 URL 包含 &
,请确保使用 ^&
对 &
进行转义。
curl -v -X PUT -H "Ocp-Apim-Subscription-Key: [YourResourceKey]" -H "Operation-Id: [operationId]" -H "Content-Type: application/json" -d "{\"input\": {\"speakerCount\": [OptionalVideoSpeakerCount],\"subtitleMaxCharCountPerSegment\": [OptionalYourPreferredSubtitleMaxCharCountPerSegment],\"exportSubtitleInVideo\": [Optional true/false],\"webvttFile\": {\"Kind\": \"[SourceLocaleSubtitle/TargetLocaleSubtitle/MetadataJson]\", \"url\": \"[AzureBlobUrlWithSas]\"}}}" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/translations/[translationId]/iterations/[iterationId]?api-version=2024-05-20-preview"
注意
创建迭代时,如果已在创建翻译期间指定可选参数 speakerCount
、subtitleMaxCharCountPerSegment
和 exportSubtitleInVideo
,则无需再次指定这些参数。 这些值将从翻译设置中继承。 创建迭代时定义这些参数后,新值将替代原始设置。
创建第一次迭代时不需要 webvttFile
参数。 但是,从第二次迭代开始,必须在迭代过程中指定 webvttFile
参数。 需要下载 webvtt 文件,进行必要的编辑,然后将其上传到 Azure Blob 存储。 需要在 curl 代码中指定 Blob URL。
通过 API 创建的数据不会显示在 Speech Studio 中,并且 API 与 Speech Studio 之间的数据不会同步。
字幕文件可以采用 WebVTT 或 JSON 格式。 如果不确定如何准备 WebVTT 文件,请参阅以下示例格式。
00:00:01.010 --> 00:00:06.030
Hello this is a sample subtitle.
00:00:07.030 --> 00:00:09.030
Hello this is a sample subtitle.
你应该会收到以下格式的响应正文:
{
"input": {
"speakerCount": 1,
"subtitleMaxCharCountPerSegment": 30,
"exportSubtitleInVideo": true
},
"status": "Not Started",
"lastActionDateTime": "2024-09-20T06:31:53.760Z",
"id": "firstiteration0920",
"createdDateTime": "2024-09-20T06:31:53.760Z"
}
可以使用所指定的 operationId
并定期调用按操作 ID 获取操作 API,直到返回 Succeeded
或 Failed
状态。 通过此操作可监视迭代创建过程的进度。
按迭代 ID 获取迭代
若要按特定迭代的 ID 检索该迭代的详细信息,请使用 HTTP GET 请求。 将 [YourResourceKey]
替换为语音资源密钥,将 [YourSpeechRegion]
替换为语音资源区域,将 [translationId]
替换为要检查的翻译 ID,将 [iterationId]
替换为要检查的迭代 ID。
curl -v -X GET -H "Ocp-Apim-Subscription-Key: [YourResourceKey]" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/translations/[translationId]/iterations/[iterationId]?api-version=2024-05-20-preview"
你应该会收到以下格式的响应正文:
{
"input": {
"speaker Count": 1,
"subtitleMaxCharCountPerSegment": 30,
"exportSubtitleInVideo": true
},
"result": {
"translatedVideoFileUrl": "https://xxx.blob.core.windows.net/container1/video.mp4?sv=2023-01-03&st=2024-05-20T08%3A27%3A15Z&se=2024-05-21T08%3A27%3A15Z&sr=b&sp=r&sig=xxx",
"sourceLocaleSubtitleWebvttFileUrl": "https://xxx.blob.core.windows.net/container1/sourceLocale.vtt?sv=2023-01-03&st=2024-05-20T08%3A27%3A15Z&se=2024-05-21T08%3A27%3A15Z&sr=b&sp=r&sig=xxx",
"targetLocaleSubtitleWebvttFileUrl": "https://xxx.blob.core.windows.net/container1/targetLocale.vtt?sv=2023-01-03&st=2024-05-20T08%3A27%3A15Z&se=2024-05-21T08%3A27%3A15Z&sr=b&sp=r&sig=xxx",
"metadataJsonWebvttFileUrl": "https://xxx.blob.core.windows.net/container1/metadataJsonLocale.vtt?sv=2023-01-03&st=2024-05-20T08%3A27%3A15Z&se=2024-05-21T08%3A27%3A15Z&sr=b&sp=r&sig=xxx"
},
"status": "Succeeded",
"lastActionDateTime": "2024-09-20T06:32:59.933Z",
"id": "firstiteration0920",
"createdDateTime": "2024-09-20T06:31:53.760Z"
}
按翻译 ID 删除翻译
删除由 translationId
标识的特定翻译。 此操作还会删除与此翻译关联的所有迭代。 将 [YourResourceKey]
替换为语音资源密钥,将 [YourSpeechRegion]
替换为语音资源区域,将 [translationId]
替换为要删除的翻译 ID。 如果未手动删除,服务会将翻译历史记录保留最多 31 天。
curl -v -X DELETE -H "Ocp-Apim-Subscription-Key: [YourResourceKey]" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/translations/[translationId]?api-version=2024-05-20-preview"
如果删除请求成功,则响应头包含 HTTP/1.1 204 No Content
。
其他信息
本部分为上面未详细介绍的其他 API 调用提供了 curl 命令。 可使用以下命令探索每个 API。
列出翻译
若要列出已在资源帐户中上传和处理的所有视频翻译,请发出 HTTP GET 请求,如以下示例所示。 将 YourResourceKey
替换为语音资源密钥,将 YourSpeechRegion
替换为语音资源区域。
curl -v -X GET -H "Ocp-Apim-Subscription-Key: [YourResourceKey]" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/translations?api-version=2024-05-20-preview"
按翻译 ID 获取翻译
此操作会检索由唯一 translationId
标识的特定翻译的详细信息。 将 [YourResourceKey]
替换为语音资源密钥,将 [YourSpeechRegion]
替换为语音资源区域,将 [translationId]
替换为要检查的翻译 ID。
curl -v -X GET -H "Ocp-Apim-Subscription-Key: [YourResourceKey]" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/translations/[translationId]?api-version=2024-05-20-preview"
列出迭代
列出特定翻译的所有迭代。 此请求会列出所有迭代,但不提供详细信息。 将 [YourResourceKey]
替换为语音资源密钥,将 [YourSpeechRegion]
替换为语音资源区域,将 [translationId]
替换为要检查的翻译 ID。
curl -v -X GET -H "Ocp-Apim-Subscription-Key: [YourResourceKey]" "https://[YourSpeechRegion].api.cognitive.microsoft.com/videotranslation/translations/[translationId]/iterations?api-version=2024-05-20-preview"
HTTP 状态代码
本部分详细介绍来自视频翻译 REST API 的 HTTP 响应代码和消息。
HTTP 200 OK
"HTTP 200 OK" 表示请求成功。
HTTP 204 错误
“HTTP 204 错误" 指示请求成功,但资源不存在。 例如:
- 你尝试获取或删除不存在的翻译。
- 你已成功删除翻译。
HTTP 400 错误
下面是可能导致 400 错误的示例:
- 指定的源或目标区域设置不在支持的区域设置中。
- 你尝试使用 F0 语音资源,但该区域仅支持(标准)语音资源定价层。
HTTP 500 错误
"HTTP 500 内部服务器错误" 指示请求失败。 响应正文包含错误消息。