Два Video CD в одном, возможно?

Два Video CD в одном, возможно? Я думаю, многие уже увлекаются просмотром VCD на своем ПК. Однако со временем возникают трудности с хранением VCD. Основной недостаток формата VCD заключается в том, что полнометражный фильм помещается только на 2 CD. Это сильно сказывается на стоимости, а если хранить фильмы у себя на жестком диске, то свободного места становится все меньше и меньше.

До недавнего времени считалось, что записать на 1 компакт-диск фильм в приемлемом качестве невозможно. Hо со времени разработки формата VCD (1993 г.) сменилось 2 или 3 поколения компьютеров. Стало возможным применять более совершенные методы компрессии и сильнее учитывать особенности восприятия человека, ведь главное требование к форматам видео-компрессии это возможность декомпрессии в реальном времени. Так, в ноябре 1998 г. была объявлена новая разработка Moving Picture Expert Group - стандарт MPEG4, частью которого является сжатие видео. Аппаратные требования для воспроизведения видео в MPEG4 высоки - нужен Pentium II 300 MHz (сравните с P133 для VCD).

Hо за счет более совершенной компрессии стало возможным сжимать видео намного сильнее, чем при использовании MPEG1 (VCD). Теперь можно без проблем поместить фильм на 1 CD с качеством даже лучше, чем VCD! С другой стороны, такие аппаратные требования уже не являются серьезными - подойдет любой компьютер из тех, что сейчас выпускают и продают. Ситуация напоминает ту, что была лет 5 назад, когда появился формат MPEG1 Layer3. Я думаю, многие встречали мультимедийные диски "Все альбомы группы" в формате ADPCM 22050 Hz 4bit - ужасное качество, зато работали на четверках.

После появился mp3 - размер файла тот же, а качество на порядок выше, но нужен был уже Pentium. А все за счет усложнения алгоритма. Hекоторые даже называют MPEG4 "mp3 в мире видео". У этого формата есть все шансы заменить MPEG1 и MPEG2: он, прежде всего, обеспечивает лучшее качество при том же размере файла или меньший размер при том же качестве, большую гибкость в выборе разрешения, частоты кадров и скорости потока данных, лучшую передачу быстрого движения, меньшее время компрессии, легко сочетается с разными аудио-кодеками, менее чувствителен к потери части данных, хорошо подходит для просмотра видео через сеть в реальном времени.

Итак, вернемся к нашим "баранам". Понятно, что максимально, чего мы можем добиться, - это сделать так, чтобы полученный фильм отличался от исходного как можно меньше. Hа самом деле, возможно даже некоторое субъективное улучшение качества за счет большей плавности смены кадров во время движения. Прежде всего, нам нужен 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_3.11alpha.zip" (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 сек. Hа самом деле значение Key frame interval для MPEG4 кодека означает всего лишь максимальное расстояние между кл.кадрами, MPEG4 кодировщик сам вставляет кл.кадры в сложные моменты. При быстром изменении сцен он может даже вставить несколько кл.кадров подряд. Кроме перемотки кл.кадры нужны еще для редактирования фильма без рекомпрессии, по ним можно легко разрезать фильм на куски и после их склеивать. Самое лучшее, что можно сделать с этим параметром, - это оставить его по умолчанию.

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

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

Предсказать заранее размер файла невозможно, можно лишь оценить его сверху. Делать DataRate больше 1200 не имеет смысла, размер MPEG4 файла получается почти такой же, как и исходный MPEG1 файл.

Хотя это и не удивительно - формат VCD подразумевает bitrate 1150 (из них 224kbps на звук). При высоких DataRate DivX Low motion имеет слегка меньший размер, но зато немного худшее качество.

Итак, какой же необходимо выбрать кодер для себя. На этот вопрос трудно ответить однозначно. Я для себя определил 2 основных: DivX Fast-Motion и MS MPEG4 Codek V2. Какой из них лучше, понять сложно, необходим индивидуальный подход к каждому случаю, т.е. фильму. Но есть одно обстоятельство, заставляющее выбрать MS MPEG4 Codek V2. Дело в том, что, используя MS MPEG4 Codek V2, во-первых, ни у вас, ни у ваших знакомых не будет проблем с кодеком, не придется ничего скачивать и устанавливать.

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

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

Hа 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 файла. Hа этом этапе нас может ожидать серьезная проблема. Дело в том, что потеря 1 байта на обычном CD-ROM-е c программами может быть фатальна. Поэтому там около 1/8 всего диска занимают всевозможные коды для обнаружения и коррекции ошибок. Когда при чтении диска с данными обнаруживается ошибка, этот фрагмент пытается считаться еще несколько раз на пониженной скорости. С VCD ситуация другая. Постоянность потока намного важнее, а на ошибки чтения можно не обращать внимания. Лучше пусть мелькнет пара зеленых квадратиков в уголке, чем придется наблюдать один кадр 20 секунд. Поэтому для VCD используется формат "White Book", в котором большая часть контрольных кодов просто убрана.

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

MPEG4 позволяет для кодирования звука использовать любой доступный звуковой кодек. Если мы боремся за размер, то наилучшим выбором будет, конечно, MPEG Layer3. Установите любой "близлежащий". Если Вы занимаетесь MP3, то у Вас он уже установлен.

В качестве основного инструмента в дальнейшем мы будем использовать отличную программу VirtualDub1.4c (http://www.geocities.com/virtualdub/v1_4c/VirtualDub-1_4c.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) и выбираем параметры компрессии звука. Я думаю, что на звуке экономить не стоит. Все равно много не сэкономишь, а потеряешь много.

Говорят же, что звук дает половину впечатлений, а занимает-то он намного меньше. Hо с другой стороны, качество лучше, чем на источнике, получить мы не сможем. Поэтому оптимально выбрать 128kBit/s, 44100, Stereo, хотя это зависит от конкретной ситуации.

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

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

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

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

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

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

5. Собственно само сжатие. Выбираем File/Save Avi, указываем путь и набираем имя файла. Все. Теперь надо подождать. Процесс сжатия в MPEG4 на порядок быстрее, чем, скажем, в MPEG2. У меня на моем Pentium III 550 MHz полфильма сжимается всего за 1-2 часа. MS MPEG4 кодек поддерживает двухпроцессорную конфигурацию.

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, не потеряв при этом в качестве. Однако не стоит забывать, что, ужимая, приходится что-то терять. Подготовил Валентин Минченко, Hotimsk@mail.ru
по материалам статьи
Стаса Вихрова (IXBT.Stack.net)
(c) компьютерная газета


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

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