次の方法で共有


ビデオ翻訳を使用する方法

Note

現在、この機能はパブリック プレビュー段階にあります。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

この記事では、スタジオで Azure AI Speech ビデオ翻訳を使う方法について説明します。

最初に必要なのは、元のビデオです。 ビデオ翻訳が、ご利用の言語リージョンに対応しているか確認します。

ビデオ翻訳プロジェクトを作成する

ビデオ翻訳プロジェクトを作成するには、次の手順に従います。

  1. Speech Studio にサインインします。

  2. 使用するサブスクリプションと Speech リソースを選択します。

  3. [ビデオ翻訳] を選択します。

  4. [プロジェクトの作成と管理] ページで、[プロジェクトの作成] を選択します。

  5. [新しいプロジェクト] ページで、[音声の種類] を選択します。

    新しいプロジェクト ページで音声の種類を選択しているスクリーンショット。

    [音声のタイプ] には、[事前構築済みのニューラル音声] または [個人用音声] を選択できます。 事前構築済みのニューラル音声の場合、システムは、システムがビデオの話者の声と事前構築済みの音声を比較し、最適な事前構築済み音声を自動的に選択します。 パーソナル音声の場合、システムは、数秒で高品質の音声レプリケーションを生成するモデルを提供します。

    Note

    個人用音声を使うには、アクセスの申請が必要です。

  6. ビデオ ファイルをドラッグ アンド ドロップするか、ファイルを手動で選択して、ビデオ ファイルをアップロードします。

    [新しいプロジェクト] ページでビデオ ファイルをアップロードするスクリーンショット。

    ビデオは .mp4 形式で、500 MB 未満で、60 分未満である必要があります。

  7. [プロジェクト名] を指定し、[話者の数][ビデオの言語][翻訳先] 言語を選択します。

    新しいプロジェクト ページでビデオ情報を提供するスクリーンショット。

    独自の字幕ファイルを使用する場合は、[字幕ファイルの追加] を選択します。 ソース字幕ファイルまたはターゲット字幕ファイルのアップロードを選択することができます。 字幕ファイルは、WebVTT または JSON の形式が使用できます。 参照用としてサンプル VTT ファイルをダウンロードするには、[サンプル VTT ファイルのダウンロード] を選択します。

    新しいプロジェクト ページに字幕ファイルを追加するスクリーンショット。

  8. 価格情報と行動規範を確認した後、プロジェクトの作成に進みます。

    アップロードが完了したら、プロジェクトのタブで処理状態を確認できます。

    プロジェクト作成後は、そのプロジェクトを選択して詳細な設定を確認したり好みに応じて調整を行うことができます。

音声設定を確認して調整する

プロジェクトの詳細ページでは、[ビデオ] にプロジェクトの [翻訳済み][オリジナル] という 2 つのタブがあります。それらを並べて比較することができます。

ビデオの右側で、元のスクリプトと翻訳されたスクリプトの両方を表示できます。 元のスクリプトの各部分をポイントすると、ビデオが元のビデオの対応するセグメントに自動的にジャンプします。一方、翻訳されたスクリプトの各部分にカーソルを合わせると、ビデオは、それに対応する翻訳されたセグメントにジャンプします。

必要に応じてセグメントを追加または削除することもできます。 セグメントを追加する場合は、新しいセグメントのタイムスタンプが前のセグメントと次のセグメントと重複していないことを確認し、セグメントの終了時刻が開始時刻よりも大きい値である必要があります。 タイムスタンプの正しい形式は hh:mm:ss.ms です。 それ以外の場合は、変更を適用できません。

ビデオの下にあるオーディオ波形を使用して、スクリプトの時間枠を直接調整できます。 [変更の適用] を選択すると、調整が適用されます。

"未確認" の音声名を持つセグメントが発生した場合は、特に話者の声が重複する状況で、システムが音声を正確に検出できなかった可能性があります。 このような場合は、音声名を手動で変更することをお勧めします。

識別されていない音声名を持つ 1 つのセグメントのスクリーンショット。

音声を調整する場合は、[音声設定] を選択 して変更を加えます。 [音声設定] ページでは、音声の種類、性別、音声を調整できます。 [音声] の右側にある音声サンプルを選択して、音声の選択を決定します。 音声が見つからない場合は、[話者の追加] を選択して新しい音声名を追加できます。 設定を変更した後、[更新] を選択します。

[音声設定] ページの音声設定の調整のスクリーンショット。

変更を複数回行ってもまだ完了していない場合は、[保存] を選択すると、行った変更が保存されます。 すべての変更を行った後、[変更の適用] を選択してビデオに適用します。 [変更の適用] を選択した後にのみ課金されます。

すべての変更を行った後に [変更の適用] ボタンを選択したスクリーンショット。

[新しい言語] を選択すると、元のビデオを新しい言語に翻訳できます。 [翻訳] ページでは、翻訳対象の新しい言語と音声の種類を選択できます。 ビデオ ファイルが翻訳されると、新しいプロジェクトが自動的に作成されます。

