Как извлечь цветовую матрицу из MP4 в поток x264 в Media Foundation

Я воспроизводю видео (mp4, содержащий видеопоток в кодировке x264) с помощью специального проигрывателя, использующего медиа-основу.

Когда я конвертирую информацию YUV в RGB, мне нужно учитывать цветовую матрицу и диапазон, используемые во время кодирования.

Некоторые из моих видео содержат эту информацию, я могу использовать MediaInfo.exe или FFMPEG, чтобы увидеть, что она присутствует.

Однако для таких видео, если я посмотрю на соответствующие свойства Media Foundation (Расширенная информация о цвете) свойства отсутствуют в файлах.

Итак, как-то мне нужно найти способ получить доступ к информации.

Media Foundation предоставляет доступ к MF_MT_MPEG4_SAMPLE_DESCRIPTION и MF_MT_MPEG_SEQUENCE_HEADER для видеопотока, но я не могу найти описания того, что они содержат.

Я заметил, что MF_MT_MPEG_SEQUENCE_HEADER намного длиннее для видео с присутствующей информацией, и это (Краткое руководство по заголовкам MPEG) кажется, что заголовки могут содержать нужную мне информацию.

Я ищу цветовой диапазон (ограниченный / полный), основные цвета, передаточные характеристики и матричные коэффициенты (BT.709 и т. Д.).

Буду очень признателен за любую помощь в поиске этой информации из видеопотока Media Foundation.

Спасибо

Жюль


Обновление - заголовок последовательности

Заголовок последовательности, по-видимому, является подмножеством описания образца MPEG4, хотя я не могу найти ничего, что указывало бы на то, какие биты данных фактически содержат / не содержат конкретно.

Заголовок последовательности, по-видимому, содержит данные, структурированные как поток байтов MP4, как описано в Документ стандартов H264 и включает в себя VUI (информация по удобству использования видео - приложение E к документу), который затем может включать интересующую меня информацию о цвете.

Учитывая, что это поток байтов, мне нужно знать, где он начинается и есть ли какой-нибудь код, который я мог бы использовать для его декодирования.

В FFMPEG в libavcodec / h264_ps.c есть функция с именем ff_h264_decode_seq_parameter_set, которая вызывает decode_vui_parameters. Кажется возможным, что seq_parameter_set отображается на MF_MT_MPEG_SEQUENCE_HEADER, и этот код можно использовать для декодирования данных.

Если у кого-то есть непосредственный опыт декодирования этих данных, это было бы очень полезно.

Спасибо еще раз


Обновление - Похожие сообщения

Я нашел этот Как декодировать наборы параметров sprop в SDP H264? и Возможные Расположение наборов параметров последовательности / изображения для потока H.264, которые весьма полезны.

Заголовок последовательности будет выглядеть как набор параметров последовательности или изображения (pps), а параметры, которые мне нужны, являются подмножеством расширения VUI.

Кроме того, это сообщение структура потока H.264 дает высокий уровень структуры данных потока, и MF_MT_MPEG_SEQUENCE_HEADER, похоже, начинается с NAL 0x00 0x00 0x01, поэтому я предполагаю, что это NAL, содержащий PPS.


person Jules    schedule 18.08.2016    source источник


Ответы (2)


Да, информация содержится в подмножестве расширений VUI.

Поэтому вам нужно проверить vui_parameters_present_flag и video_signal_type_present_flag. Если эти флаги не установлены, я думаю, что в спецификациях h264 есть значения по умолчанию для цветового диапазона / основных цветов / характеристик передачи / коэффициентов матрицы.

Также вам нужно извлечь информацию из SPS, и что вам нужно для этого сделать, так это узнать об экспоненциально-голомбском кодировании.

Проверьте эту ссылку: Набор параметров последовательности h.264

ИЗМЕНИТЬ

Также да, MF_MT_MPEG_SEQUENCE_HEADER обычно содержит информацию SPS и PPS, когда файл имеет видеоформат h264.

person mofo77    schedule 19.08.2016
comment
Somone (Roman R) на другом форуме также указал мне на этот github.com/cplussharp/graph-studio-next/blob/master/src/ в GraphStudioNext и прокомментировал. Действительно, даже если значения присутствуют в наборе параметров, Media Foundation не делает их доступными в тип носителя (MPEG-4 File Source не добавляет соответствующие атрибуты, инициализированные из наборов параметров). - person Jules; 23.08.2016
comment
Да, источник файла MPEG-4 не добавляет эти соответствующие атрибуты. У вас есть MF_MT_MPEG_SEQUENCE_HEADER и образцы данных для этого. Например, типичный MF_MT_MPEG_SEQUENCE_HEADER будет содержать это: 00 00 01 67 4d 40 1f da 01 40 16 ec 04 40 00 00 03 00 40 00 00 0c 83 c6 0c a8 00 00 01 68 ef 3c 80. Первый 00 00 01 67 - это SPS, а 00 00 01 68 - это PPS. - person mofo77; 24.08.2016

(кросс-сообщение от Форумы MSDN)

Вы можете найти образец кода для анализа наборов параметров H.264 в GraphStudioNext здесь, в H264StructReader.cpp, а также другие проекты с доступным кодом.

GraphStudioNext также сможет предоставить эту информацию (colour_primaries и т. Д.) Визуально, если она доступна:

На изображении выше показано окно GraphStudioNext с визуализацией типа мультимедиа H.264 (для файла MP4 с соответствующими данными H.264), который включает наборы параметров, которые, в свою очередь (для этого конкретного файла), содержат непустую секцию с основными цветами и матричными коэффициентами.

Действительно, даже если значения присутствуют в наборе параметров, Media Foundation не делает их доступными в типе мультимедиа (MPEG-4 File Source не добавляет соответствующие атрибуты, инициализированные из наборов параметров).

person Roman R.    schedule 23.08.2016