Введение

Видеокодек Cinepak — это видеокодек с потерями, разработанный Питером Барреттом в SuperMac Technologies и выпущенный в 1991 году вместе с Video Spigot, а затем в 1992 году как часть видеопакета QuickTime от Apple Computer. Это был один из первых инструментов сжатия видео, позволивший добиться воспроизведения полноэкранного видео на CD-ROM, что и отражено в его FourCC-идентификаторе CVID. Кодек был портирован на Microsoft Windows в 1993 году. Он также использовался на игровых консолях четвёртого и пятого поколений, таких как Atari Jaguar CD, Sega CD, Sega Saturn и 3DO. Библиотека libavcodec включает в себя декодер и кодировщик Cinepak, оба распространяемые под лицензией LGPL.

История

Это был основной видеокодек ранних версий QuickTime и Microsoft Video для Windows, но впоследствии был вытеснен кодеками Sorenson Video, Intel Indeo, а в последнее время – MPEG 4 Part 2 и H.264/MPEG 4 AVC. Тем не менее, фильмы, сжатые с использованием Cinepak, обычно по-прежнему воспроизводятся в большинстве медиаплееров.

Технология

Cinepak основан на векторном квантовании, что является принципиально иным алгоритмом, чем алгоритм дискретного косинусного преобразования (DCT), используемый большинством современных кодеков (в частности, семейством MPEG, а также JPEG). Это позволило реализовать его на относительно медленных процессорах (видео, закодированное в Cinepak, обычно нормально воспроизводится даже на 25 МГц Motorola 68030, а консоли, такие как Sega CD, часто использовали еще более медленные процессоры, например, 12,5 МГц 68000), но при низких битрейтах это часто приводило к блочным артефактам, что и объясняло критику, направленную на видеоигры, основанные на FMV. Векторы, которые квантуются в Cinepak, представляют собой блоки 2×2 пикселя. Блок может состоять из 4 значений яркости (в оттенках серого) или из 4 значений яркости и 2 значений цветности (хрома-сабдискретизация 4:2:0). Квантованные блоки хранятся в двух кодовых книгах, называемых V1 и V4, каждая из которых содержит до 256 записей. Векторы в кодовой книге V1 представляют собой уменьшенные блоки 4×4 пикселя, а в кодовой книге V4 – блоки 2×2 пикселя. Для обработки Cinepak разделяет видео на ключевые (внутрикадровые) изображения и интеркадровые изображения. В ключевых изображениях кодовые книги передаются целиком, а в интеркадровых изображениях записи кодовых книг выборочно обновляются. Каждое изображение далее разделяется на несколько горизонтальных полос. Кодовые книги могут обновляться для каждой полосы отдельно. Каждая полоса разделена на блоки 4×4 пикселя. Каждый блок может быть закодирован либо из кодовой книги V1, либо из кодовой книги V4. При кодировании из кодовой книги V1 в битовый поток записывается один индекс кодовой книги на блок 4×4, а соответствующая запись кодовой книги 2×2 масштабируется до 4×4 пикселей. При кодировании из кодовой книги V4 в битовый поток записываются четыре индекса кодовой книги на блок 4×4, по одному для каждого подблока 2×2. В качестве альтернативы кодированию из кодовой книги V1 или V4, блок 4×4 в интеркадровом изображении может быть пропущен. Пропущенный блок копируется без изменений с предыдущего кадра с использованием условного обновления. Скорость передачи данных можно регулировать, изменяя частоту ключевых кадров и допустимую погрешность в каждом блоке.