# теория · шаг 5 из 8
Формат, кодек и сцена: что именно должен восстановить декодер
Коротко
Алгоритм задаёт преобразование данных, кодированное представление - согласованный поток, а контейнер организует дорожки, время и метаданные. Между расширением файла и способом сжатия нет обязательного соответствия один к одному. Семейство MPEG-4 включает разные части: визуальное кодирование, системное описание сцен и другие средства. Объектное описание может передавать геометрию, текстуры и параметры вместо готовых кадров, но декодер должен знать их смысл. Профиль ограничивает требуемые возможности; название MPEG-4 или MP4 само по себе не определяет полный вычислительный контракт.
Если различаешь контейнер и кодек и можешь восстановить простую сцену по слоям и параметрам, переходи к «Теперь сам».
Как думаешь, что сообщает расширение файла
Файл имеет имя film.mp4. Достаточно ли его, чтобы написать декодер видеодорожки?
Нет: сначала нужно прочитать структуру контейнера и узнать,
какое именно кодированное представление и параметры находятся в дорожке.
Внутри также могут быть звук, временные метки, субтитры и другие данные.
Похожая путаница бывает у изображений: формат может поддерживать несколько методов компрессии и даже хранение без сжатия. Поэтому сравнение «этот формат сжал вдвое лучше» без указания метода и параметров может сравнивать совсем другие алгоритмы и разные допустимые потери.
На что это похоже
Папка с документами хранит оглавление, даты и разные типы файлов. По форме папки нельзя восстановить правила чтения каждого документа. И наоборот, одинаковый текст можно положить в разные папки, не меняя смысла его символов.
Контейнер и кодек распределяют обязанности похожим образом. Одно описание говорит, где лежат дорожки и когда их показывать, другое - как восстановить отсчёты или объекты. Правила упаковки и правила интерпретации нужны вместе, но не являются одним алгоритмом.
Механизм: что стандартизовано и что выбирает кодировщик
Нормативный формат задаёт синтаксис и смысл переданных элементов, включая правила восстановления и ограничения точности. Выбор допустимого потока часто оставляет свободу: как искать движение, где менять режим, как распределять биты, сколько времени тратить на поиск. Поэтому два совместимых кодировщика могут давать разные размеры и качество. Декодер не должен повторять их скрытый поиск: он читает выбранный результат.
MPEG-4 - семейство частей, а не один кодек. MPEG-4 Part 2 описывает визуальное кодирование, Part 10 - AVC, известный также как H.264. Это разные представления. Отдельные системные части описывают сцены и объекты; не каждый поток MPEG-4 Visual и не каждый MP4-файл обязан содержать такую сцену. Требования к инструментам конкретной дорожки читаются из её описания, а не выводятся из совпадения общего названия.
Объектная сцена задаёт узлы: изображения, геометрию, текстуры, преобразования, порядок наложения и связи. Изменение координат одного объекта может быть коротким обновлением вместо повторной отправки всего кадра. При этом нужны исходные ресурсы и общие правила отрисовки. Если фон, маска или модель отсутствуют, одни параметры движения их не заменят.
Правило
Разделяй структуру контейнера, кодирование дорожки и семантику восстанавливаемого содержания. Сжатое описание сцены работает только при согласованных ресурсах и правилах. Проверка совместимости включает реально используемые части семейства, инструменты, параметры и ограничения, а не только суффикс имени файла.
Системное описание сцен MPEG-4 может использовать BIFS, двоичное представление сцены и её обновлений. Его нельзя понимать как обычный исходник программы C++: узлы, поля и изменения имеют нормативный смысл. Обработчики событий могут менять свойства сцены, но наличие этих средств в семействе не делает произвольный медиаплеер универсальной средой выполнения всех его частей.
Разбор: порядок полупрозрачных слоёв
Возьмём один серый пиксел фона 0. Слой A имеет цвет 100 и непрозрачность 0,5,
слой B цвет 200 и такую же непрозрачность. Наложение даёт
new=alpha·foreground+(1−alpha)·background.
Сначала A, затем B: 0→50→125. Сначала B, затем A: 0→100→100.
Одного списка цветов недостаточно: порядок или глубина объектов тоже несут информацию.
from math import sin, pi
def overlay(background, layers):
value = background
for color, alpha in layers:
value = alpha * color + (1 - alpha) * value
return value
a, b = (100, 0.5), (200, 0.5)
print("порядок A,B:", overlay(0, [a, b]))
print("порядок B,A:", overlay(0, [b, a]))
base, delta, weight = (10, 20), (2, -4), 0.5
point = tuple(x + weight * d for x, d in zip(base, delta))
print("точка параметрической модели:", point)
frequency, sample_rate = 1, 4
samples = [round(sin(2 * pi * frequency * t / sample_rate), 6)
for t in range(4)]
print("учебный синтез по частоте:", samples)
# Учебное описание контейнера: метаданные и данные разделены.
header = {"codec": "rle", "width": 4, "height": 1}
payload = [(2, 7), (2, 9)]
if header["codec"] != "rle":
raise ValueError("неподдерживаемое кодирование")
pixels = [value for count, value in payload for _ in range(count)]
assert len(pixels) == header["width"] * header["height"]
print("учебная дорожка:", pixels)
порядок A,B: 125.0
порядок B,A: 100.0
точка параметрической модели: (11.0, 18.0)
учебный синтез по частоте: [0.0, 1.0, 0.0, -1.0]
учебная дорожка: [7, 7, 9, 9]
Первые две строки подтверждают различие порядка. Формула использует вещественную непрозрачность в учебной серой модели; реальные цветовые пространства, представление прозрачности и округление должны быть заданы отдельно. Энтропийное кодирование этих значений не выбирает за нас правила композиции.
Сцена может хранить неподвижный спрайт, то есть картинку объекта, и менять лишь его положение или преобразование. Большой фон можно переиспользовать при движении области просмотра. Экономия зависит от содержимого и количества обновлений: если каждый объект постоянно меняется, короткое геометрическое описание не гарантируется.
Разбор: параметр модели вместо нового кадра
Пусть базовая точка лица (10,20), направление её изменения (2,−4).
Переданный вес 0,5 даёт точку (11,18) по формуле base+weight·delta.
Такую игрушечную модель легко согласовать обеим сторонам:
передаются базовая форма и правила изменения, потом только коэффициенты.
В настоящих средствах анимации лица семейства MPEG-4 параметры и единицы
задаются подробнее; наша формула объясняет принцип, а не заменяет их нормативный набор.
Похожая экономия возможна для синтетического звука: вместо всех отсчётов
передать частоту, амплитуду и длительность известного генератора.
Программа показывает синус с частотой 1 при четырёх отсчётах в секунду.
sin - вертикальная координата точки единичной окружности;
угол 2π·f·t/sample_rate увеличивается на одну окружность за период.
Получаются [0,1,0,−1]. Это иллюстрация синтеза, не универсальное
сжатие произвольной речи и не реализация аудиочастей стандарта.
Последний пример хранит условный заголовок с именем метода RLE и размерами, отдельно пары длин и значений. После распаковки проверяется ожидаемое число отсчётов. Пример не описывает настоящий MP4 или JP2. Он показывает, зачем упаковка должна сообщить декодеру и метод, и условия интерпретации полезных данных.
Что ломается без этого
Переименовывают расширение и считают, что преобразовали сам поток. Или объявляют поддержку всего MPEG-4 после реализации одного визуального кодека. В обоих случаях перепутаны имена упаковки и набор обязательных возможностей.
Синтетическая сцена тоже требует ресурсов. Если отправитель считает координаты от центра, а получатель от угла, одинаковые числа дадут разные картинки. Если один применяет параметры лица к другой базовой модели, произвольного совпадения не будет. Малый объём коэффициентов предполагает заранее согласованный контекст.
Зачем это в работе
При проектировании медиасервиса отдельно проверь чтение контейнера, декодирование дорожек, синхронизацию и нужные средства визуализации. Для архивного доступа важно сохранить не только байты коэффициентов, но и сведения о формате и зависимых ресурсах. Проверка конечной реконструкции обнаруживает ошибки, которых не видно по красивому имени файла или заявленному списку общих алгоритмов.
Теперь сам
Файл содержит две дорожки с разными кодеками и общими временными метками. Какой слой отвечает за их организацию? Для сцены известны цвета двух слоёв, но не порядок наложения. Хватает ли этих данных для однозначного пиксела?
Ответ. Дорожки и временные метки этого файла организует контейнер, а данные каждой дорожки декодирует её кодек. Описание сцены задаёт композицию объектов: без порядка наложения слои в общем случае дают разные результаты, как 125 и 100 в примере.
Главное
Компактный поток полезен только вместе с правилами его интерпретации. Контейнер, кодек и описание сцены решают связанные, но разные задачи; совместимость проверяется по реально требуемому вычислительному контракту.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий