Udostępnij przez


Analiza audioVisual: wyodrębnianie zawartości ustrukturyzowanej

Funkcje analizy wielomodalnej usługi Azure Content Understanding ułatwiają przekształcanie danych audio i wideo bez struktury w ustrukturyzowane, czytelne dla maszyny informacje. Dzięki precyzyjnemu identyfikowaniu i wyodrębnieniu elementów audiowizualnego przy zachowaniu ich relacji czasowych można tworzyć zaawansowane przepływy pracy przetwarzania multimediów dla szerokiej gamy aplikacji.

Obiekt contents obsługuje zarówno wejścia audio, jak i wideo, z różnymi funkcjami dostępnymi w zależności od typu wejścia.

Obsługiwane typy zawartości obejmują:

  • Pliki audio: typowe formaty audio
  • Pliki wideo: typowe formaty wideo

Aby uzyskać szczegółowe informacje na temat obsługiwanych typów plików, limitów rozmiaru plików i innych ograniczeń, zobacz limity przydziału i limity usług.

Struktura odpowiedzi JSON

Interfejs API usługi Content Understanding zwraca wyniki analizy w formacie JSON ze strukturą. Ten dokument koncentruje się na elemecie w tablicy zawartości z typem ustawionym na audioVisual. Oto ogólna struktura kontenera odpowiedzi:

{
  "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": [/* ... */], 
      }
    ]
  }
}

Elementy audiovisual

Można wyodrębnić następujące elementy audiowizualne:

Składnik Obsługa dźwięku Obsługa wideo Wymaga funkcji returnDetails
Zawartość języka Markdown Nie.
Kolekcja zawartości Nie.
Frazy transkrypcji Tak
Informacje o chronometrażu Nie.
Klatki kluczowe Nie.
Zdjęcia z kamery Tak
Wyodrębnianie pól Nie.

Funkcja Face wymaga również enableFace: true w konfiguracji analizatora i ograniczonej rejestracji dostępu.

Elementy treści Markdown

Aby uzyskać szczegółowe informacje na temat formatu markdown zawartości audiowizualnej, zobacz AudioVisual Markdown.

Kolekcja zawartości

Kolekcja zawartości zawiera co najmniej jeden obiekt zawartości zawierający dane wyodrębnione z pliku. Po włączeniu segmentacji (enableSegment = true) obiekt zawartości jest zwracany dla każdego segmentu znalezionego w zawartości.

Frazy transkrypcji

Element transcriptPhrases zawiera kompletną transkrypcję audio, podzieloną na poszczególne frazy z identyfikacją osoby mówiącej i dokładne informacje o chronometrażu. Ten element jest dostępny zarówno dla danych wejściowych audio, jak i wideo. Usługa Content Understanding obsługuje wielojęzyczną transkrypcję i diaryzację mówców. Te dane wyjściowe są uwzględniane, gdy użytkownik ustawia definicję "returnDetails": true analizatora. Szczegółowe informacje na temat obsługi języków można znaleźć tutaj: Obsługa języka audio.

Przykład 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": []
    }
  ]
}

Informacje o chronometrażu

Informacje o chronometrażu zapewniają ogólne granice czasowe treści audiowizualnej:

  • startTimeMs: godzina rozpoczęcia zawartości w milisekundach (zazwyczaj 0)
  • endTimeMs: godzina zakończenia zawartości w milisekundach
  • width: Szerokość wideo w pikselach (tylko wideo)
  • height: wysokość obrazu wideo w pikselach (tylko wideo)

Przykład JSON:

{
  "kind": "audioVisual",
  "startTimeMs": 0,
  "endTimeMs": 1396997,
  "width": 854,
  "height": 480
}

Klatki kluczowe

Element keyFrameTimesMs reprezentuje znaczniki czasu ramek wizualnych wyodrębnionych z wideo w kluczowych momentach. Znaczniki czasu są reprezentowane w milisekundach od początku filmu wideo. Te ramki są inteligentnie wybierane na podstawie sygnałów, takich jak wykrywanie strzałów. Te ramki są używane jako dane wejściowe do generowania pól niestandardowych.

