Переключись: [sonikelf.ru — статьи] [sonikelf.com — Форум] [sonikelf.info — новости]

                  Добро пожаловать!
Этот проект бесплатно поможет Вам удалить вирусы и spyware, оптимизировать систему, скачать и настроить бесплатные полезные программы и решить любые возникающие компьютерные проблемы.

Только бесплатные и понятные советы
Только бесплатный и адекватный софт.
Только для добрых и хороших людей ;-)
Главная » Мультимедия » Оценочные параметры качества сжатого видео.

Оценочные параметры качества сжатого видео.

Не так давно, мой коллега Евгений с проекта otstrel.ru, недавно написавший инструкцию о том Как и чем пересжать видео, решил не бросать начатое и написал статью, отвечающую на возникшие у многих вопросы и просто поясняющую некоторые вещи, которые необходимо знать для вышеуказанного процесса. Прошу к чтению ;)

folder

Если вам когда либо приходилось пользоваться программами сжатия видеопотоков, то вы наверняка встречали среди характеристик выходного файла такие параметры, как размер (size) выходного файла или его битрэйт (bitrate) и задавались вопросом: а как же выбрать правильное значение?

С аудиофайлами таких проблем как правило не возникает, ибо качество звука практически однозначно определяется его битрэйтом (т.е. скоростью воспроизведения потока, как правило выраженной в килобитах в секунду). Если мы видим, что битрэйт сжатого аудиофайла (mp3) равен 128 kpbs (килобитам в секунду), то нам понятно, что качество звука соответствует CD-диску, если это 64 или 96 kbps, то это уже звук низкого качества, если 256 kbps – то звук высокого студийного качества и т.п. Хотя внутри себя качество звука характеризуется ещё и такими параметрами, как частота оцифровки, но как правило этот параметр уже включен в битрэйт и потому качество звука обычно определяют по битрэйту. Т.е. если мы видим файл mp3 с музыкой с описанием, что он сжат с качеством 128 kbps, то мы уже подразумеваем, что это стереозвук с частотой оцифровки в 44 или 48 кгц.

С видео всё несколько сложнее. У видео есть такие параметры как размер кадра и частота кадров в секунду. А потому знание лишь одного битрэйта недостаточно – нужно дополнительно знать размер кадра и количество в кадров в секунду. А потому, глядя на параметры видео, например, 640×480 (размер кадра), 25 fps (кадров в секунду), 1300 kbps (битрэйт), новичку сложно что-то сказать о его качестве даже приблизительно. Точно также, задавая параметр 1300 kbps при сжатии видео, непонятно, что получим на выходе. И это критично, учитывая, что процесс пересжатия видеофильмов длится несколько часов.

Качество сжатия видеопотока более однозначно определяется коэффициентом “bits/pixel”, означающий среднее количество бит, потраченное на 1 пиксель изображения. Далее я этот коэффициент буду обозначать буквой K (потому как не знаю, как его обычно обозначают).
Если взять 24-битную глубину цвета, закодированного в формате RGB (т.е. когда красный, зелёный и синий каналы кодируются по 8 бит на канал), то несжатый видеопоток будет характеризоваться значением K=24. Современные видеокодеки дают изображение хорошего качества при довольно низком значении K. Для кодеков XviD и DivX хорошее качество изображения будет при значении K в диапазоне 0.25-0.35, для H264 - в диапазоне 0.15-0.2 (т.е. видеопоток сжимается по размеру файла более чем в 100 раз по отношению к несжатому). Значениями для других кодеков не владею, но чем хуже (старее) кодек, тем больше будет значение K, при котором будет хорошее качество изображения.

Коэффициент вычисляется по следующей формуле:

Код:
K = (size * 8 ) / (width * height * fps * time)


где
size – размер видеопотока в байтах
width, height – размер кадра (ширина и высота) в пикселях
fps – количество кадров в секунду
time – время видеопотока в секундах

При этом не забываем, что 1 килобайт равен 1024 байта (а не 1000), и, соответственно, 1 мегабайт равен 1024 килобайтам = 1048576 байт

Надо понимать, что приведённые выше значения K для кодеков – они взяты для “среднего” видео. Если видео представляет собой рисованный мультик или флэш-мультик, то хорошее качество будет и при более низких значениях коэффициента. Если в видео очень много движения и постоянного изменения цвета и яркости (например, муравейник), то для хорошего качества видео придётся сжимать с бОльшим значением коэффициента. Если не нужно чёткого изображения (например, когда нужно заснять какие-то физические упражнения, но при этом нам совершенно не важны чёткие контуры лица и окружающих предметов), то коэффициент можно уменьшать. И так далее.

Обычно программы сжатия просят указать значение битрэйта (как правило в килобитах в секунду) или целевого размера файла (как правило в килобайтах). Исходя из того, что битрэйт это размер файла в битах поделённый на время в секундах, то соответствующие параметры вычисляются по формулам:

