Evg |
СОДЕРЖАНИЕ
Оценочные параметры качества сжатого видео
Запись от Evg размещена 18.02.2012 в 16:40
Показов 16194
Комментарии 0
1. Предисловие Статья предназначена для людей, не обладающих специфическими познаниями в области сжатия видео, но которым так или иначе на бытовом уровне приходится сталкиваться с процессом перекодировки видео. К таким процессам в первую очередь относятся пересжатие видео с фотоаппарата, пересжатие видео для выкладывания в интернет, выполнение DVD-rip'ов. Сейчас существуют множество программ, которые позволяют выполнить данные процедуры не вдаваясь в какие-то глубинные познания. Но так или иначе при настройке результирующего файла приходится оперировать понятиями "битрэйт" или "размер файла". И большинству начинающих непонятно, из каких соображений правильно выбирать эти параметры. Надеюсь, что после прочтения статьи, у людей появится хоть какое-то понимание по этой части Знания я почерпал в статье GarfieldX'а, за что ему спасибо. К сожалению, правила нашего форума запрещают ссылки на другие форумы, так что ограничусь тем, что он обитает на форуме сервера rutracker.org 2. Теория Если вам когда либо приходилось пользоваться программами сжатия видеопотоков, то вы наверняка встречали среди характеристик выходного файла такие параметры, как размер (size) выходного файла или его битрэйт (bitrate) и задвались вопрсом: а как же выбрать правильное значение С аудиофайлами таких проблем как правило не возникает, ибо качество звука практически однозначно определяется его битрэйтом (т.е. скоростью воспроизведения потока, как правило выраженной в килобитах в секунду). Если мы видим, что битрэйт сжатого аудиофайла (mp3) равен 128 kpbs (килобитам в секунду), то нам понятно, что качество звука соотвествует CD-диску, если это 64 или 96 kbps, то это уже звук низкого качества, если 256 kbps - то звук высокого студийного качества и т.п. Хотя внутри себя качество звука характеризуется ещё и такими параметрами, как частота оцифровки, но как правило этот параметр уже включен в битрэйт и потому качество звука обычно определяют по битрэйту. Т.е. если мы видим файл mp3 с музыкой с описанием, что он сжат с качеством 128 kbps, то мы уже подразумеваем, что это стереозвук с частотой оцифровки в 44 или 48 кгц. С видео всё несколько сложнее. У видео есть такие параметры как размер кадра и частота кадров в секунду. А потому знание лишь одного битрэйта недостаточно - нужно дополнительно знать размер кадра и количество в кадров в секунду. А потому, глядя на параметры видео, например, 640x480 (размер кадра), 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, при котором будет хорошее качество изображения Коэффициэнт вычисляется по следующей формуле:
где size - размер видеопотока в байтах width, height - размер кадра (ширина и высота) в пикселях fps - количество кадров в секунду time - время видеопотока в секундах При этом не забываем, что 1 килобайт равен 1024 байта (а не 1000), и, соответсвенно, 1 мегабайт равен 1024 килобайтам = 1048576 байт Надо понимать, что приведённые выше значения K для кодеков - они взяты для "среднего" видео. Если видео представляет собой рисованный мультик или флэш-мультик, то хорошее качество будет и при более низких значениях коэффициента. Если в видео очень много движения и постоянного изменения цвета и яркости (например, муравейник), то для хорошего качества видео придётся сжимать с бОльшим значением коэффициэнта. Если не нужно чёткого изображения (например, когда нужно заснять какие-то физические упражнения, но при этом нам совершенно не важны чёткие кунторы лица и окружающих предметов), то коэффициэнт можно уменьшать. И так далее. Обычно программы сжатия просят указать значение битрэйта (как правило в килобитах в секунду) или целевого размера файла (как правило в килобайтах). Исходя из того, что битрэйт это размер файла в битах поделённый на время в секундах, то соотвествующие параметры вычисляются по формулам:
где Bitrate_kbps - искомый битрэйт в килобитах в секунду (kbps) Size_kbyte, Size_mbyte - искомый размер видеопотока в килобайтах (Kbytes) и мегабайтах (Mbytes) соответсвенно K - выбранный нами коэффициент, характеризующий степень сжатия width, height - размер кадра (ширина и высота) в пикселях fps - количество кадров в секунду time - время видеопотока в секундах frames - количество кадров (в некоторых программах выдаётся именно это значение), которое по сути есть fps * time ВНИМАНИЕ! Все эти размеры касаются строго размера видеопотока. Программы, как правило, также работают с этими параметрами применительно к видео (а не к итоговому файлу). Важно не забывать, что в файле будет присутсвовать аудиопоток. Как правило, его битрэйт задаётся, а его размер в файле будет составлять
где Bitrate_kbps - битрэйт аудио в килобитах в секунду (kbps) Size_kbyte_audio, Size_mbyte_audio - искомый размер аудиопотока в килобайтах (Kbytes) и мегабайтах (Mbytes) соответсвенно time - время видеопотока (и, соответсвенно, аудиопотока) в секундах Если в процессе пересжатия будете изменять размер картинки (кадра), то обязательно следите за тем, чтобы соотношение ширины и высоты кадра оставалось прежним. Полезно так же выбирать размеры такими, чтобы длина и ширина были кратны 16 (но вроде бы как необязательно). Это связано с особенностями работы кодеков. 3. Программа-калькулятор В своё время мне понадобилась программа-калькулятор, для того, чтобы рассчитать параметры видео при пересжатии. В интернете выложено море всяких калькуляторов, но я так и не нашёл ни одного, который бы оперировал понятием коэффициэнта "bits per pixel". Тогда я решил написать свою программу. Так уж получилось, что эта была моя первая программа под Windows и первая gui'ёвая программа. Так что прошу сильно не пинать в тех местах, где что-то окажется сделанным не по-человечески. Скачать программу: vq.rar, если вдруг кому-то надо - исходники на Borland C++ 2007: vq-source.rar. Кнопки "О программе" и "Помощь" не работают (что непринципиально) FIXME надо быть хоть какое-то описание добавить 4. Примеры расчётов 4.1. Просто пересжать видео с целью сократить его размер Имеется видеофайл, снятый на фотоаппарат. Фотоаппарат как правило очень слабо сжимает видео, а потому файлы занимают слишком много места. Нам нужно его пересжать (при этом мы НЕ стремимся к какому-то конкретному размеру, потому что знаем, что он будет в несколько раз меньше, но конерктное значение нам неважно). Параметры исходного файла: 1024x768, 15fps, 20 минут. Будем сжимать кодеком XviD (по той причине, что H264 ещё не сильно распространён, к тому же не все железячные DVD-плееры поддерживают H264). Видео домашнего застолья, где движения сильного нет, в основном сидят люди и чешут языком. В этом случае будем исходить из значения коэффициэнта K=0.25. Какие-то детали типа названия книг на полках нам совершенно неинтересны, а потому сократим размер до 640x480. Итого имеем параметры выходного видео:
4.2. Пересжать видео с целью уложиться в конкретный размер файла Имеется видеофильм (беру реальный пример). 1024x432, 25fps, длительность 2 часа 3 минуты 19 секунд (что есть 7399 секунд). Размер файла 3.74 гигабайт. Мы хотим за счёт уменьшения размера картинки сократить размер изображения до 1.37 гигабайт (что есть 1403 мегабайта) - обычно до такого размера делают DVD-rip'ы, чтобы влезло 3 штука на один DVD-диск. Поскольку конечной целью является уложиться в размер, здесь вспоминаем, что в файле есть видео и аудио потоки. Параметры видео будут зависеть от того, какую часть размера мы потратим на аудио. При таком сокращении размера файла качество картинки в любом случае ухудшится, а потому держать 6-канальный ззвук нет никакого смысла. Поэтому при перекодировке будем использовать стереозвук в формате mp3 в битрэйтом 128 kpbs.
4.3. Пересжать видео с целью уложиться в конкретный битрэйт FIXME Написать 5. Заключение Старое местоположение статьи здесь | |||||||||||||||
Размещено в Полезные советы
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


