Конвертирование VideoCD в MPEG4

Конвертирование VideoCD в MPEG4 Основной недостаток формата VCD заключается в том, что полнометражный фильм помещается только на 2 CD. До недавнего времени считалось, что записать на 1 компакт-диск фильм в приемлемом качестве невозможно. Но со времени разработки формата VCD (1993 г.) сменилось 2 или 3 поколения компьютеров. Стало возможным применять более совершенные методы компрессии и сильнее учитывать особенности восприятия человека, ведь главное требование к форматам видеокомпрессии - это возможность декомпрессии в реальном времени. Так, в ноябре 1998 г. была объявлена новая разработка Moving Picture Expert Group - стандарт MPEG4, частью которого является сжатие видео. Аппаратные требования для воспроизведения видео в MPEG4 высоки - нужен PentiumII300 (сравните с P133 для VCD). Но за счет более совершенной компрессии стало возможным сжимать видео намного сильнее, чем при использовании MPEG1 (VCD). Теперь можно без проблем поместить фильм на 1 CD с качеством даже лучше, чем VCD! С другой стороны, такие аппаратные требования уже не являются серьезными - подойдет любой компьютер из тех, что сейчас выпускают и продают. Ситуация напоминает ту, что была лет 5 назад, когда появился формат MPEG1 Layer3. Помните мультимедийные диски "Все альбомы группы" в формате ADPCM 22050 Hz 4bit - ужасное качество, зато работали на четверках. После появился mp3 - размер файла тот же, а качество на порядок выше, но нужен был уже Pentium. А все за счет усложнения алгоритма. Некоторые даже называют MPEG4 "mp3 в мире видео". У этого формата есть все шансы заменить MPEG1 и MPEG2: он, прежде всего, обеспечивает лучшее качество при том же размере файла или меньший размер при том же качестве, большую гибкость в выборе разрешения, частоты кадров и скорости потока данных, лучшую передачу быстрого движения, меньшее время компрессии, легко сочетается с разными аудиокодеками, менее чувствителен к потери части данных, хорошо подходит для просмотра видео через сеть в реальном времени.