Zachowanie próbkowania klatek kluczowych:

  • Klatki kluczowe są jednolicie wybierane z każdego ujęcia z kamery
  • Każde ujęcie zawiera co najmniej jedną próbkowaną klatkę kluczową, nawet w przypadku krótkich ujęć (mniej niż jedna sekunda)
  • Liczba klatek kluczowych jest spójna w wielu uruchomieniach
  • Wartości znacznika czasu mogą mieć niewielkie różnice liczbowe między przebiegami, ale te różnice są minimalne i nie powinny znacząco wpływać na zawartość wybranych ramek

Przykład JSON:

{
  "keyFrameTimesMs": [
    660,
    1320,
    2970,
    3927,
    4884,
    5841,
    6798,
    7755,
    8712,
    9669
  ]
}

Zdjęcia z kamery

Element cameraShotTimesMs identyfikuje punkty w filmie, w którym zdjęcia aparatu zmieniają się, wskazując cięcia, przejścia lub istotne zmiany kąta aparatu lub perspektywy. Pomaga to zrozumieć strukturę edycji filmu wideo. Wartości są znacznikami czasu w milisekundach od początku filmu wideo. Te dane wyjściowe są uwzględniane, gdy użytkownik ustawia definicję "returnDetails": true analizatora.

Zachowanie detekcji ujęć kamery:

  • cameraShotTimesMs przechowuje znaczniki czasu cięć między ujęciami kamery
  • Wartości tablicy wskazują czas początkowy wszystkich ujęć kamery, z wyłączeniem pierwszego ujęcia (które zawsze zaczyna się od 0 ms)
  • Dane wyjściowe są deterministyczne i spójne przy wielu uruchomieniach.
  • Ten model może przegapić przejścia, które są wizualnie stopniowe

Przykład JSON:

{
  "cameraShotTimesMs": [
    2002,
    22356,
    26960,
    53353,
    71071,
    76210,
    78111,
    113487,
    148882,
    152953
  ]
}

Elementy niestandardowe

Wyodrębnianie pól

Wyodrębnianie pól niestandardowych umożliwia definiowanie i wyodrębnianie określonych informacji z zawartości audiowizualnej na podstawie wymagań biznesowych. Pola są definiowane w konfiguracji analizatora. Pola można wypełniać dla całej zawartości domyślnie lub dla każdego segmentu w przypadku wideo po włączeniu segmentacji.

Przykład kodu JSON wyodrębniania pól:

{
  "fields": {
    "Summary": {
      "type": "string",
      "valueString": "The conversation revolves around an introduction to Microsoft Foundry's latest features."
    },
    "Sentiment": {
      "type": "string",
      "valueString": "Positive"
    }
  }
}

Kompletny przykład kodu JSON

Poniższy przykład przedstawia pełną strukturę odpowiedzi JSON z analizowania wideo instruktażowego konsoli Xbox. Kod JSON dołączony tutaj reprezentuje pełne dane wyjściowe z usługi Content Understanding podczas przetwarzania wideo z wieloma typami elementów:

{
  "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 ![](keyFrame.400.jpg)\n- 00:01.800 ![](keyFrame.1800.jpg)\n- 00:02.840 ![](keyFrame.2840.jpg)\n- 00:08.040 ![](keyFrame.8040.jpg)\n- 00:16.360 ![](keyFrame.16360.jpg)",
        "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
        ]
      }
    ]
  }
}

W tym kompletnym przykładzie pokazano, jak Content Understanding wyodrębnia i strukturyzuje wszystkie różne typy elementów z materiałów audio i wideo, zapewniając zarówno surowe treści, jak i szczegółowe informacje czasowe i strukturalne, które umożliwiają zaawansowane procesy przetwarzania wideo.

Dalsze kroki