ビデオ翻訳 REST API を使用すると、アプリケーションへのビデオ翻訳のシームレスな統合が容易になります。 この API は、ビデオ翻訳のアップロード、管理、調整をサポートし、継続的な改善のために複数のイテレーションを行います。 この記事では、REST API を介してビデオ翻訳を利用する方法について説明します。

次の図は、ワークフローの概要を示しています。

ビデオ翻訳 API ワークフローの図。

ビデオ翻訳には、次の REST API 操作を使用できます。

操作 Method 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 を参照してください。

この記事では、翻訳の作成、イテレーションの作成、各操作の状態の確認、イテレーション ID によるイテレーションの取得、翻訳 ID による翻訳の削除など、API プロセスの主要な手順について説明します。 詳細については、表内の各 API に示されているリンクを参照してください。

翻訳の作成

ビデオ翻訳要求を送信するには、次の手順に従って HTTP PUT 要求のパスと本文を作成する必要があります。

  • Operation-Id を指定します: Operation-Id は操作ごとに一意である必要があります。 これにより、各操作が個別に追跡されるようになります。 [operationId] を操作 ID に置き換えます。

  • translationId を指定します: translationId は一意である必要があります。 [translationId] を翻訳 ID に置き換えます。

  • 必要な入力を設定します: sourceLocaletargetLocalevoiceKindvideoFileUrl などの詳細を含めます。 ビデオ URL が Azure Blob Storage からのものであることを確認します。 ビデオ翻訳でサポートされている言語については、「サポートされているソースおよびターゲットの言語」を参照してください。 voiceKind パラメーターは PlatformVoice または PersonalVoice に設定できます。 PlatformVoice の場合、システムは、ビデオの話者の声と事前構築済みの音声を照合し、最適な事前構築済み音声を自動的に選択します。 PersonalVoice の場合、システムは、数秒で高品質の音声レプリケーションを生成するモデルを提供します。

    Note

    個人用音声を使うには、アクセスの申請が必要です。

  • [YourResourceKey] は Speech リソースのキーに、[YourSpeechRegion] は Speech リソースのリージョンに置き換えます。

翻訳を作成しても、翻訳プロセスは開始されません。 イテレーションを作成することで、ビデオの翻訳を開始できます。. Windows シェルの例を次に示します。 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"
}

状態プロパティは、NotStarted 状態から Running に、そして最終的には Succeeded または Failed に推移します。 SucceededFailed のどちらかの状態が返されるまで、操作 ID による操作の取得 API を定期的に呼び出すことができます。 この操作により、翻訳プロセスの作成の進行状況を監視できます。

操作 ID による操作の取得

操作 ID を使用して、特定の操作の状態を確認します。 操作 ID は操作ごとに一意であるため、各操作を個別に追跡できます。

[YourResourceKey] を Speech リソース キーに、[YourSpeechRegion] を Speech リソース リージョンに、[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 に置き換えます。
  • 必要な入力を設定します: speakerCountsubtitleMaxCharCountPerSegmentexportSubtitleInVideowebvttFile などの詳細を含めます。 既定では、字幕は出力ビデオに埋め込まれません。
  • [YourResourceKey] は Speech リソースのキーに、[YourSpeechRegion] は Speech リソースのリージョンに置き換えます。

Windows シェルの例を次に示します。 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"  

Note

イテレーションを作成する際、翻訳の作成時に省略可能なパラメーター speakerCountsubtitleMaxCharCountPerSegmentexportSubtitleInVideo を既に指定している場合は、それらを再度指定する必要はありません。 各値は翻訳設定から継承されます。 イテレーションの作成時にこれらのパラメーターを定義すると、新しい値によって元の設定がオーバーライドされます。

最初のイテレーションを作成するときは、webvttFile パラメーターは必要ありません。 ただし、2 番目のイテレーション以降は、イテレーション プロセスで webvttFile パラメーターを指定する必要があります。 WebVTT ファイルをダウンロードし、必要な編集を行ってから、それを Azure Blob Storage にアップロードする必要があります。 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 を使用し、SucceededFailed のどちらかの状態が返されるまで、操作 ID による操作の取得 API を定期的に呼び出すことができます。 この操作により、イテレーション プロセスの作成の進行状況を監視できます。

イテレーション ID によるイテレーションの取得

特定のイテレーションの詳細を ID で取得するには、HTTP GET 要求を使用します。 [YourResourceKey] を Speech リソース キーに、[YourSpeechRegion] を Speech リソース リージョンに、[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] を Speech リソース キーに、[YourSpeechRegion] を Speech リソース リージョンに、[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 は Speech リソースのキーに、YourSpeechRegion は Speech リソースのリージョンに置き換えます。

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] を Speech リソース キーに、[YourSpeechRegion] を Speech リソース リージョンに、[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] を Speech リソース キーに、[YourSpeechRegion] を Speech リソース リージョンに、[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 Speech リソースを使おうとしたが、リージョンでサポートされている Speech リソースの価格レベルが Standard のみである。

HTTP 500 エラー

HTTP 500 内部サーバー エラーは、要求が失敗したことを示します。 エラー メッセージは応答本文に含まれています。