Качество и битрейт

Вольное изложение для русских читателей статей,
опубликованных на digital-digest (Nicky Page ),
выполненное Александром Максимовым (www.kc.ru/~Ermax).

Все ищут оптимальные параметры кодирования для получения максимального визуального качества картинки DivX фильма при минимальном размере файла. Я провел много времени, экспериментируя с различными вариантами и пришел к выводу, что настало время поделиться результатами моих изысканий с широкой общественностью. Эта статья не набор правил, строгое следование которым приведет вас к отличным результатам, это лишь константация фактов, которые, на мой взгляд, необходимо принимать во внимание при поиске вашего собственного решения. Однако я надеюсь, что изучение моего опыта позволит вам сохранить время поиска оптимальных настроек кодеков при изготовлении ваших собственных фильмов.

Параметры DivX кодеков, которые следует настраивать

Вначале обсуждения, давайте рассмотрим, какие же параметры кодеков можно изменять и на что повлияют внесенные нами изменения. Также обсудим разницу между Fast Motion и Low Motion кодеками.

Диалог настройки параметров кодека

Частота следования ключевых кадров (KEYFRAMES)

Большинство видеоформатов, использующих сжатие видеоданных, используют ключевые кадры. Это помогает кодеку переходить к произвольному фрагменту фильма и поддерживает качество картинки на высоком уровне. Использование ключевых кадров уменьшает размер произвольного кадра в фильме. Большинство кодеков вставляют ключевые кадры примерно через 5-10 секунд. Установки по-умолчанию в DivX кодеках рекомендуют 1 ключевой кадр каждые 10 секунд. Это значение достаточно для большинства случаев, но следует учитывать то обстоятельство, что переход к произвольному фрагменту фильма происходит по следующему алгоритму: позиционирование на ближайший ключевой кадр, затем восстановление кадров до нужной позиции.

Таким образом получается, что для быстрого позиционирования на нужный фрагмент желательно устанавливать большую частоту следования ключевых кадров. Увеличение частоты ключевых кадров (key frames < 10) таит в себе также и неприятные последствия.

Во-первых, растет размер получаемого файла. Ключевой кадр несет в себе полную информацию по кадру, а все остальные содержат в себе изменения картинки относительно ключевого (это и называется "компрессией по времени") поэтому размер ключевого кадра больше размера дельта-кадров и увеличение их числа естественно увеличивает размер выходного файла..

Во-вторых, большая частота ключевых кадров может приводить к "дерганью" изображения на ключевых кадрах. При уменьшении частоты ключевых кадров (key frames > 10) размер файла, как правило, уменьшается, очень сильно затрудняется навигация по фильму, может ухудшится качество картинки. Выходом может являться автоматическая вставка ключевого кадра при смене сцены в фильме. Для включения автоматики необходимо использовать так называемый DivX Scene-Detect Patch. При его использовании необходимо установить интервал между ключевыми кадрами равным 9999 и кодек будет автоматически вставлять ключевые кадры при резкой смене сцены. Общее количество ключевых кадров в файле при использовании автоматики уменьшается, размер файла уменьшается, визуальное качество картинки улучшается. Наблюдать работу кодека можно с помощью программы VirtualDub. Красными линиями обозначены ключевые кадры.

Работа Scene-Detect Patch при key frames = 1 (видно, что ключевые кадры следуют с интервалом 1 секунда или при смене сцены).
Работа Scene-Detect Patch при key frames = 9999 (видно, что ключевые кадры вставляются только при смене сцены).

При использовании Scene-Detect Patch нельзя гарантировать, что ключевые кадры будут вставляться в одних и тех же местах при использовании Fast Motion и Low Motion кодеков. Однако в моей практике случаев вставки ключевых кадров в разных временных точках фильма не встречалось.

Битрейт (BITRATE)

При видеосжатии возможно использование двух типов битрейта: постоянный и переменный.

Постоянный битрейт означает, что фиксированное количество данных используется для кодирования одной секунды фильма. Несомненно, что большим значениям битрейта соответствует лучшее качество картинки. Для лучшего понимания допустим, что частота кадров обрабатываемого фильма составляет 25 кадров в секунду. Если установить битрейт в 1000 Килобит в секунду и кодировать одну секунду видео, каждый кадр будет занимать 40 Килобит. Если использовать битрейт в 2000 Килобит, то на каждый кадр придется уже по 80 Килобит. Понятно, что 80 Килобитный кадр будет иметь лучшее визуальное качество, чем 40 Килобитный.

Обращаю ваше особенное внимание на тот факт, что размер файла фильма зависит только от битрейта и совсем не зависит от разрешения картинки. Например, если закодируем одну секунду фильма у которого размер картинки 352 x 288 с битрейтом 1000 Килобайт в секунду, то полученный файл будет занимать ровно 1000 Килобайт. Если закодируем с теми же параметрами фильм с размером картинки 5000 x 5000, то полученный файл будет занимать те же 1000 Килобайт. Как это ни странно на первый взгляд, но то, что мы установили битрейт 1000 Килобит полностью определило количество данных для фильма!

Переменным битрейтом называется случай, когда кодек устанавливает собственное значение битрейта в зависимости от сцены фильма. Например, при кодировании в mpeg в основном выигрыш в сжатии получается за счет сохранения только разницы между соседними кадрами. При медленном изменении сцены разница между кадрами невелика и, таким образом, можно уменьшить величину битрейта, необходимого для воспроизведения этих сцен. Однако, при резкой смене сцен в фильме различия в кадрах резко возрастают по объему и требуется больший битрейт для воспроизведения таких сцен (в таких случаях, при слабой вычислительной мощности воспроизводящего оборудования, могут наблюдаться искажения картинки из-за неспособности оборудования обсчитать возросшее количество данных, т.е. появятся "квадраты").

