Анализ AudioVisual: извлечение структурированного содержимого

Возможности многомодального анализа azure Content Understanding помогают преобразовать неструктурированные звуковые и видеоданные в структурированные, читаемые компьютером сведения. Точно идентифицируя и извлекая аудиовизуальные элементы при сохранении их темпоральных связей, можно создавать мощные рабочие процессы обработки мультимедиа для широкого спектра приложений.

Объект contents с kind: "audioVisual" поддерживает как только аудиовходы, так и видеовходы, с разными возможностями, которые зависят от типа ввода.

Поддерживаемые типы контента включают:

  • Аудиофайлы: распространенные форматы звука
  • Видеофайлы: распространенные форматы видео

Полные сведения о поддерживаемых типах файлов, ограничениях размера файла и других ограничениях см. в разделе " Квоты и ограничения службы".

Структура ответа JSON

API распознавания содержимого возвращает результат анализа в структурированном формате JSON. В этом документе основное внимание уделяется элементу в массиве contents с 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": [/* ... */]
      }
    ]
  }
}

Элементы аудиовизуальные

Можно извлечь следующие аудиовизуальные элементы:

Элемент Поддержка звука Поддержка видео Требуются детали возврата
Содержимое Markdown нет
Коллекция содержимого нет
Фразы расшифровки Да
Сведения о времени нет
Ключевые кадры нет
Снимки камеры Да
Извлечение полей нет

Технология распознавания лиц также требует enableFace: true в конфигурации анализатора и ограниченной регистрации доступа.

Элементы содержимого Markdown

Дополнительные сведения о формате markdown для аудиовизуального содержимого см. в разделе AudioVisual Markdown.

Коллекция содержимого

Коллекция содержимого содержит один или несколько объектов содержимого, содержащих данные, извлеченные из файла. Если сегментация включена (enableSegment = true), объект содержимого возвращается для каждого сегмента, найденного в содержимом.

Фразы расшифровки

Элемент transcriptPhrases содержит полную транскрибирование звука, разделенную на отдельные фразы с идентификацией говорящего и точной информацией о времени. Этот элемент доступен как для аудио, так и для видео входных данных. Система понимания контента поддерживает многоязычное транскрибирование и диаризацию говорящего. Эти выходные данные включаются, когда пользователь задает "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 представляет метки времени для визуальных кадров, извлеченных из видео в ключевые моменты. Метки времени представлены в миллисекундах с начала видео. Эти кадры интеллектуально выбираются на основе таких сигналов, как обнаружение выстрелов. Эти кадры используются в качестве входных данных для создания настраиваемых полей.

Поведение выборки ключевых кадров:

  • Ключевые кадры равномерно выбираются на каждом снимке камеры
  • Каждый кадр содержит как минимум один выделенный ключевой кадр, даже для коротких сцен (менее одной секунды)
  • Количество ключевых кадров одинаково в разных запусках
  • Значения метки времени могут иметь незначительные числовые различия между запусками, но эти различия минимальны и не должны существенно влиять на содержимое выбранных кадров.

Пример 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

В следующем примере показана полная структура ответа JSON из анализа обучающего видео Xbox. Json, включенный здесь, представляет полные выходные данные из Content Understanding при обработке видео с несколькими типами элементов:

{
  "id": "cca7cf12-7b2c-46db-9d9a-d7c2dc78c120",
  "status": "Succeeded",
  "result": {
    "analyzerId": "auto-labeling-model-1750376726735-970",
    "apiVersion": "2025-11-01",
    "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
        ]
      }
    ]
  }
}

В этом полном примере показано, как content Understanding извлекает и структурирует все различные типы элементов из звука или видео, предоставляя как необработанное содержимое, так и подробные темпоральные и структурные сведения, позволяющие расширенным рабочим процессам обработки видео.

Дальнейшие шаги