Код:
Bitrate_kbps = (K * width * height * fps) / 1024           (формула 1)
Size_kbyte = (K * width * height * fps * time) / (1024 * 8 ) = (K * width * height * frames) / (1024 * 8 )                (формула 2)
Size_mbyte = (K * width * height * fps * time) / (1024 * 1024 * 8 ) = (K * width * height * frames) / (1024 * 1024 * 8 )  (формула 3)


где
Bitrate_kbps – искомый битрэйт в килобитах в секунду (kbps)
Size_kbyte, Size_mbyte – искомый размер видеопотока в килобайтах (Kbytes) и мегабайтах (Mbytes) соответственно
K – выбранный нами коэффициент, характеризующий степень сжатия
width, height – размер кадра (ширина и высота) в пикселях
fps – количество кадров в секунду
time – время видеопотока в секундах
frames – количество кадров (в некоторых программах выдаётся именно это значение), которое по сути есть fps * time

ВНИМАНИЕ! Все эти размеры касаются строго размера видеопотока. Программы, как правило, также работают с этими параметрами применительно к видео (а не к итоговому файлу). Важно не забывать, что в файле будет присутствовать аудиопоток. Как правило, его битрэйт задаётся, а его размер в файле будет составлять

Код:
Size_kbyte_audio = (Bitrate_kbps_audio * time) / 8           (формула 4)
Size_mbyte_audio = (Bitrate_kbps_audio * time) / (1024 * 8 )  (формула 5)


где
Bitrate_kbps – битрэйт аудио в килобитах в секунду (kbps)
Size_kbyte_audio, Size_mbyte_audio – искомый размер аудиопотока в килобайтах (Kbytes) и мегабайтах (Mbytes) соответственно
time – время видеопотока (и, соответственно, аудиопотока) в секундах

Если в процессе пересжатия будете изменять размер картинки (кадра), то обязательно следите за тем, чтобы соотношение ширины и высоты кадра оставалось прежним. Полезно так же выбирать размеры такими, чтобы длина и ширина были кратны 16 (но вроде бы как необязательно). Это связано с особенностями работы кодеков.

Теперь рассмотрим два конкретных примера.

Пример 1

Имеется видеофайл, снятый на фотоаппарат. Фотоаппарат как правило очень слабо сжимает видео, а потому файлы занимают слишком много места. Нам нужно его пересжать (при этом мы НЕ стремимся к какому-то конкретному размеру, потому что знаем, что он будет в несколько раз меньше, но конкретное значение нам неважно). Параметры исходного файла: 1024×768, 15fps, 20 минут. Будем сжимать кодеком XviD (по той причине, что H264 ещё не сильно распространён, к тому же не все железячные DVD-плееры поддерживают H264). Видео домашнего застолья, где движения сильного нет, в основном сидят люди и чешут языком. В этом случае будем исходить из значения коэффициента K=0.25. Какие-то детали типа названия книг на полках нам совершенно неинтересны, а потому сократим размер до 640×480. Итого имеем параметры выходного видео:

K = 0.25
width = 640
height = 480
fps = 15
time = 20 минут = 1200 секунд

Если программа-перекодировщик просит значение битрэйта, то выдаём ему значение (по формуле 1):

Bitrate_kbps = (0.25 * 640 * 480 * 15) / 1024 = 1125 kbps

при этом время видео в формуле не учитывается, т.к. мы задаём значения битрэйта (где время уже косвенно включено в этот параметр)

Если же программа-перекодировщик просит указать размер видеопотока, то подставляем значение (по формуле 2):

Size_kbyte = (0.25 * 640 * 480 * 15 * 1200) / (1024 * 8 ) = 168750 Kbytes

Пример 2

Имеется видеофильм (беру реальный пример). 1024×432, 25fps, длительность 2 часа 3 минуты 19 секунд (что есть 7399 секунд). Размер файла 3.74 гигабайт. Мы хотим за счёт уменьшения размера картинки сократить размер изображения до 1.37 гигабайт (что есть 1403 мегабайта) – обычно до такого размера делают DVD-rip’ы, чтобы влезло 3 штуки на один DVD-диск.

Поскольку конечной целью является уложиться в размер, здесь вспоминаем, что в файле есть видео и аудио потоки. Параметры видео будут зависеть от того, какую часть размера мы потратим на аудио. При таком сокращении размера файла качество картинки в любом случае ухудшится, а потому держать 6-канальный звук нет никакого смысла. Поэтому при перекодировке будем использовать стереозвук в формате mp3 и битрэйтом 128 kpbs. Значит звук будет занимать размер (по формуле 5):

Size_mbyte_audio = (128 * 7399) / (1024 * 8 ) = 116 мегабайт.

Следовательно, на видео остаётся 1403-116=1287 мегабайт

Теперь нам надо вычислить, до какого размера можно сократить картинку. Сжимать будем кодеком XviD (опять-таки исходя пока ещё из малой распространённости H264). Картинка нам нужна качественная, а потому берём значение K=0.35. Из формулы 3 вычисляем:

width * height = (Size_mbyte * 1024 * 1024 * 8 ) / (K * fps * time) = (1287 * 1024 * 1024 * 8 ) / (0.35 * 25 * 7399) = 166758

