Azure Content Understanding의 다중 모드 분석 기능은 구조화되지 않은 오디오 및 비디오 데이터를 기계에서 읽을 수 있는 구조화된 정보로 변환하는 데 도움이 됩니다. 임시 관계를 유지하면서 시청각 요소를 정확하게 식별하고 추출하여 광범위한 애플리케이션에 대한 강력한 미디어 처리 워크플로를 빌드할 수 있습니다.
contents 및 kind: "audioVisual" 개체는 오디오 전용과 비디오 입력 모두를 지원하며, 입력 유형에 따라 다양한 기능을 제공합니다.
지원되는 콘텐츠 형식 은 다음과 같습니다.
- 오디오 파일: 일반적인 오디오 형식
- 비디오 파일: 일반적인 비디오 형식
지원되는 파일 형식, 파일 크기 제한 및 기타 제약 조건에 대한 자세한 내용은 서비스 할당량 및 제한을 참조하세요.
JSON 응답 구조
Content Understanding API는 구조화된 JSON 형식으로 분석 결과를 반환합니다. 이 문서에서는 kind가 audioVisual로 설정된 콘텐츠 배열의 요소에 초점을 맞췄습니다. 응답의 전체 컨테이너 구조는 다음과 같습니다.
{
"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을 참조하세요.
콘텐츠 수집
콘텐츠 컬렉션에는 파일에서 추출된 데이터가 포함된 하나 이상의 콘텐츠 개체가 포함되어 있습니다. 분할을 사용하도록 설정하면(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초 미만)에도 샘플링된 키 프레임이 하나 이상 포함됩니다.
- 키 프레임 수는 여러 실행에서 일관됩니다.
- 타임스탬프 값은 실행 간에 약간의 숫자 차이를 가질 수 있지만 이러한 차이는 최소화되며 선택한 프레임의 내용에 큰 영향을 주지 않아야 합니다.
JSON 예제:
{
"keyFrameTimesMs": [
660,
1320,
2970,
3927,
4884,
5841,
6798,
7755,
8712,
9669
]
}
카메라 샷
cameraShotTimesMs 요소는 비디오에서 카메라 샷이 변경되는 지점을 식별하여 컷, 전환 또는 카메라 각도 및 원근감의 중요한 변화를 나타냅니다. 이렇게 하면 비디오의 편집 구조를 이해하는 데 도움이 됩니다. 값은 비디오 시작부터 밀리초 단위의 타임스탬프입니다. 이 출력은 사용자가 분석기 정의에서 설정하는 "returnDetails": true 경우에 포함됩니다.
카메라 샷 감지 동작:
-
cameraShotTimesMs는 카메라 샷 사이에 컷의 타임스탬프를 저장합니다. - 배열 값은 첫 번째 촬영(항상 0ms에서 시작)을 제외한 모든 카메라 샷의 시작 시간을 나타냅니다.
- 출력은 여러 실행에서 결정적이고 일관적입니다.
- 이 모델은 시각적으로 점진적인 전환을 놓칠 수 있습니다.
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 빠른 시작을 확인하세요.
- 분석기 템플릿을 사용하여 비디오 콘텐츠를 분석하는 방법에 대해 자세히 알아봅니다.
- 코드 샘플 검토: 세그먼트를 사용한 비디오 분석.
- 코드 샘플 검토: 비디오 분석기 템플릿.