7.5. Контроль битовой скоростиСтандарты MPEG-4 Visual и Н.264 требуют, чтобы видеокадры обрабатывались по отдельным единицам — макроблокам. Если контролируемые параметры кодирования поддерживать постоянными (например, размер области поиска компенсации движения, шаг квантователя и т.п.), то число кодовых битов каждого макроблока будет меняться от макроблока к макроблоку в зависимости от содержания кадра, что приведет к варьированию битовой скорости выходного потока (измеренного в бит/кадр или в бит/с). Обычно кодер с фиксированными параметрами производит больше бит для исходных кадров, на которых запечатлено быстрое движение или сняты мелкие детали. А для кадров с медленными изменениями и без деталей ему понадобится меньше битов. На рис. 7.35 показаны примеры скачкообразных изменений битовой скорости, имевшие место при кодировании последовательности «офис» (25 кадр/с) при использовании кодера MPEG-4 с простым профилем и фиксированным размером шага квантования, равным 12. Первый кадр закодирован как I-VOP (для чего потребовалось много битов, так как нет временного прогноза), а все последующие кадры кодировались как P-VOP. Число бит на кадр P-VOP меняется от 1300 до 9000 (что эквивалентно скорости от 32 до 225 кбит/с). Рис. 7.35. Вариации битовой скорости (MPEG-4, простой профиль). Рис. 7.36. Буферы для выхода кодера и входа декодера. Такие скачки битовой скорости могут породить большие проблемы для многих протоколов транспортировки и хранения. Например, канал с постоянной скоростью (канал с коммутацией) неспособен передавать потоки данных с переменной скоростью. Сети на основе коммутации пакетов могут поддерживать переменную скорость передачи, но средняя пропускная способность в любой момент времени ограничена определенными факторами, зависящими от скорости связи и перегруженности. В этих случаях необходимы контроль и адаптация битовой скорости, производимой кодеком, для ее соответствия скоростям транспортировки. Носители CD-ROM и DVD имеют фиксированную емкость хранения данных, поэтому необходимо контролировать скорость кодированной видеопоследовательности (например, при записи фильмов DVD Video), чтобы видеоданные поместились на носитель. Переменную скорость данных, производимых кодером, можно «сгладить» с помощью их буферизации до передачи. Рисунок 7.36 показывает типичную организацию процесса, в котором вход с переменной скоростью пропускается через буфер FIFO (First In/First Out, первым вошел/первым вышел). Такой буфер освобождается с постоянной битовой скоростью, которая соответствует пропускной способности канала. Другой буфер FIFO помещается на входе декодера: он заполняется с фиксированной скоростью передачи по каналу и высвобождается декодером с переменной скоростью (поскольку декодер извлекает некоторое число Р бит для декодирования каждого кадра и число Р меняется от кадра к кадру). Рис. 7.37. Пример заполнения буфера (кодер; скорость передачи 100 кбит/с). Рис. 7.38. Пример заполнения буфера (декодер; скорость передачи 100 кбит/с). Рис. 7.39. Пример заполнения буфера (декодер; скорость передачи 100 кбит/с).
Эти примеры говорят о том, что переменную скорость кодирования можно приспособить для транспортировки по каналам с постоянной скоростью с помощью буферов кодера и декодера. Однако за такую адаптацию приходится платить объемом буферной памяти и задержкой декодирования. Как показали примеры, чем выше вариация битовой скорости, тем больше требуемый объем буфера и тем длиннее задержка декодирования. Кроме того, таким методом нельзя справиться с произвольными скачками битовой скорости, если не допускать неразумно большие объемы буферов и не вносить (лишком долгие задержки. Для этого необходимо реализовать некий механизм обратной связи для контролирования битовой скорости выхода кодера для предотвращения переполнения или недозагрузки буферов. Контроль скорости предполагает динамическую модификацию параметров кодирования для управления выходной скоростью. Наиболее очевидным параметром такого управления служит шаг квантователя (QP), поскольку повышение QP приводит к снижению битовой скорости (платой за это будет снижение качества декодирования) и наоборот. Общий подход к контролю скорости заключается в модификации QP во время кодирования в целях поддерживать допустимую скорость (или среднюю скорость) и минимизировать искажения при декодировании последовательности. Оптимизировать компромисс между битовой скоростью и качеством бывает непросто. Имеется много подходов и алгоритмов для достижения этой цели. Выбор алгоритма контроля скорости зависит от природы видеоприложения. 1. Кодирование в режиме офлайн для хранения на DVD. Время кодирования не является большим ограничением, поэтому допустимы сложные алгоритмы. Цель заключается в том, чтобы «уместить» сжатую видеопоследовательность на диске, стараясь максимизировать качество видеоизображения, а также избежать переполнения или недозагрузки буфера в проигрывателе DVD. Двухпроходное кодирование (при котором кодер собирает определенную статистику о видеопоследовательности на первом проходе кодирования и выполняет окончательное кодирование на повторном проходе) является хорошим подходом для этого случая. 2. Кодирование живого видео для телетрансляции. Телевещательная программа состоит из одного кодера и множества декодеров; декодеры имеют вычислительные и буферные ограничения, а кодирование может осуществляться на дорогом и высокоскоростном оборудовании. Задержка в несколько секунд является допустимой, поэтому имеется возможность использовать алгоритмы контроля скорости средней сложности. Для некоторых кадров допустимо двухпроходное кодирование. 3. Кодирование двухсторонних телеконференций. Каждый терминал выполняет и кодирование, и декодирование, поэтому вычислительная мощность может быть ограниченной. Допускаются лишь минимальные задержки (в идеале от захвата кадра кодером до его демонстрации декодером должно проходить не более 0,5 с). При таком сценарии допускаются лишь несложные алгоритмы контроля скорости. Буферизация кодера и декодера должна быть минимальной (чтобы иметь малые задержки), поэтому кодер должен жестко контролировать выходную скорость битового потока. Это может привести к значительным вариациям качества декодированного изображения, например при отображении быстрых видеосцен и мелких деталей. Рекомендация Н.264 не специфицирует (на сегодняшний день) и не предлагает алгоритма контроля скорости (однако описание такого алгоритма имеется в [39]). Стандарт MPEG-4 Visual содержит возможный алгоритм контроля скорости в информационном приложении [40] (т.е. использование этого конкретного алгоритма не является обязательным). Этот алгоритм, называемый схемой SRC (Scalable Rate Control, масштабируемый контроль скорости), подходит для единственного видеообъекта (прямоугольного VO, занимающего весь кадр) и для определенного диапазона битовых скоростей, а также для некоторых пространственных и временных разрешений. Алгоритм SRC стремится достигнуть требуемой скорости после определенного числа кадров («сегмента» кадров, который обычно начинается с I-VOP) и предполагает следующую модель для скорости кодера : (7.10) Здесь - это размер шага квантователя, - средняя абсолютная разность остаточного кадра после компенсации движения (мера сложности кадра), а , - параметры модели. Контроль скорости состоит из следующих шагов, которые выполняются после компенсации движения и до кодирования кадра с номером . 1. Вычислить требуемую скорость , основываясь на числе кадров в сегменте, числе бит, доступных для остатка сегмента, максимально допустимом объеме буфера и на оцененной сложности кадра . (Максимальный размер буфера влияет на время задержки между входом кодера и выходом декодера. Если предыдущий кадр был сложным, то предполагается, что и следующий кадр будет сложным, и, значит, ему предстоит назначить соответствующее число бит: алгоритм стремится сохранить баланс между этими требованиями и ограничениями на общее число битов, предоставляемых данному сегменту.) 2. Вычислить размер шага квантователя , (который будет применяться ко всему кадру). Вычислить для полного остаточного кадра и решить уравнение (7.10) для нахождения . 3. Закодировать кадр. 4. Обновить параметры модели и на основе действительного числа бит, сгенерированных для представления кадра . Алгоритм SRC стремится достичь требуемую битовую скорость для данного сегмента кадров (а не для всей последовательности произвольной длины). Шаг квантователя не меняется для кодируемого в данный момент кадра. Это дает равномерное визуальное представление текущего кадра, однако могут возникнуть проблемы при работе с буферами малого размера и, следовательно, с короткой задержкой. Расширение алгоритма SRC поддерживает варьирование шага квантователя на уровне макроблоков, что подходит для приложений с короткими задержками, которым необходим «жесткий» контроль скорости. Алгоритм на уровне макроблоков основан на модели, которая вычисляет предполагаемое число бит , для кодирования макроблока по следующей формуле: (7.11) где - это число пикселов в макроблоке, - среднеквадратическое отклонение яркости и хроматичности в остаточном макроблоке (т.е. мера вариации внутри макроблока), — размер шага квантователя, а и — постоянные параметры модели. Для каждого макроблока выполняются следующие действия. 1. Измерить . 2. Вычислить с помощью значений , , , , используя вес данного макроблока. 3. Закодировать макроблок. 4. Обновить параметры модели и , зная настоящее число кодовых бит, отвечающих данному макроблоку. Вес макроблока контролирует его «важность» для субъективного восприятия изображения. Низкие значения говорят о том, что данный блок не столь важен при визуализации и он будет проквантован сильнее остальных макроблоков. Эти веса можно выбирать из условия минимизации изменений при низких битовых скоростях, поскольку каждое изменение этого параметра вызывает отправку параметра модификации квантования DQUANT, что означает добавку лишних пяти бит к коду макроблока. Важно минимизировать число изменений при кодировании одного кадра при низкой скорости, поскольку добавочные пять бит в макроблоке могут оказаться значительной добавкой. При высоких скоростях эти добавочные DQUANT не столь существенны, поэтому параметр можно менять чаще, не боясь увеличить общий размер кода. Такой метод контроля скорости эффективен для поддержки хорошего визуального качества при малом размере выходного буфера кодера и для удержания задержек кодирования на минимальном уровне (это важно для низкоскоростных приложений, работающих по описанному выше сценарию). Дополнительную информацию о других стратегиях контроля скорости можно почерпнуть в [41].
|