1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8

# теория · шаг 4 из 8

Исторические стандарты видео: инструменты и чересстрочные поля

Коротко

Motion-JPEG, MPEG-1, H.261, H.263 и MPEG-2 различаются набором инструментов и задачами, под которые они создавались. Классический блочный конвейер похож, но это не делает потоки взаимозаменяемыми. При чересстрочной съёмке поля фиксируют разные моменты, поэтому простое объединение строк движущегося объекта может дать «гребёнку». Профили, расширения и уровни уточняют, какие инструменты и ресурсы требуются. Характеристики старых примеров из книги нельзя превращать в вечные пределы всех режимов семейства.

Если различаешь поле и кадр, обязательный инструмент и опцию, а также узнаёшь роль изучаемых семейств, переходи к «Теперь сам».

Как думаешь, одинаковый конвейер означает одинаковый формат

Два алгоритма используют предсказание, ДКП и квантование. Но один декодер не умеет читать поток другого. Вектор может иметь другой синтаксис, квантование - другое правило, а состав опор - другие ограничения. Список общих идей ещё не задаёт совместимость.

Ватолин описывает состояние технологий начала 2000-х. Ниже рассматриваем именно механизмы перечисленных исторических семейств, а не рейтинг современных видеокодеков. Указанное в старом сравнении типичное разрешение, битрейт или преимущество реализации не является универсальным ограничением алгоритма.

На что это похоже

Два процессора могут иметь сложение и умножение, но разные наборы машинных команд. Общая арифметическая идея не позволяет выполнить любую программу без перевода. Профиль похож на согласованный набор доступных команд, а уровень - на ограничения мощности и объёма, которые обещает поддерживать устройство.

Сравнивать следует и набор инструментов, и конкретную задачу. Для монтажа независимость кадров может быть важнее максимального сжатия, для передачи по слабому каналу - наоборот. Название стандарта не выбирает единственную лучшую настройку для всех этих целей.

Механизм: различия классических семейств

Семейство Основная идея рассматриваемой схемы Что нужно уточнять
Motion-JPEG Независимое JPEG-кодирование отдельных кадров Упаковка потока, параметры JPEG, метки времени
MPEG-1 Video Преобразование остатка, I/P/B и межкадровые опоры Структура групп и выбранный режим
H.261 Классическая видеотелефония с intra/inter и блочной компенсацией Сигнализация блоков и ограничения базовой схемы
H.263 Развитие гибридной схемы и множество расширений Версия и реально включённые опции
MPEG-2 Video / H.262 Средства для прогрессивного и чересстрочного видео Поле или кадр, профиль и уровень

Motion-JPEG - семейство способов представления последовательности независимо JPEG-кодированных кадров. Единой упаковки и единственного соглашения о времени это название не задаёт: они зависят от контейнера или протокола. У Motion-JPEG нет межкадрового предсказания: отдельный кадр проще заменить при редактировании. Это может стоить большего потока на похожих соседних кадрах. Не следует выдавать один коэффициент сжатия за постоянное свойство семейства: результат зависит от содержимого и качества независимого JPEG-кодирования.

В базовой H.261 используются предсказание и преобразование остатка; исторические режимы CIF и QCIF задают, например, 352×288 и 176×144. H.263 добавляет инструменты, включая варианты движения и энтропийного кодирования, но наличие расширения не означает его обязательного включения в каждом потоке. Рекомендация по видео также не становится стандартом аудиокодирования лишь потому, что применяется в аудиовизуальной системе.

У расширений есть конкретная алгоритмическая работа. Если вектор разрешён за краем, опорную выборку можно продолжать крайним отсчётом: ref[max(0,min(width−1,x))]. Тогда адрес −1 в строке [3,9] даёт 3, а не несуществующий элемент. Это правило должен знать и декодер. Отдельные векторы для частей макроблока точнее описывают разное движение, но требуют дополнительных параметров. Предсказание коэффициентов intra-блоков использует уже восстановленных соседей, передавая разность вместо полного значения. Отдельная B-картинка и PB-режим H.263 различаются: PB упаковывает связанную P-часть и промежуточную B-часть; их параметры могут использоваться совместно. Поэтому PB нельзя понимать как новое имя любой B-картинки. Числовой разбор связанной пары будет в главе «Режимы видеопредсказания». Варианты B/PB добавляют зависимости и задержку, а смена энтропийного кодера меняет способ передачи символов. Все эти инструменты включаются по своему нормативному режиму, а не одной общей фразой «поддерживается H.263».

VLC (variable-length coding) означает кодирование кодовыми словами переменной длины: разные символы получают разное число битов. Коды Хаффмана - один из способов построить такие слова; VLC не является названием только этого алгоритма.

Правило

Совместимость определяется конкретным нормативным синтаксисом и семантикой, включёнными инструментами и ограничениями, а не совпадением названий этапов. При сравнении отделяй свойства схемы от параметров примера, профиля, кодировщика и исторической аппаратной реализации.

