7.4.5. Оптимизация по производительностиДостигнуть оптимального баланса между степенью сжатия и качеством декодирования весьма непросто. Если установить некоторые параметры кодирования в начале кодирования последовательности и оставить их неизменными на протяжении всего видеоряда, то это вряд ли приведет к оптимальной производительности по соотношению скорость/искажение, так как кодер имеет несколько альтернатив при кодировании каждого макроблока. Например, кодер может выбрать вектор движения для макроблока в моде inter так, чтобы минимизировать энергию остатка компенсации движения. Однако это может оказаться не лучшим вариантом, если этот вектор будет иметь большой модуль и для его кодирования потребуется больше битов. Оптимальный вектор движения должен иметь минимальное общее число бит, требуемое для кодирования заголовка, вектора движения и остаточных коэффициентов. Таким образом, чтобы выбрать оптимальный набор параметров кодирования (вектор движения, параметры квантователя и т.п.), необходимо несколько раз продекодировать макроблок для минимизации его кода. Далее, выбор параметров для макроблока МВ1 влияет на эффективность кодирования макроблока МВ2, поскольку, например, моды кодирования МВ2 (вектор движения, мода прогноза intra и т.д.) кодируются разностью от мод макроблока МВ1. Нахождение настроек, близких к оптимальным, является сложной задачей. На самом деле, это может оказаться во много раз сложнее самого процесса видеокодирования. В реальных кодеках, применяемых на практике, выбор оптимальной стратегии зависит от доступной вычислительной мощности, а также от допустимой задержки кодирования. При автономном кодировании широко используется так называемое «двухпроходное" кодирование, при котором каждый кадр обрабатывается один раз для получения статистик, которые влияют на выбор окончательной стратегии кодирования на втором проходе (это часто делается одновременно с алгоритмом контроля скорости для достижения заданной битовой скорости или требуемого размера файла). Было предложено много альтернативных стратегий оптимизации по соотношению скорость/искажение (например, на основе оптимизации по Лагранжу). Полезные ссылки можно найти в [6]. Такую задачу оптимизации нельзя решать изолированно от вычислительной производительности. На самом деле, оптимизацию видеокодека надо делать (минимум) по трем параметрам: по битовой скорости, по искажению и по вычислительной сложности. Все они влияют друг на друга. Например, оптимизация соотношения скорость/искажение достигается за счет повышения сложности кодирования, «быстрые" алгоритмы оценки движения часто имеют низкую вычислительную сложность за счет снижения эффективности кодирования и т.д. Эффективность кодирования и сложность кодирования являются настоящими антиподами. Например, приложения реального времени для ручных устройств можно разрабатывать с учетом малой вычислительной нагрузки и с низкой производительностью по соотношению скорость/искажение, а для приложений кодирования широковещательного видео в режиме офлайн можно использовать алгоритмы с высокой производительностью, поскольку вычислительное время не столь ограничительно, а качество кодирования является более критичным.
|