Введение
Видеокодек 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.
Cinepak is a lossy video codec developed by Peter Barrett at SuperMac Technologies, and released in 1991 with the Video Spigot, and then in 1992 as part of Apple Computer's QuickTime video suite. One of the first video compression tools to achieve full motion video on CD ROM, which is why its FourCC identifier is CVID. The codec was ported to Microsoft Windows in 1993. It was also used on fourth and fifth generation game consoles, such as the Atari Jaguar CD, Sega CD, Sega Saturn, and 3DO. libavcodec includes a Cinepak decoder and an encoder, both licensed under the terms of the 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 в интеркадровом изображении может быть пропущен. Пропущенный блок копируется без изменений с предыдущего кадра с использованием условного обновления. Скорость передачи данных можно регулировать, изменяя частоту ключевых кадров и допустимую погрешность в каждом блоке.