Итак, вернемся к теме нашей статьи. Понятно, что максимально, чего мы можем добиться - это сделать так, чтобы полученный фильм отличался от исходного как можно меньше. На самом деле, возможно даже некоторое субъективное улучшение качества за счет большей плавности смены кадров во время движения. Прежде всего, нам нужен MPEG4 кодек. Таких кодеков на сегодняшний день 2 - "Microsoft MPEG-4 Video Codek" (V1, V2, V3) и DivX;-) MPEG-4 (Fast-Motion и Low-Motion). DivX на самом деле является, всего лишь, взломанной версией того же Ms MPEG4 Codeka, как утверждают авторы, они убрали глюки и слегка его улучшили. Ms MPEG4 устанавливается вместе с Ms Media Player или Windows Media Tools, так что он у вас, скорее всего, уже установлен. Для установки DivX кодека нужно скачать и установить "divx_311alpha.exe" (http://divx. ctw.cc/). Возможно, понадобится установить еще и Direct X Media. Оба эти кодека позволяют выставить следующие параметры сжатия: Data Rate (величина потока данных), Key frame interval (интервал между ключевыми кадрами) и Compression Control (smoothness/crispness, соотношение плавность/четкость). Рассмотрим эти параметры подробнее.

Data Rate - самое важное значение, именно от него зависит и качество видео, и размер файла. Чем оно больше, тем выше качество, но и размер файла больше. Измеряется в битах в секунду. В MPEG4 этим параметром мы задаем максимальное значение потока данных, реальное значение зависит от содержимого фильма в данный момент и может постоянно изменяться. Так, например, при сжатии титров фильма DataRate уменьшается более чем в два раза.

Key frame interval - MPEG4 по терминологии Microsoft относится к interframe (межкадровым) методам компрессии, т.e. таким, где полностью сохраняется небольшое число ключевых кадров (Key frame или I-Frame), остальные кадры (Delta frames) содержат только разницу между предыдущими и последующими кадрами. Key frame interval задает промежуток между ключевыми кадрами. Именно этим объясняется задержка при попытке запустить фильм с любого места - чтобы показать произвольный кадр, плейер должен вернуться к ключевому кадру и построить все кадры до нужного. Казалось бы, чем больше ключевых кадров, тем лучше. Однако это не так. Дело в том, что ключевой кадр требует большего количества данных, чем промежуточный, и когда вставляется ключевой кадр, на последующие кадры остается уже меньшее количество информации (ведь поток ограничен). Вообще современные кодеки могут обходиться очень малым числом ключевых кадров. Так, например, VDO кодек ставит 1 кл. кадр на 9999 кадров, а для MPEG4 кодека в программе NetShow стоит по умолчанию значение 1 кл. кадр на 3600 сек. На самом деле значение Key frame interval для MPEG4 кодека означает всего лишь максимальное расстояние между кл. кадрами, MPEG4 кодировщик сам вставляет кл. кадры в сложные моменты. При быстром изменении сцен он может даже вставить несколько кл. кадров подряд. Кроме перемотки, кл. кадры нужны еще для редактирования фильма без рекомпрессии, по ним можно легко разрезать фильм на куски и после их склеивать. Самое лучшее, что можно сделать с этим параметром, это оставить его по умолчанию.

Compression Control (Smoothness/crispness) - Smoothness определяет плавность движения, crispness определяет резкость или детальность изображения. К сожалению, эти величины исключают друг друга, т.е. если вы увеличиваете одну, то другая уменьшается. Вообще этот параметр важен только для низких DataRate или частоте кадров менее 20 Гц. На высоких DataRate при изменении этого параметра фильмы получаются совершенно одинаковыми. Для нашей задачи правильнее поставить четкость на максимум или оставить значение по умолчанию.

Сравним эти кодеки с помощью моей программы (630 Кб). Эта программа сравнивает 2 видеоклипа и выражает отличие в виде числа, при этом учитываются особенности восприятия. Чем меньше отличие, тем больше клипы похожи друг на друга. Более подробную информацию о принципах работы программы можно найти в инструкции. К сожалению, не удалось использовать для сравнения версию 3 Ms кодека. Дело в том, что Microsoft, начиная с версии 3845 своих кодеков, закрыла V3 для использования в программах, отличных от ASF encoding tools. Итак, сделаем из одного исходного клипа в формате MPEG1 по 15 других на каждый кодек, с Data Rate изменяющимся от 100 до 1500 c шагом 100, при этом остальные параметры будем держать постоянными (Key frame=10, Compression Control=100). Измерим размеры файлов и отличия каждого полученного клипа от исходного. Построим на основании полученных данных графики зависимости Отличия/DataRate и Размер/DataRate. В качестве исходного клипа взят рекламный ролик к фильму "6-е чувство" (файл "add01.mpg") без звука, размер 7Мб. Этот файл взят с лицензионного диска. Я вырезал трехминутный фрагмент и убрал звук из этого файла. Исходный же файл имел размер порядка 30 Мб. Я выбрал этот фильм в качестве исходного, потому что в нем содержатся разноплановые сцены. В общем-то, этот выбор был в некоторой степени случайным.

На основании этих графиков можно сделать следующие выводы (не забывайте, что чем график отличий ниже, тем лучше):

Все кодеки ведут себя приблизительно одинаково, видно общее происхождение. Исключение составляет только DivX Fast-Motion. Не понятно, что с ним сделали, хотя возможно, что при очень низких DataRate (меньше 300) он и даст некоторое примущество, хотя это и не факт. В любом случае для нашей задачи нужен DataRate не меньше 600, а тут у DivX Fast-Motion явное ухудшение. В дальнейшем не будем о нем вспоминать.

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

График отличий - практически правильная гипербола. Но отличия стремятся не к 0, а к 5.5 - это значение результат сглаживания при сжатии и его нельзя назвать ухудшением, субъективно это сглаживание даже улучшает изображение. Для наглядности я провел наш эксперимент для DataRate равным 5000. Отличия остались на уровне 5.5, а размер файла на уровне 7 Мб. Получается, что, начиная с некоторого места, увеличение DataRate не дает особенного улучшения качества, а размер файла при этом увеличивается.

Делать DataRate больше 1200 не имеет смысла, размер MPEG4 файла получается почти такой же, как и исходный MPEG1 файл. Хотя это и неудивительно - формат VCD подразумевает bitrate 1150 (из них 224kbps на звук).

При высоких DataRate DivX Low motion имеет слегка меньший размер, но зато немного худшее качество, на графике наблюдаются непонятные скачки.

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

Напомню, что конкретные цифры на графике верны только для моего тестового фильма, но общие закономерности будут сохранены для любого.

На основании всего вышесказанного могу посоветовать использовать MS MPEG4 Codek V2. Во-первых, ни у вас, ни у ваших знакомых не будет проблем с кодеком, не придется ничего скачивать и устанавливать. Даже если у вас стоит очень старая версия Ms Media Player-а, то он сам подключится к Internet и установит все, что надо, совершенно без вашего участия. Во-вторых, пользоваться взломанным софтом как-то нехорошо, особенно если исходный совершенно бесплатен. В-третьих, неизвестно, что хакеры там могли испортить.

Теперь перейдем к практической части статьи. Должен предупредить, что полученные фильмы в формате MPEG4 будет нельзя смотреть ни на DVD/VCD плейерах, ни на игровых приставках. Весь софт, который упоминается в статье, бесплатный и доступен для свободного скачивания.

На VCD видеофайлы имеют расширение *.dat. Это не совсем MPEG1, точнее это MPEG1, в который добавлена некоторая информация необходимая для VCD-плейеров. В любом случае эту информацию нужно удалить. Для этого есть специальная утилита VCDGEAR2.0 (http://www. vcdgear.com/files/vcdgear20.zip). Запускаем, выбираем тип преобразования dat-> mpeg. Кнопкой "Load" выбираем dat файл на VCD и место для сохранения. Кнопка "Start". Скорость этого преобразование зависит от скорости вашего CD-ROM-а и займет не более 10 минут. В результате вы получите MPEG файл, который будет мегабайт на 7-8 меньше исходного DAT файла. На этом этапе нас может ожидать серьезная проблема. Дело в том, что потеря 1 байта на обычном CD-ROM-е c программами может быть фатальна. Поэтому там около 1/8 всего диска занимают всевозможные коды для обнаружения и коррекции ошибок. Когда при чтении диска с данными обнаруживается ошибка, этот фрагмент пытается считаться еще несколько раз на пониженной скорости. С VCD ситуация другая. Постоянность потока намного важнее, а на ошибки чтения можно не обращать внимания. Лучше пусть мелькнет пара зеленых квадратиков в уголке, чем придется наблюдать один кадр 20 секунд. Поэтому для VCD используется формат "White Book", в котором большая часть контрольных кодов просто убрана.

В результате скопировать фильм с VCD на жесткий диск без ошибок сложно. Конечно, программа VCDGEAR исправляет ошибки в формате MPEG, если такие возникли при чтении, но только небольшие. Поэтому рекомендуется перед чтением аккуратно протереть диск от соринок и разогреть его в CD-ROM-e в течение нескольких минут. Если ошибка все-таки появилась при чтении (а как это проверить, я напишу ниже, операционная система, естественно, ошибок не выдает, ведь необходимых контрольных кодов просто нет), то можно попробовать выполнить эту операцию еще несколько раз, можно вначале dat файл скопировать на HDD и уже после конвертировать в mpeg, можно даже попробовать выйти в DOS и скопировать файл там. Хотя если у вас современный CD-ROM, то особых проблем быть не должно.

MPEG4 позволяет для кодирования звука использовать любой доступный звуковой кодек. Неплохим выбором является MPEG1 Layer3. Установите, например, Fhg Radium MP3 codec (ftp://ftp.ssga.ru/pub/DISTR/mp3soft/Encoders/ra-codec12.zip). В качестве основного инструмента в дальнейшем мы будем использовать отличную программу VirtualDub1.3d (http://www.geocities.com/virtualdub/v1_3d/VirtualDub.zip).

Теперь приступим собственно к сжатию. Мы будем работать с обеими частями фильма отдельно и склеим их в самом конце.

1. Запускаем VirtualDub. Открываем MPEG1 файл (File/Open Video File). Открывается mpg файл долго, так как происходит проверка целостности формата. Если файл не открывается, значит в нем содержится ошибка, лучше попробовать считать файл еще раз. Если это не поможет, попробуйте в окошке выбора файла включить опцию "Popup extended open options" и далее выбрать "Accept partial MPEG streams". Если и это не поможет, тогда придется в каком-нибудь мощном видеоредакторе вырезать испорченные места, но такие ситуации редки, у меня, например, не было ни разу.

2. Выбираем полную аудиокомпрессию (Audio/Full processing mode). Выбираем аудиокодек (Audio/Compression/MPEG Layer3) и выбираем параметры компрессии звука. Я думаю, что на звуке экономить не стоит. Все равно много не сэкономишь, а потеряешь много. Говорят же, что звук дает половину впечатлений, а занимает-то он намного меньше. Но с другой стороны, качество лучше, чем на источнике, получить мы не сможем. Поэтому оптимально выбрать 128kBit/s, 44100, Stereo, хотя это зависит от конкретной ситуации.

3. Далее ставим полную компрессию видео (Video/Full processing mode). Выбираем видеокодек (Video/Compression). Устанавливаем параметры сжатия (Configure). Как мы уже договорились, оставляем параметры Keyframe и Compression Control без изменений. Осталось выбрать Data Rate. Мы будем исходить из того, что нужно получить такой фильм, который поместится на 1 CD-R, т.е. он должен быть не больше 650 Мб. Но, как я уже говорил, вычислить размер сжатого фильма заранее не удастся, его можно только оценить сверху по формуле:

M=(T*60*(BV+BS)/8)/1024

где M - размер файла в мегабайтах, T - длительность фильма в минутах, BV - DataRate, BS - величина звукового потока в битах в секунду.

Или BV=(M*8*1024)/(T*60)-BS

Точность оценки зависит от динамичности фильма. Но совсем не обязательно забивать полностью весь диск, на оставшееся место можно, например, поместить Sound Track к фильму в формате mp3 или фотографии артистов. В принципе Data Rate равный 600 Кбит/c уже дает вполне приличное качество.

4. Иногда в начале и конце каждого диска помещают фразы типа "вставьте диск 2", их надо убрать. Используя кнопки навигации по фильму, определяем номера кадров, с которых начинается и кончается сам фильм. Устанавливаем промежуток, который мы хотим сжать (Video/Select Range).

5. Собственно само сжатие. Выбираем File/SaveAvi, указываем путь и набираем имя файла. Все. Теперь надо подождать. Процесс сжатия в MPEG4 на порядок быстрее, чем, скажем, в MPEG2. У меня на моем Celeron 75x5.5 полфильма сжимается всего за 3 часа. Ms MPEG4 кодек поддерживает двухпроцессорную конфигурацию. Microsoft утверждает, что на двойном PentiumII 400 МГц можно осуществлять такое сжатие в реальном времени.

6. После того как обе части фильма готовы, осталось только их склеить. Обычно место для разделения фильма на две части создатели диска выбирают вполне подходящее, т.е. на смене планов, поэтому после склейки стыка обычно незаметно. Открываем в VirtualDub первую сжатую часть, выбираем File/ Append Video Segment и добавляем вторую часть. Отключаем компрессию (Video/Direct Stream Copy, Audio/Direct Stream Copy). Сохраняем уже целый фильм в 1 файле - Save Avi. Таким же способом можно и обрезать ненужные куски уже преобразованного фильма (если указать соответствующий Range), но только с точностью до ключевого кадра.

Если вы все будете делать, как указано выше, то никаких проблем с синхронизацией звука не будет, проверено много раз. Синхронизация может быть нарушена, если при сжатии появились лишние кадры, но это легко можно проверить - запоминаем число кадров в исходном mpeg1 фильме и сравниваем с количеством кадров в преобразованном (если, конечно, вы ничего не обрезаете). Этой проблемой страдает программа FlasK MPEG, которую многие рекомендуют для этих целей. VirtualDub сохраняет число кадров 1 в 1.

Эта статья носит рекомендательный характер, я могу в чем-то и ошибаться, так что больше экспериментируйте. В любом случае вы теперь сможете конвертировать VCD фильм в MPEG4 и записать его на 1 CD-R, не потеряв при этом в качестве.

Стас Вихров (ixbt.stack.net) Подготовил Виталий Шуравко http://shuravko.narod.ru (c) компьютерная газета


Компьютерная газета. Статья была опубликована в номере 30 за 2000 год в рубрике мультимедиа :: разное

©1997-2024 Компьютерная газета