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


Основной недостаток формата VCD заключается в том, что полнометражный фильм помещается только на 2 CD. Это сильно сказывается на стоимости, так 1 фильм стоит 165-185 рублей, даже пиратская копия стоит больше сотни, что значительно дороже видео кассеты, при практически таком же качестве. Поэтому VCD, у нас в стране, мало распространены. VCD воспринимается скорее как экзотика.

До недавнего времени считалось, что записать на 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 устанавливается, например, вместе с Windows Media Tools (http://www.microsoft.com/windows/mediaplayer/). Для установки 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 Мб. Этот файл взят с лицензионного диска с фильмом «6-е чувство». Я вырезал трех минутный фрагмент и убрал звук из этого файла. Исходный же файл имел размер порядка 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 1150kbps на видео и 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://www186.pair.com/vdub/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, не потеряв при этом в качестве.

Вообще возможности MPEG4 намного больше, в данном случае исходное качество VCD, нас сильно ограничивало. Добиться почти идеального качества MPEG4 видео можно только если сжимать DVD диски. Но перевод DVD в MPEG4 сильно отличается от перевода VCD в MPEG4. Возникают следующие проблемы:

  • Прежде всего, формат DVD, в отличие от VCD, был разработан с достаточно серьезной защитой авторских прав. C DVD-дискa файлы, так же просто, как с VCD, не скопируешь. Он больше похож на обычный аудио CD, то есть просмотреть каталог можно, а вот уже скопировать файл нельзя. Нужно применять специальные программы-грабберы.
  • DVD диски бывают, как NTSC, так и PAL
  • DVD разработан для просмотра на телевизоре, поэтому, часто, информация записана полями — т. е. 50 или 60 полукадров из четных и нечетных строк по очереди в секунду. При составлении полного кадра образуются «зубчики» по краям движущихся объектов, т.к четные и нечетные строки одного кадра записаны с разницей во времени.
  • При преобразовании DVD в MPEG4 нужно уменьшить размер кадров (например, до 352×288) — алгоритмов такого уменьшения тоже много — bilinear, bicubic, HQ bicubic… — они сильно отличаются по качеству и по скорости.

О решении этих вопросов я хочу написать свою следующую статью.




Дополнительно

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.