Профиль определяет доступные инструменты в рамках стандарта, уровень ограничивает ресурсы, например размеры и скорость обработки. Точное значение этих понятий задаётся самим семейством, поэтому проверка поддержки одного названия без параметров может оказаться недостаточной. Нельзя включить неподдерживаемую опцию и считать её «лишь улучшением качества».

Разбор: два поля дают гребёнку

При чересстрочной съёмке одно поле содержит строки одной чётности, другое - строки другой, причём снятые в следующий момент времени. Если объект сместился вправо между полями, объединение строк даст чередующиеся положения границы. Это не та же картинка, что прогрессивный кадр, снятый целиком в один момент.

fields_picture.py
first = [0, 200, 0, 0]
second = [0, 0, 200, 0]
print("чересстрочная сборка двух моментов:")
for i in range(4):
    print(first if i % 2 == 0 else second)
print("простое удвоение строк первого поля:")
for i in range(4):
    print(first)
edge = [0, 0, 16, 16]
filtered = [edge[0], (edge[1] + edge[2]) // 2,
            (edge[1] + edge[2]) // 2, edge[3]]
print("граница:", edge)
print("учебное сглаживание:", filtered)
# Это условные инструменты учебного профиля, не его нормативное имя.
profile = {"intra", "inter", "vlc"}
for tools in [{"intra", "vlc"}, {"inter", "arithmetic"}]:
    print("недостающие инструменты:", sorted(tools - profile))
↳  выводpython3 fields_picture.py
чересстрочная сборка двух моментов:
[0, 200, 0, 0]
[0, 0, 200, 0]
[0, 200, 0, 0]
[0, 0, 200, 0]
простое удвоение строк первого поля:
[0, 200, 0, 0]
[0, 200, 0, 0]
[0, 200, 0, 0]
[0, 200, 0, 0]
граница: [0, 0, 16, 16]
учебное сглаживание: [0, 8, 8, 16]
недостающие инструменты: []
недостающие инструменты: ['arithmetic']

В первом выводе яркая точка стоит то во второй, то в третьей колонке. Удвоение строк первого поля убирает временное чередование, но не восстанавливает неизвестные строки исходного момента и теряет вертикальную подробность. Более сложный деинтерлейсинг выбирает, где использовать временную информацию, а где пространственную, ориентируясь на движение. Он не делает две разные экспозиции одной точной съёмкой.

В MPEG-2 предусмотрены способы учитывать поля и кадры при предсказании и преобразованиях. Если просто трактовать переплетённые строки как обычную прогрессивную картинку, статистика движения и пространственных деталей изменится. Выбор режима обработки должен соответствовать структуре исходного сигнала.

Разбор: сглаживание и необязательные инструменты

У границы [0,0,16,16] учебный фильтр заменил два центральных отсчёта на 8. Скачок между ними исчез, но вместо резкого края появилась полоса перехода. Если скачок был артефактом квантования, это может улучшить вид; если он был настоящим контуром, фильтр размоет полезную деталь. Поэтому «фильтр убирает блочность» не означает «всегда восстанавливает оригинал».

Последние строки программы используют условный набор инструментов {intra,inter,vlc}. Запрос intra+vlc покрывается, запрос inter+arithmetic нет. Это только модель проверки возможностей, не реальные нормативные имена профиля. В H.263, например, арифметический режим описан как опциональный инструмент: декодер не должен предполагать его наличие только по названию семейства.

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

Что ломается без этого

Считают исторический целевой битрейт жёстким запретом на другие значения. Или по одному примеру утверждают, что некоторый стандарт всегда быстрее другого. Поиск движения, распределение битов и реализация преобразований у кодировщиков различаются. Корректный эксперимент фиксирует вход, режимы, качество, оборудование и версию программы.

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

Обрабатывать можно и коэффициенты. Для соседних постоянных блоков 8×8 с DC 80 и 112 средние подготовленных отсчётов равны 10 и 14. Если заменить оба DC на 96, обе средние станут 12. Разница блоков уменьшилась, но настоящий скачок яркости тоже мог исчезнуть. Такая обработка должна иметь определённое место относительно опорного контура и показа.

Масштабирование - ещё одна отдельная работа. Билинейная интерполяция вычисляет новый отсчёт как взвешенное среднее четырёх соседей, по долям расстояния между их координатами. Число вычисляемых отсчётов пропорционально площади выходного изображения. Для уменьшения требуется учесть усреднение деталей до редкой выборки, иначе возможны ложные узоры. Увеличение числа отсчётов не означает восстановления неизвестных деталей оригинала.

Зачем это в работе

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

Теперь сам

Два поля показывают объект в разных горизонтальных позициях. Почему простое сплетение строк может дать зубчатый край? Если декодер поддерживает базовые инструменты семейства, обязан ли он поддерживать каждое его необязательное расширение?

Ответ. Строки относятся к разным моментам движения и не образуют один снимок объекта в общей позиции. Поддержка базы не означает поддержку всех расширений; проверяются конкретные инструменты и сигнализация потока.

Главное

Общие идеи сжатия не отменяют различий стандартов, профилей и временной структуры. Проверяй, что именно задано потоком, и не принимай исторический пример или необязательный инструмент за универсальное свойство всех реализаций.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.