Главная
Новости
Статьи и обзоры
Горожанин
Обнинск в Internet
Web Design
Hardware
Software
Безопасность
Серфинг
Игродром
Relax
Технологии
Web-обзор
Интернет-ликбез
Опросник
УП-Технологии
ART.net
Ссылки
Архив
О нас
Контакты
Форумы
Основатель: К.Николаенко
Главный Редактор: С.Коротков
Web Design: Neutron
|
|
= Технологии =
ВИДЕОСЖАТИЕ: ПЕРЕМЕННАЯ СКОРОСТЬ ПОТОКА ДАННЫХ ПРОТИВ ПОСТОЯННОЙ
(с) Сергей Андрианов
Продолжение: начало в №15(163), №16(164),№17(165),№18(166)
В любительской практике нередко возникает потребность перекодировать видеофайлы. И если для профессионала размер файла не играет особой роли, то для начинающего "режиссера" он зачастую приобретает решающее значение. Также задача минимизации файлов возникает при размещении их в Интернете.
Сейчас оптимальное соотношение между качеством изображения и размером видеофайла обеспечивают, пожалуй, кодеки семейства MPEG-4 (DivX и Xvid). Оптимальный результат при уменьшении объема файла дает кодирование с переменной скоростью потока данных (bitrate), которая выбирается автоматически так, чтобы получилось наилучшее качество текущего фрагмента. В динамичных сценах локальное значение скорости потока данных будет увеличиваться, а в статичных уменьшаться.
Но заранее спрогнозировать, каким окажется объем файла, сжатого с переменной скоростью потока данных, невозможно. Значит, для того чтобы подогнать его размер под емкость "болванки" (CD-R) или имеющееся на веб-сервере место, приходится прибегать к двухпроходному кодированию. Во время первого прохода анализируется файл, вычисляются коэффициенты для его фрагментов, а во время второго текущая степень сжатия "подстраивается" под требуемый размер файла с учетом собранных статистических данных.
Рассмотрим, как выполнить данные операции, пользуясь только БЕСПЛАТНЫМ ПО. В качестве основной рабочей программы будем использовать VirtualDub (1) www.virtualdub.org , а в качестве кодека - DivX (2) www.divx.com пятой версии. Вообще-то двухпроходное кодирование поддерживается кодеком DivX, начиная с четвертой версии, но в пятой добавлены свойства, позволяющие повысить коэффициент сжатия, сохранив качество изображения. Кроме того, в нем появилась поддержка уникальных особенностей процессоров AMD, так что обладатели Athlon сэкономят немало времени. Учтите, что не следует применять кодеки версий 5.0.0 и 5.0.1, поскольку в них содержится ошибка, приводящая к негативным последствиям при длительной работе.
Прежде всего определим величину скорости потока видеоданных. В общем случае, если известны требуемый объем файла и продолжительность видеоматериала, скорость потока можно вычислить по формуле: I = 140 W/t , где I - скорость потока данных, кбит/с, W- требуемый объем файла, Мбайт, t - длительность видеоматериала, мин.
Наличие численного коэффициента в формуле обусловлено тем, что переводятся байты в биты, минуты - в секунды, а также тем, что объем файла принято измерять в двоичных единицах
(1 Кбайт - 1024 байта), а скорость передачи - в десятичных (1 кбит/с - 1000 бит/с).
В приведенной формуле не учитывается объем служебной информации (как правило, несколько килобайт и еще по нескольку байт на каждый кадр), а также тот факт, что реальная скорость потока данных всегда отличается от заданной, и потому желательно предусмотреть запас места около 2%.
Мы определили скорость потока данных, состоящую из скоростей видео- и аудиосоставляющих. Если скорость звуковой составляющей известна, то для получения скорости видеопотока ее надо вычесть из полученного числа, однако прежде следует решить, нужно выполнять перекодировку аудиоданных или нет.
Если формат исходного файла отличается от "родного" для VirtualDub семейства MPEG-4, в частности, имеется файл Video CD/MPEG-1, то отказ от перекодировки аудиосоставляющей, скорее всего, приведет к тому, что аудио в выходном файле запишется без сжатия и займет более половины объема файла. В этом случае к звуку необходимо применить сжатие. Если же файл записан в формате, совместимом с MPEG-4, но VirtualDub "не понимает" использованного формата сжатия, например в случае пятиканального звука, то, пожалуй, проще всего оставить аудио без изменения. В качестве альтернативы можно порекомендовать лишь "вырезать" звук из видеофайла и записать его в отдельный файл, который можно будет перекодировать какими-либо дополнительными программами, после чего "вставить" его обратно в видеофайл. В остальных случаях перекодировка звука вам понадобится тогда, когда вы задумали сократить объем файла и за счет уменьшения потока аудиоданных.
Таким образом, если вы решили перекодировать звук или знаете скорость аудиопотока, то скорость потока видеоданных вычисляется как разность между числом, полученным по приведенной формуле, и скоростью аудиопотока. Если же последняя вам не известна, то определите ее с помощью программы VirtualDub. Загрузите нужный видеофайл и выберите File*File Information*Audio stream: Data rate. Однако бывает, что скорость потока звуковых данных по тем или иным причинам выяснить все же не удается. Тогда имеет смысл использовать другой метод, чтобы узнать объем файла, приходящегося только на аудиосоставляющую, применив опцию File*Save WAV. Объем созданного файла надо вычесть из размера желаемого, а полученную разницу подставить в приведенную выше формулу. В результате мы получим искомую скорость видеопотока.
Итак, у нас есть все необходимое для работы. Считаем, что мы уже запустили VirtualDub и открыли нужный файл. Для первого (предварительного) прохода из соображений экономии отключаем вывод аудиоданных. (команда No Audio).
Затем проверяем, установлен ли для видеоданных режим Full processing mode, и выбираем видеокодек: Video*Compression…
Конфигурируем кодек (Configure), установив первый проход многопроходного режима - ….. и величину скорости потока данных, вычисленную ранее по формуле.
После закрытия окон настройки вызываем команду: File*Save as AVI... Затем приводим название файла и указываем, что работу следует выполнять в пакетном режиме. Для этого включаем опцию в нижнем левом углу окна сохранения и нажимаем "Сохранить". Все, задание для первого прохода мы подготовили.
Теперь займемся вторым (окончательным) проходом. Прежде всего восстановим сохранение звукка в выходном файле, включив функцию напротив пункта Audio*Source audio. Если же мы вычленяли аудиофайл и обрабатывали его отдельно, то вместо этого следует выбрать….
Дальнейшие действия зависят от того, что мы собираемся делать: перекодировать аудиосоставляющую или перенести ее из имеющегося файла без изменений. В первом случае активируем в настройках Audio функцию Full processing mode, а во втором - Direct stream copy. Если перекодировка включена, то должна быть доступна настройка сжатия: Compression… Выбираем кодек (лучше всего применить MPEG Layer-3) и устанавливаем нужную скорость потока данных звука.
В случае, когда требуемого формата не оказывается, для преобразования частоты дисретизации допускается использовать опцию Audio*Converson, а затем все-таки придется вернуться к выбору параметров сжатия. Следует помнить, что передисретизация неизбежно ведет к снижению качества звукового сопровождения, поэтому для для уменьшения объема файла переход, скажем, с частоты оцифровки 48 на 22 кГц можно считать оправданным, а с 48 до 44 кГц - нет.
Теперь осталось только установить в настройках видеосжатия второй проход: Video*Compression…*Configure*Multipass, nth pass.
Снова открываем меню сохранения, вводим окончательное имя файла, включаем опцию выполнения в пакетном режиме и даем команду "Сохранить". Все готово к работе. Открываем меню управления заданиями, нажав F4 или указав File*Job control...
Для запуска процесса двухпроходного перекодирования нужно лишь нажать кнопку Start. Если вы работаете с полнометражным фильмом, то можете спокойно отправляться спать - процесс сжатия видеоданных занимает немало времени.
(1) - Позволительно применить также FlaskKMPEG.
(2) - Можно также использовать Xvid.
|
|