1 Сжатие видео Сжатие видео H.264 Дмитрий Ватолин Московский Государственный Университет CS MSU Graphics&Media Lab Version 1.1
CS MSU Graphics & Media Lab (Video Group) Структура материала u Введение u Компенсация движения u Преобразование u Квантование u Фильтрация u Перестановка u Entropy coding u NAL
CS MSU Graphics & Media Lab (Video Group) Эволюция стандартов Стан-тГодПр-тельЧто нового H ITU-T16/16 целочисленная компенсация движения 8 8 DPCM/DCT, преобразование, VLE кодирование MPEG-11993ISO/IECBi-предсказание, half- компенсация движения MPEG-21997ISO/IEC ITU-TВыбор качества, Profiles и Levels, Interlaced video H ITU-TПоддерживает передачу данных ниже 30 кбит/сек, цепи и сети с пакетной коммуникаций P-slice могут включать I-блоки H.263+, H H.26L ITU-T1) Поддерживает все скорости передачи информации в битах, большее количество опций 2) Акцент на погрешностях 3) Long-term и дальнейшее развитие до H.264 MPEG-41998ISO/IEC H ISO/IEC ITU-T10-ая часть MPEG-4, см далее
CS MSU Graphics & Media Lab (Video Group) Список сокращений MPEG- Moving Picture Experts Group ISO - International Standards Organisation VCEG - Video Coding Experts Group IEC- International Electrotechnical Commission ITU - International Telecommunications Union
CS MSU Graphics & Media Lab (Video Group) Эволюция стандартов
CS MSU Graphics & Media Lab (Video Group) Новое в H.264 u Многорежимная компенсация движения 1/4-, 1/8- компенсация движения B- предсказание u Целочисленное преобразование над блоками 4 4 Многорежимное intra- предсказание Deblocking- фильтр u Entropy-кодирование NAL (Network Abstraction Layer) SP, SI - slice
CS MSU Graphics & Media Lab (Video Group) H.264 / используемые форматы видео u Кодируются отдельные изображения (фреймы) u H.264 поддерживает progressive и interlaced форматы видео u Размер изображений должен быть кратен 16 по обоим измерениям progressive videointerlaced video top field bottom field top field 16a 16b
CS MSU Graphics & Media Lab (Video Group) H.264 / формат изображения Изображение представлено в формате YCbCr 4:2:0 Y=0.299R+0.587G+0.115B Cb=0.564(B-Y) Cr=0.713(R-Y) Изображение разбивается на так называемые макроблоки размера 16 x 16 по яркостной компоненте и, соответственно, размера 8x8 для цветовых компонент Y Cb Cr
CS MSU Graphics & Media Lab (Video Group) H.264/ Термины Макроблок A предсказывается макроблоком B, если из всевозможных макроблоков из предшествующих фреймов, разница между блоками B и А минимальна. Эта разница называется компенсацией движения (motion compensation) Intra – кодирование – кодирование без использования компенсации движения Inter – кодирование – кодируется с использованием компенсации движения
CS MSU Graphics & Media Lab (Video Group) H.264 Кодирование
CS MSU Graphics & Media Lab (Video Group) H.264 Декодирование
CS MSU Graphics & Media Lab (Video Group) H.264 / Кодирование-декодирование F n - текущий фрейм, множество макроблоков, каждый из которых кодируется в intra или inter режимах P - предсказание uF n - восстановленный, но без фильтра, текущий фрейм F n-1 - один или два ранее закодированных фрейма D n - разница между блоком и его предсказанием
CS MSU Graphics & Media Lab (Video Group) ME - motion estimate, поиск наиболее подходящего предсказания MC - motion compensation, компенсация движения (вычисление векторов движения) T - transformation, преобразование Q - квантование Entropy Coding – непосредственно кодирование NAL - Network Abstraction Layer, формат для передачи по различным каналам H.264 / Кодирование-декодирование
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / Inter-блоки При кодировании inter-(макро)блока возникают вектора движений Если вектор движения по яркостной компоненте Y равен (x,y), то соответствующий вектор по Cr и Cb будет равен (x/2,y/2) Текущий фрейм x=x2-x1 y=y2-y1 Фрейм с предсказанием y1 x1 y2y2 x2x2
CS MSU Graphics & Media Lab (Video Group) Каждый фрейм представляется как одна плоскость (slice) или несколько видеоплоскостей. Типы slice: I, P, B, SP, SI Компенсация движения / Slices
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / I-slice I-slice – плоскость, состоящая исключительно из intra-макроблоков (первый фрейм всегда является I-slice) Макроблоки могут ссылать только на уже закодированные макроблоки из той же slice
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / P-slice Для пропускаемых макроблоков посылается только сигнал о том, что он пропускаемый и больше никаких данных intra inter Skipped
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / Разбиение макроблока древовидная структура компенсации движения x x x x x x4 0
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / SP and SI slices Основная идея: SP (switching P) и SI (switching I) slices – это кодирование ДОПОЛНИТЕЛЬНЫХ кадров, дающих В ТОЧНОСТИ такой же результат, как и основные кадры в потоке.
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / SP and SI slices SP (switching P) и SI (switching I) slices могут использоваться для: u обеспечения устойчивости к ошибкам u для переключения между различными потоками (когда передается, например, стереопоток) u для fast forward.
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / SP-slice Использование SP/SI-slices для переключения между потоками: В стандартах до H.264 возникала switch point. При этом образуется I- slice что приводит к увеличению числа данных в каждой такой точке B3B3 B0B0 B4B4 B1B1 B2B2 поток B A3A3 A0A0 A4A4 A1A1 A2A2 поток АPPP I P P PP PP
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / SP- and SI-slices поток В P B3B3 P B0B0 P B4B4 P B1B1 SP B2B2 поток А SP AB 2 P A3A3 P A0A0 P A4A4 P A1A1 SP A2A2 SP-slices (AB 2 и B 2 ) используются для кодирования одной и той же плоскости (B 3 ), ссылаясь на два фрейма (A 1 и B 1 ) из разных потоков. (аналогично строится BA 2 ) Из двух SP-slice получаются одни и те же данные.
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / SP- and SI-slices u Кодировщик кодирует SP-slices регулярными интервалами. Для каждой SP-slice имеется еще по крайней мере одна SP-slice, которая использует другой ссылочный фрейм или SI-slice. u Если во время передачи фрейм поврежден, получатель может информировать передатчик через обратную связь, и передатчик пошлет SP- slice, использующую другой ссылочный фрейм или SI-slice. Устойчивость к ошибкам за счет использования SP/SI slices:
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / SP and SI slices fast forward (основная идея: А 11 полностью одинаков после А 0-10 и после А 10 ) A 10 A9A9 A8A8 A0A0 A 0-10 A PPP SPPSP
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / Интерполирование Увеличение макроблока возможно в 2 и 4 раза. Используется FIR (Finite Impulse Response) b = round((E 5F + 20G +20H 5I + J) /32) j = round((h + m) / 2) bbCD IFEJbGH PLKQsMN ggRS hhTU ccjhddmeeff BA
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / short и long terms a) недоступен для использования b) short term c) long term d) готов к выводу на экран Max short Min long Max long Min short лист из N предыдущих картинок После того, как фрейм закодирован (декодирован), шифратор (дешифратор) может присвоить ему один из следующих статусов: short termlong term недоступен для использования Adaptive memory control command
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / список0 и список1 long и short terms выстраиваются в два списка: список 1 - фреймы с номерами больше текущего, по возрастанию, затем- меньше текущего по убыванию список 0 - фреймы с номерами меньше текущего по убыванию,затем - больше текущего, по возрастанию Пример: имеются terms 123,125,126,128,129,130 текущий фрейм – номер 127 индекссписок0список
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / B-slice Каждое разбиение inter-кодируемого макроблока в B-slice может быть предсказано одной или двумя ссылочными кадрами, до или после текущего кадра две предыдущие одна предыдущая, одна следующая две следующие B блок
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / B-slice каждый (макро)блок в B-slice предсказан: в режиме Direct компенсация движения из списка0 компенсация движения из списка1 Bi-предсказание из списка0 и списка1 список0 Bi с0 с1с1 Bi Direct 16x8,8x16 8x8 : все части кодируются в одном режиме 16x16
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / Bi-предсказание >>1 список1 список0 текущий residual pred(i,j)= (pred0(i,j)+pred1(i,j)+1)>> образуется два вектора движения
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / intra-предсказание DMHBEFG I J K L b C cd efgh ijkl mnop a A DMHBEFG I J K L b C cd efgh ijkl mnop a A 9 режимов предсказания для Y 4x4, 4 для Y 16x16, 4 для Cr(Cb) 8x8 режим 0 (вертикальный) У всех режимов разная ошибка предсказания Sum of Absolute Errors(SAE)
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / intra-предсказание DMB I J K L b C cd efgh ijkl mnop a ADMB I J K L CA a = b =.. = p = (A D + I L)/8 в режимах 3-8 используется weighted average : в режиме 4: d=(B/8+C/2+D/8) DMHBEFG I J K L b C cd efgh ijkl mnop a A 7 5 DMHBEFG I J K L b C cd efgh ijkl mnop a A 6 8 DMHBEFG I J K L C d A 3 4 режим 1 режим 2(DC)
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / intra-предсказание C EA B mE=min(modeA,modeB)-наиболее вероятный режим блока E A вне плоскости A не intra mE=min(2,modeB) кодировщик(декодер) посылает для каждого блока 4x4 2 флага: prev_intra_4x4_pred_mode и rem_intra_4x4_pred_mode rem, если prev=1, rem=mE
CS MSU Graphics & Media Lab (Video Group) Компенсация движения / Предсказание ВД Кодируется не сам вектор движения, а разница между ним и другим вектором движения Для ВД блоков макроблока E предсказаниями являются ВД из блоков: 1) 1)E=2 блока 16x8 B/A 2) 2)E=2 блока 8x16 A|C 3) 3)в остальных случаях – среднее из A,B и C AE CB A B A,B,E – одинакового размера A,B,E – разного размера
CS MSU Graphics & Media Lab (Video Group) Преобразование X Y= Матрица CXC T – основа 2D трансформации E- матрица динамических векторов CfCfCfCf CfTCfTCfTCfT EfEf
CS MSU Graphics & Media Lab (Video Group) Квантование коэффициенты квантования Qstep - определяется параметром квантования QP QP012345…18…24…30 … 51 Qstep … 224
CS MSU Graphics & Media Lab (Video Group) Фильтрация (деблокинг) (за исключением границ плоскости) Cr 8x8 Y 16x16 Фильтрация применяется на границах блоков При условии, что a) a)bs>0 |p1-p0| |q1-q0| b) |p0-q0|
CS MSU Graphics & Media Lab (Video Group) Фильтрация (деблокинг) q2 q1 q0 p0 p1 p2 p3 q3 Г p2p1p0q0q1q2q3p3 Г
CS MSU Graphics & Media Lab (Video Group) Фильтрация (деблокинг) в p и(или) q есть закодированные коэффициенты? p или q из intra? Г -граница макроблока? bs=4 bs=3 bs=2 bs=1 bs=0 p и q ссылаются на разные картинки или на картинки с разными номерами или их вектора движений отличаются в одной или более компоненте по Y? да нет да нет bs- сила границы (boundary strength)
CS MSU Graphics & Media Lab (Video Group) Перестановка/Порядок считывания макроблока Cb Cr Y DC Блок –1 из коэффициентов DС образуется только в 16x16 Intra-кодируемых блоках
CS MSU Graphics & Media Lab (Video Group) Перестановка intra 4x4 для interlaced video intra 4x4 для progressive video порядок обхода макроблоков в плоскости
CS MSU Graphics & Media Lab (Video Group) Entropy Coding / Кодирование плоскости inter или intra inter 8x8, QP,закодированные коэффициенты трансформации данные о плоскости header плоcкости МБSkippedМБ … тип МБ intra+ inter(кроме8x8) остальное
CS MSU Graphics & Media Lab (Video Group) Entropy Coding Кодируются следующие данные: наименованиеназначение mb_typeтип макроблока Coded_block _pattern показывает какие блоки внутри макроблока содержат закодированные коэффициенты QPпараметр квантования, кодируются как разность с предыдущим Refer_frame_indexномера фреймов для предсказания Residualразница между блоком и его предсказанием MVвектор движения
CS MSU Graphics & Media Lab (Video Group) Entropy Coding entropy_coding_mode: 1:1: 0:0: Residual – CALVC (Context Adaptive Variable Length Coding) остальное - Exp-Colomb все данные – CABAC (Context-based Adaptive Binary Arithmetic Coding)
CS MSU Graphics & Media Lab (Video Group) Entropy Coding / CALVC После компенсации движения, преобразования и квантования, блок обычно состоит из большого числа нулей Блок считывается в зигзаг порядке (см. Перестановка) 0,3,0,1,-1,-1,0,1,0...0
CS MSU Graphics & Media Lab (Video Group) Entropy Coding / CALVC Кодируются следующие величины: названиеЧто означаетДоп. знач. при- мер Coeff_tok en Число ненулевых коэффициентов Trailing _ones Число 1 и -1 (если их больше, то остальные кодируются обычным способом) Trailing_ ones_sign _flag Знаки при коэф. 1 и -1, кодир-ся как trailing_ones, начиная с конца последовательности 0 (+) 1 (-) 0,1,1
CS MSU Graphics & Media Lab (Video Group) total_zeros –число нулей до последнего ненулевого коэффициента (3) Далее кодируются: оставшиеся коэффициенты 1 - level(1) (тоже в обратном порядке) 3 - level(0) run_before 0, 3, 0, 1, -1, -1, 0, 1, не кодируется Entropy Coding / CALVC
CS MSU Graphics & Media Lab (Video Group) Entropy Coding / Exp-Colomb code_numcodeword ……. параметрcode_numcodeword зависит от частоты встречаемости параметра codeword=[M нулей][1][INFO] где
CS MSU Graphics & Media Lab (Video Group) Entropy Coding / CABAC CABAC (Context Adaptive Binary Arithmetic Coding): u Выбор вероятностной модели для каждого синтаксического элемента в соответствии с его контекстом u Адаптация оценок вероятности на основании локальной статистики u Использование арифметического кодирования предпочтительнее VLC
CS MSU Graphics & Media Lab (Video Group) I. Бинаризация Кодирование данных value проходит стадии: |value|Бинаризация s 2110s 31110s … s >8Exp-Colomb Entropy Coding / CABAC
CS MSU Graphics & Media Lab (Video Group) e k =|value A |+|value B | binКонтекстная модель 10 e k
CS MSU Graphics & Media Lab (Video Group) III.Арифметическое кодирование каждого бина (используются две вероятности p[bin=0] p[bin=1]) IV.Обновление модели Пример. Выбрана model2 и bin=0 model2_0_count++; if (model2_0_count>threshold) { model2_0_count=0 model2_1_count=0; } Entropy Coding / CABAC
CS MSU Graphics & Media Lab (Video Group) NAL NALheaderNALheaderпосл-ть байтов байтовпосл-ть Network Abstraction Layer - Сетевой Абстрактный Уровень Форматирует видео после и добавляет к данным заголовок нужного типа, чтобы в дальнейшем передать информацию по любому из всего разнообразия транспортных уровней или носителей данных Форматирует видео после Entropy Encoding и добавляет к данным заголовок нужного типа, чтобы в дальнейшем передать информацию по любому из всего разнообразия транспортных уровней или носителей данных
CS MSU Graphics & Media Lab (Video Group) NAL разбиение данных закодированнаяплоскость уровень кодирования видео закодированныймакроблок Рациональнопредставляетсодержаниеинформации управляющие данные сетевой абстрактный уровень