Фактически мы вычислили площадь картинки в пикселях. Теперь нам надо подогнать размер картинки под эту площадь, сохранив при этом соотношение длины и ширины исходной картинки. Т.е. фактически решить систему уравнений:

width * height = 166758
width / height = 1024 / 432

Получаем округлённые до целого значения width = 629, height = 265. В принципе, можно оставить и эти значения, но лучше привести их к значениям, кратным 16. Ближайшие значения снизу и сверху для width это 624 и 640, для height - 256 и 272. Посмотрим соотношение сторон у оригинала и у картинок, с приведёнными значениями:

1024/432 = 2.370
624/256 = 2.437
624/272 = 2.294
640/256 = 2.500
640/272 = 2.352

Наиболее близким к оригиналу соотношение сторон получилось у разрешения 640×272. Поскольку при таких значениях мы получим бОльшее произведение width * height, чем высчитали, то итоговый размер файла будет немного больше расчётного. Но это не страшно, т.к. при размере в 1.37 гигабайт 3 файла влезают на DVD-диск не впритык, а с запасом. Главное как можно точнее сохранить пропорции изображения. В файле помимо видео- и аудиопотоков хранится вспомогательная информация, обусловленная форматом файла. Вряд ли она занимает более 1% от размера всего файла, но этот фактор надо учитывать, если нужно точно подгонять размер файла

Итого, параметры искомого файла

K = 0.35
width = 640
height = 272
fps = 25
time = 7399 секунд

Ну а далее по формуле 1 или 2 вычисляем нужное нам значение битрэйта или размера файла и подставляем его в программу-перекодировщик.

Читайте статьи схожей тематики:

  • Как и чем пересжать видео. [Magic Video Converter] [опубликовано 9 февраля, 2009]
  • Программа для записи дисков. Быстро и просто [SCDWriter] [опубликовано 1 февраля, 2009]
  • Универсальные редакторы текста, html, php и прочего кода [PHP Expert Editor] и [PSPad] [опубликовано 25 сентября, 2008]
  • Open Office как альтернатива Microsoft Office [опубликовано 10 сентября, 2008]
  • О том что такое кодеки и зачем они нужны [K-Lite Mega Codec Pack] [опубликовано 10 июля, 2008]
  • Комментарии. Присоединяйтесь к обсуждению!

    ВАЖНО! Прежде чем писать - прочитайте комментарии, быть может, то, что Вам нужно, там уже есть. Так же, ознакомьтесь с правилами комментирования.

    ВАЖНО! На случай, если у Вас проблемы с закачкой антивирусов, то на страничке "Сборки" Вы всегда можете найти альтернативные ссылки на закачку популярных антивирусных утилит (dr.web, avz, spybot и пр.)

    У проекта есть свой форум. Именно там Вы можете получить ответы на многие вопросы.

    Что-то пригодилось и помогло? Понравился проект? Скажите спасибо и поделитесь ссылкой с друзьями!.

    Не справляетесь сами, но не хотите платить сомнительным сервисам компьютерной помощи? Попросите меня.

    Вчяеславович Подписка на комментарии с помощью e-mail
    2009-03-12 16:47:49

    Автору спасибо!
    Прочитал полностью статью .. в рабочее время!;)

     
    Владимир
    2009-05-09 08:54:10

    Сплошной абракадабрмизм…
    А попроще можно это дело разжевать?
    У многих , в том числе у меня, слабая видеокарта. Поэтому мало-мальски “легкий” фильм (до 300 мб) я могу посмотреть, а вот “тяжелые” (до гига) я не могу смотреть, про DVD я вообще молчу. DVD у меня даже комп толком прочитать не может, подтормаживает немного, это при том, что компу всего полтора года.
    Может есть какая-нить прога, которая сама уменьшает видео, с минимальными вмешательствами юзера, и максимально оставляющая качество, разумеется freeware, и русская?

     
    Evg
    2009-06-08 22:53:04

    Что именно разжевать? Каких-то “умных” программ нет, потому как качество ты можешь оценить только глазами. Программы с минимальным вмешательством есть (они на этом форуме уже описывались – см. ссылку в самом первом комментарии), но в эти программы ты должен ввести параметр, управляющий качеством. Собственно эту теорию я написал для того, чтобы можно было понять, как оптимальным образом задать этот параметр. И программулину под это дело написал. Если Sink’а хорошо попросить – он эту программу положит куда надо :)

     
    Evg
    2009-06-08 22:53:38

    > Если Sink’а хорошо попросить
    Пальцы заплелись. Имелось в виду Sonik’а

     
    Vladacepesh
    2011-09-13 22:40:41

    Спасибо за информацию, очень полезная.

    А Sonik уже выкладывал программу подсчета качества сжимаемого видео, о которой говорится выше?

     
    Имя/ник (обязательно):
    Ваш E-mail (не публикуется, никакого спама):
    URL сайта (если есть):
    Ваш комментарий (уменьшить поле | увеличить поле)
    Вы можете # подписаться с помощью RSS на комментарии к этой записи.