ffmpeg жалуется на нарушение флага ACT в некоторых наших видео DNxHD. Можно ли это игнорировать? Почему?

Мы использовали ffmpeg / ffprobe для проверки целостности видеофайлов. Если ffmpeg возвращает что-нибудь в своем stderr, мы будем знать, что что-то не так.

Для некоторых видео подобная ошибка будет отображаться в stderr.

[dnxhd @ 00000212f6fc3e80] Флаг ACT установлен в нарушение заголовка кадра.

Но я понятия не имею, что такое флаг ACT.

Копаясь в коде ffmpeg, мы возвращаем этот блок:

static int dnxhd_decode_macroblock(const DNXHDContext *ctx, RowContext *row,
                                   AVFrame *frame, int x, int y)
{
    ...
    act = get_bits1(&row->gb);
    if (act) {
        if (!ctx->act) {
            static int act_warned;
            if (!act_warned) {
                act_warned = 1;
                av_log(ctx->avctx, AV_LOG_ERROR,
                       "ACT flag set, in violation of frame header.n");
            }
        } else if (row->format == -1) {
            row->format = act;
        } else if (row->format != act) {
            row->format = 2; // Variable
        }
    }
    ...

И в том же файле другой фрагмент кода показывает:

static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame,
                               const uint8_t *buf, int buf_size,
                               int first_field)
{
    ...
    ctx->act = buf[0x2C] & 1;
    if (ctx->act && ctx->cid_table->cid != 1256 && ctx->cid_table->cid != 1270)
        av_log(ctx->avctx, AV_LOG_WARNING,
               "Adaptive color transform in an unsupported profile.n");
    ...

Итак, я предполагаю, что ACT = Adaptive Color Transform

И вот сообщение фиксации:

Кристоф Жиске Кристоф Жиске, 5 лет назад (4 октября 2015 г., 16:06)

dnxhddec: лучшая поддержка 4: 4: 4

Профили 1256 и 1270 (в настоящее время) сигнализируют в заголовке кадра, а уровни MB используют цветовое пространство, либо RGB, либо YUV. Хотя изменяющееся цветовое пространство на уровне MB не поддерживается, его постоянство можно отслеживать, чтобы определить точное цветовое пространство.

Для этого требуется битовая глубина и флаги ACT и 4: 4: 4, в свою очередь требующие CID. Поскольку их установка до проверки достаточного количества вещей может привести к недействительным / неустановленным функциям DSP, установка битовой глубины в контексте задерживается.

Тем не менее, он не тестируется на основе истинной последовательности RGB.

Читая коммит, похоже, что это должно повлиять только на видео 4: 4: 4, но на самом деле все наши видео с этой ошибкой на данный момент имеют формат 4: 2: 2. (ID кодека 1237)

Единственный полезный результат о профилях (ID кодека), который я смог найти, таков:
http://docs.red.com/955-0192_v7.3/RANGER_GEMINI_HTML_v7.3/Content/5_Advanced_Menus/1_Settings/Recording/Avid_Info.htm

О, прежде чем я нажал на Post, я взглянул на более раннюю фиксацию:

static int dnxhd_decode_macroblock(const DNXHDContext *ctx, RowContext *row,
                                   AVFrame *frame, int x, int y)
{
    ...
    act = get_bits1(&row->gb);
    if (act) {
        static int warned = 0;
        if (!warned) {
            warned = 1;
            av_log(ctx->avctx, AV_LOG_ERROR,
                   "Unsupported adaptive color transform, patch welcome.n");
        }
    }
    ...

И его сообщение о фиксации:

Christophe Gisquet Christophe Gisquet, 5 лет назад (25 сентября 2015 г., 23:07)

dnxhddec: анализировать и печатать адаптивное преобразование цвета

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

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

Спасибо, что дочитали до этого места.

Вопросов:

  1. Что означает установка флага ACT в значение true в видео YCbCr 4: 2: 2?
  2. Означает ли это обратное, если для видео в формате RGB 4: 4: 4 установлено значение true?
  3. Когда я вижу ошибку нарушения, означает ли это, что библиотека записи неверно установила флаг ACT (act) в значение true на уровне макроблока, в то время как флаг ACT (ctx-> act) на уровне заголовка кадра имеет значение false?
  4. Следует ли проверять флаг ACT (действие) в сочетании с используемым профилем или форматом пикселей (pix_fmt), а не отдельно?
  5. Можно ли игнорировать эту ошибку? Почему?

Большое спасибо!

PS:

Хотя это не совсем та же ошибка, я столкнулся с этим вопросом без ответа:
https://www.mail-archive.com/ffmpeg-user@ffmpeg.org/msg23397.html

Как и OP, я также не могу предоставить образец на данном этапе. Я пытаюсь воспроизвести такое видео с некоторыми общедоступными материалами, чтобы потом поделиться. Хотя к тому времени у меня уже может быть ответ на свои вопросы.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *