Azure Content Understanding のマルチモーダル分析機能は、構造化されていないオーディオおよびビデオ データを、機械で読み取り可能な構造化された情報に変換するのに役立ちます。 一時的な関係を維持しながらオーディオビジュアル要素を正確に識別して抽出することにより、幅広いアプリケーションに対応する強力なメディア処理ワークフローを構築できます。
contentsを持つkind: "audioVisual" オブジェクトは、オーディオのみの入力とビデオ入力の両方をサポートしており、入力の種類に応じてさまざまな機能を使用できます。
サポートされるコンテンツ タイプ は次のとおりです。
- オーディオ ファイル: 一般的なオーディオ形式
- ビデオ ファイル: 一般的なビデオ形式
サポートされているファイルの種類、ファイル サイズの制限、およびその他の制約の詳細については、 サービスのクォータと制限に関するページを参照してください。
JSON 応答構造
Content Understanding API は、構造化された JSON 形式で分析結果を返します。 このドキュメントでは、種類が audioVisual に設定された contents 配列内の要素に焦点を当てています。 応答の全体的なコンテナー構造を次に示します。
{
"id": "73719670-2326-40c3-88ca-197c52deab2c",
"status": "Succeeded",
"result": {
"analyzerId": "my-analyzer",
"contents": [
{
"markdown": "# Video: 00:00.000 => 23:16.997\nWidth: 854\nHeight: 480\n..."
"fields": {
"Summary": {
"type": "string",
"valueString": "..."
}
},
"kind": "audioVisual",
"startTimeMs": 0,
"endTimeMs": 1000000,
"transcriptPhrases": [/* ... */],
"width": 854,
"height": 480,
"keyFrameTimesMs": [/* ... */],
"cameraShotTimesMs": [/* ... */],
}
]
}
}
視聴覚要素
次のオーディオビジュアル要素を抽出できます。
| 要素 | オーディオのサポート | ビデオ サポート | 「returnDetails」が必要とされます |
|---|---|---|---|
| Markdown コンテンツ | ✓ | ✓ | いいえ |
| コンテンツコレクション | ✓ | ✓ | いいえ |
| トランスクリプト フレーズ | ✓ | ✓ | イエス |
| タイミング情報 | ✓ | ✓ | いいえ |
| キー フレーム | ✗ | ✓ | いいえ |
| カメラ ショット | ✗ | ✓ | イエス |
| フィールド抽出 | ✓ | ✓ | いいえ |
Face では、解析ツールの構成と制限付きアクセスの登録にenableFace: trueも必要です。
Markdown コンテンツ要素
オーディオビジュアル コンテンツのマークダウン形式の詳細については、 AudioVisual Markdown を参照してください。
コンテンツコレクション
コンテンツ コレクションには、ファイルから抽出されたデータを含む 1 つ以上のコンテンツ オブジェクトが含まれています。 セグメント化が有効 (enableSegment = true) の場合、コンテンツ内で見つかったセグメントごとにコンテンツ オブジェクトが返されます。
トランスクリプト フレーズ
transcriptPhrases要素には、完全なオーディオ文字起こしが含まれており、話者識別と正確なタイミング情報を持つ個々のフレーズに分類されます。 この要素は、オーディオ入力とビデオ入力の両方で使用できます。 Content Understanding では、多言語の文字起こしと話者のダイアライゼーションがサポートされています。 この出力は、ユーザーがアナライザー定義に "returnDetails": true を設定するときに含まれます。 言語サポートの詳細については、 オーディオ言語処理を参照してください。
JSON の例:
{
"transcriptPhrases": [
{
"speaker": "Speaker 1",
"startTimeMs": 280,
"endTimeMs": 3560,
"text": "Welcome to this first session",
"words": []
},
{
"speaker": "Speaker 2",
"startTimeMs": 4640,
"endTimeMs": 5440,
"text": "Thanks for having me. Excited to be here.",
"words": []
}
]
}
タイミング情報
タイミング情報は、オーディオビジュアル コンテンツの全体的な時間的境界を提供します。
-
startTimeMs: コンテンツの開始時刻 (通常は 0) (ミリ秒単位) -
endTimeMs: コンテンツの終了時刻 (ミリ秒単位) -
width: ビデオの幅 (ピクセル単位) (ビデオのみ) -
height: ビデオの高さ (ピクセル単位) (ビデオのみ)
JSON の例:
{
"kind": "audioVisual",
"startTimeMs": 0,
"endTimeMs": 1396997,
"width": 854,
"height": 480
}
キー フレーム
keyFrameTimesMs要素は、重要な時点でビデオから抽出されたビジュアル フレームのタイムスタンプを表します。 タイムスタンプは、ビデオの先頭からミリ秒単位で表されます。 これらのフレームは、ショット検出などの信号に基づいてインテリジェントに選択されます。 これらのフレームは、ユーザー設定フィールドを生成するための入力として使用されます。
キーフレーム サンプリング動作:
- キーフレームは、各カメラ ショットから均一に選択されます
- 各ショットには、短いショット (1 秒未満) であっても、サンプリングされたキーフレームが少なくとも 1 つ含まれています
- キーフレームの数は複数の実行で一貫しています
- タイムスタンプ値は実行間にわずかな数値差を持つことができますが、これらの違いは最小限であり、選択したフレームの内容に大きな影響を与えるべきではありません
JSON の例:
{
"keyFrameTimesMs": [
660,
1320,
2970,
3927,
4884,
5841,
6798,
7755,
8712,
9669
]
}
カメラ ショット
cameraShotTimesMs要素は、カメラショットが変化するビデオ内のポイントを識別し、カット、遷移、またはカメラの角度や視点の大幅な変化を示します。 これは、ビデオの編集構造を理解するのに役立ちます。 値は、ビデオの先頭からミリ秒単位のタイムスタンプです。 この出力は、ユーザーがアナライザー定義に "returnDetails": true を設定するときに含まれます。
カメラ ショット検出動作:
-
cameraShotTimesMsカメラショット間のカットのタイムスタンプを格納します - 配列値は、最初のショット (常に 0 ミリ秒から開始) を除く、すべてのカメラ ショットの開始時刻を示します。
- 出力は決定論的であり、複数の実行で一貫性があります
- このモデルは、視覚的に段階的な遷移を見逃す可能性があります
JSON の例:
{
"cameraShotTimesMs": [
2002,
22356,
26960,
53353,
71071,
76210,
78111,
113487,
148882,
152953
]
}
カスタム要素
フィールドの抽出
ユーザー設定フィールド抽出を使用すると、ビジネス要件に基づいて、オーディオビジュアル コンテンツから特定の情報を定義および抽出できます。 フィールドはアナライザー構成で定義されます。 既定では、コンテンツ全体またはセグメントごとに、セグメント化が有効になっている場合はビデオのフィールドを設定できます。
フィールド抽出 JSON の例:
{
"fields": {
"Summary": {
"type": "string",
"valueString": "The conversation revolves around an introduction to Microsoft Foundry's latest features."
},
"Sentiment": {
"type": "string",
"valueString": "Positive"
}
}
}
完全な JSON の例
次の例は、Xbox の説明ビデオの分析による完全な JSON 応答構造を示しています。 ここに含まれる JSON は、複数の要素の種類を持つビデオを処理するときの Content Understanding からの完全な出力を表します。
{
"id": "cca7cf12-7b2c-46db-9d9a-d7c2dc78c120",
"status": "Succeeded",
"result": {
"analyzerId": "auto-labeling-model-1750376726735-970",
"apiVersion": "2025-05-01-preview",
"createdAt": "2025-06-19T23:45:31Z",
"stringEncoding": "utf8",
"warnings": [],
"contents": [
{
"markdown": "# Video: 00:00.000 => 00:42.520\nWidth: 640\nHeight: 360\n\nTranscript\n```\nWEBVTT\n\n00:02.480 --> 00:04.720\n<Speaker 1>Need help redeeming a code on your Xbox?\n\n00:05.440 --> 00:06.840\n<Speaker 1>Follow these quick steps.\n\n00:08.960 --> 00:15.680\n<Speaker 1>Press the Xbox button on your controller to open the guide while signed into the console with the account you want to apply the code to.\n```\n\nKey Frames\n- 00:00.400 \n- 00:01.800 \n- 00:02.840 \n- 00:08.040 \n- 00:16.360 ",
"fields": {
"ProductOrFeature": {
"type": "string",
"valueString": "Xbox code redemption"
},
"Problem": {
"type": "string",
"valueString": "How to redeem a code on Xbox"
},
"Steps": {
"type": "array",
"valueArray": [
{
"type": "object",
"valueObject": {
"StepTitle": {
"type": "string",
"valueString": "Open the Guide"
},
"Instructions": {
"type": "string",
"valueString": "Press the Xbox button on your controller to open the guide while signed into the console with the account you want to apply the code to."
},
"Timestamp": {
"type": "string",
"valueString": "00:00:08.960"
}
}
},
{
"type": "object",
"valueObject": {
"StepTitle": {
"type": "string",
"valueString": "Enter Code"
},
"Instructions": {
"type": "string",
"valueString": "Enter the 25-character code without the hyphens, then follow steps to finish redeeming."
},
"Timestamp": {
"type": "string",
"valueString": "00:00:26.960"
}
}
}
]
},
"FinalOutcome": {
"type": "string",
"valueString": "Successfully redeem a code on Xbox and access the associated content or service."
}
},
"kind": "audioVisual",
"startTimeMs": 0,
"endTimeMs": 42520,
"width": 640,
"height": 360,
"keyFrameTimesMs": [
400,
1800,
2840,
3880,
4920,
5960,
7000,
8040,
9080,
10120,
16360,
17400,
26760,
27800,
30920,
31960,
40280,
41040,
41800
],
"transcriptPhrases": [
{
"speaker": "Speaker 1",
"startTimeMs": 2480,
"endTimeMs": 4720,
"text": "Need help redeeming a code on your Xbox?",
"words": []
},
{
"speaker": "Speaker 1",
"startTimeMs": 5440,
"endTimeMs": 6840,
"text": "Follow these quick steps.",
"words": []
},
{
"speaker": "Speaker 1",
"startTimeMs": 8960,
"endTimeMs": 15680,
"text": "Press the Xbox button on your controller to open the guide while signed into the console with the account you want to apply the code to.",
"words": []
},
{
"speaker": "Speaker 1",
"startTimeMs": 26960,
"endTimeMs": 29840,
"text": "Enter the 25-character code without the hyphens.",
"words": []
},
{
"speaker": "Speaker 1",
"startTimeMs": 33600,
"endTimeMs": 34640,
"text": "Game on.",
"words": []
}
],
"cameraShotTimesMs": [
760,
33240,
39520
]
}
]
}
}
この完全な例では、Content Understanding がオーディオまたはビデオからすべての異なる要素の種類を抽出して構造する方法を示します。これにより、生のコンテンツと、高度なビデオ処理ワークフローを可能にする詳細なテンポラル情報と構造情報の両方が提供されます。
次のステップ
- Content Understanding Studio でビデオを分析してみてください。
- Content Understanding Studio のクイック スタートを確認してください。
- アナライザー テンプレートを使用したビデオ コンテンツの分析の詳細について説明します。
- コード サンプルを確認する: セグメントを使用したビデオ分析。
- コード サンプル: ビデオ アナライザー テンプレートを確認します。