При переменном битрейте в принципе невозможно предсказать размер получаемого файла, как как он определяется только соотношением "быстрых" и "медленных" сцен в конкретном фильме. Как правило в таких случаях ограничивают только максимальное и минимальное значения битрейта, для того чтобы гарантировать, что размер получаемого файла не будет черезчур огромным и в тоже время качество картинки не будет хуже приемлемого.



Установки плавности/резкости (SMOOTHNESS & CRISPINESS SETTINGS)

Одним из способов часто используемых для уменьшения размеров AVI файла является уменьшение частоты кадров фильма. Например, исходный фильм делался в формате NTSC у которого 30 кадров в секунду. Если мы установим в своем фильме частоту кадров равной 15, то файл будет в два раза меньше относительно исходного. 15 кадров в секунду на глаз смотрятся нормально, особенно в мультфильмах (которые, говорят, и делаются на 15 кадрах в секунду).

Но это верно только для AVI, Mpeg будет в таком случае добавлять кадры, чтобы довести частоту кадров до минимально возможного значения в 23.976 кадров в секунду (fps). Но в параметрах файла он укажет проигрывателю, что воспроизводить этот файл нужно только на 15 fps. Таким образом файл, физически имеющий внутри 23.976 fps, будет воспроизводиться на 15 fps. DivX кодек умнее, чем Mpeg — он способен выбрасывать кадры для уменьшения размера файла.

И вот тут как раз на сцену выходят значения параметров плавности/резкости кодека. Эти установки влияют на представление частоты кадров в получаемом файле. Параметр "плавность" задает возможности по сбрасыванию кадров, чем он меньше, тем больше кадров может пропускать кодек при кодировании фильма. Таким образом, "резкость" тоже влияет на выпадение кадров. Чем больше "резкость", тем больше кадров пропустит кодек при кодировании, но этот эффект проявляется только при очень низких значениях битрейта. При нормальных значениях битрейта можно устанавливать "резкость" в 100%, но для гарантии отсутствия выпадения кадров безопаснее установить этот параметр в 75%.

Интерес представляет случай, когда разрешение картинки выбрано большим, например 706 х 480. Тогда даже при разумно большом битрейте возможны случаи, когда кодек будет выбрасывать кадры. Это произойдет в быстрых сценах, когда из-за быстрого изменения сцены возрастет разница между отдельными кадрами и удельный вес данных, приходящихся на дельта-кадры в видеопотоке возрастет. Примером таких фильмов могут служить многие видео-клипы.



Какова же разница между двумя кодеками?

Согласно утверждениям, Fast Motion Codec и Low Motion Codec являются переделкой кодеков от MS MPEG4, более того, это переделки одного и того-же кодека отличающегося только номером версии. Однако разница между ними существует и она большая. Установки битрейта для Fast Motion Codec задают только верхнюю границу, переступить которую при кодировании фильма кодек не имеет права, а реальные значения битрейта при кодировании фильма кодек выбирает сам. Поэтому невозможно предсказать размер файла для фильма, кодированного с использованием Fast Motion Codec. При использовании Low Motion Codec установки задают нижнюю границу, меньше которой кодек не имеет права устанавливать битрейт при кодировании фильма. Кодек может увеличивать битрейт в небольших пределах (порядка единиц процентов) в быстрых сценах, но обычно он будет использовать установленное вами значение битрейта. Таким образом Low Motion Codec ипользует практически постоянный битрейт, что позволяет легко предсказывать размеры получаемого с его помощью файла.

Гораздо интереснее сравнивать качество картинки, получаемой при использвании разных кодеков:

Быстрая сцена, кодированная с помощью Fast Motion codec на 6000kbps
Быстрая сцена, кодированная с помощью Low Motion codec на 600 kbps
Статичная сцена, кодированная с помощью Fast Motion codec at 6000kbps
Статичная сцена, кодированная с помощью Low Motion codec на 600 kbps

Рассматривая рисунки можно заметить, что Low Motion codec дает заметно лучшее качество при кодировании статических сцен, а в динамических сценах в связи с запретом на увеличение битрейта кодек дает искаженную картинку (рисует "квадраты"). Однако при увеличении битрейта Low Motion codec дает качество картинки действительно сравнимое с ДВД, однако при увеличении битрейта неоправданно возрастает размер файла при кодировании статических сцен. Напротив Fast Motion codec великолепно ведет себя в динамических сценах, а в статических сценах наблюдаются артефакты, скорее всего связанные с недостаточно высоким битрейтом, выбираемым алгоритмом кодека.


Выводы

Каждый кодек оптимизирован для определенных условий, поэтому в общем нельзя один фильм закодировать с помощью одного кодека (если только фильм не уникальный тем, что состоит только из статических или только динамических сцен), исключение составляют, пожалуй, только клипы, которые следует кодировать Fast Motion codec с автоматическим выбором ключевых кадров. Таким образом для достижения максимального визуального качества картинки, фильмы следует разрезать на статические и динамические сцены, каждую из которых следует кодировать своим кодеком (как это удобно сделать тема отдельного разговора). Поскольку битрейт жестко задает объем данных для каждого кадра, большие размеры картинки могут ухудшать ее визуальное качество (при увеличении размеров картинки растет нагрузка на процессор, кодек может выбрасывать кадры, обедняется палитра), поэтому имеет смысл поэкспериментировать с выбором оптимального размера картинки (это также тема для отдельной статьи).

Ковров, 2001



Copyright © 2001
Design by Mick Thunder
Источник получения информации http://dvdrip.narod.ru




Назад
Hosted by uCoz