DVD в AVI. Индексация и декодирование

Для декодирования видео MPEG-2 в проектах AviSynth, на мой взгляд, лучше всего использовать программу DGIndex — развитие довольно популярной программы DVD2AVI. В свое время некоторые пользователи, глядя на такое название, полагали, что DVD2AVI можно использовать как средство для перевода видео из одного формата в другой (то есть для той "глобальной" задачи, которую мы сейчас решаем при помощи нескольких программ). Действительно, попытаться можно было. Результат сильно разочаровывал. Потому что DVD2AVI — это прежде всего декодер MPEG-1/2. Дополнительные функции для кодирования видео (в таком виде, как они представлены) были не нужны.

В отличие от своего предшественника, DGIndex носит менее заметное для любителей "модных прог" название. Однако оно более осмысленное. Программа по сути индексирует содержимое видеофайла (или нескольких видеофайлов) и результаты заносит в специальный текстовый файл D2V, а затем декодер (DGDecode), основываясь на информации из этого файла, декодирует оригинальный видеофайл с теми или иными требованиями пользователя. С появлением DGIndex стало проще обрабатывать DVB-записи, поскольку наконец-то правильно определяется задержка аудио. Были исправлены и другие ошибки, убраны некоторые откровенно ненужные вещи (интерфейс кодирования) и добавлены новые, вполне востребованные. И хотя расширение для файлов проектов осталось прежним, проекты, сохраненные с помощью DGIndex, не могут быть открыты в DVD2AVI, и наоборот. DGIndex поставляется вместе с библиотекой DGDecode (плагином AviSynth). Библиотека содержит функцию MPEG2Source, которая используется для открытия файла проекта (D2V). И, хотя этот файл текстовый, новичкам не следует что-либо вручную в нем менять. DGIndex может работать с одним или несколькими файлами. При загрузке нескольких файлов аудиодорожки будут следовать друг за другом, игнорируя синхронизацию с соответствующей видеодорожкой. То есть если при загрузке двух файлов окажется, что в первом файле длительность аудио меньше длительности видео, то во втором файле звук будет опережать видео, и наоборот. Следует учитывать это и в одном проекте объединять файлы, для которых это объединение явно необходимо (например, части одного фильма, выделенные из единого файла или проекта).

Помимо возможности создания файла проекта с заданными параметрами, также есть специальные возможности, реализованные в нескольких утилитах. О необходимости применения какой-либо утилиты DGIndex сообщает дополнительно. Проблем с поддержкой у DGIndex нету, поэтому обо всех настройках и утилитах можно получить информацию в разделе справки (правда, на английском языке). В предыдущей статье было рассказано, как с помощью DVD Decrypter выбрать и скопировать содержимое DVD-диска на жесткий диск. Теперь, чтобы создать проект DGIndex, вам нужно всего лишь открыть скопированные файлы и нажать F4… Вот так просто, на первый взгляд. Сложность состоит в том, что параметры по умолчанию не всегда могут подходить, поэтому нужно выполнить предварительную настройку программы. Но, к сожалению, не все параметры можно настроить "один раз и навсегда". Часть из них, возможно, придется менять каждый раз при сохранении проекта. Предварительно нужно задать всего лишь способ вывода и обработки аудио и параметр видеодекодера, называемый iDCT Algorithm. Этот параметр влияет на качество и скорость декодирования (чем выше скорость, тем хуже качество, и наоборот). Самый качественный (и самый медленный) алгоритм называется IEEE-1180 Reference.

Следующий за ним — 64-bit Floating Point. Самый простой (и самый быстрый) алгоритм носит название Simple MMX. Что касается параметра YUV -> RGB, то в данном случае он бесполезен, поскольку никакого преобразования цветового пространства при передаче видео в AviSynth не происходит. В DGIndex предусмотрено два способа вывода аудио (опция Output method). Если вы выберете Demux tracks или Demux all tracks, аудиодорожки (соответственно, те, которые вы выберете, или все) будут просто выделены в отдельные файлы. Опция Decode AC3 track to WAV, как следует из названия, предназначена для декодирования дорожек AC3 в несжатый WAV. С ней связаны еще три опции, предназначенные для обработки файла: передискретизация, нормализация и параметры декодера Dolby Digital. Я полагаю, что вы, как и я, весьма ленивы и декодирование и обработку аудио доверите AviSynth. В этом случае способ вывода аудио надо задать Demux all tracks. При сохранении проекта DGIndex будет выводить все аудиодорожки, при этом в названии файла будет указывать номер дорожки, количество каналов и задержку относительно видео. DGIndex не дает никаких гарантий, что задержка, указанная в имени файла, будет действительной. Однако если вы заранее скопировали диск по рекомендациям, приведенным в предыдущей статье, можете быть на 99% уверены, что задержка указана правильно. С записями DVB ситуация несколько иная. DGIndex точно определяет задержку аудио, но беда в том, что записывающее приложение может эту информацию исказить. Выход здесь только один: не пользоваться такими "программами-исказителями" (к числу которых я отношу ProgDVB). Остальные параметры, особенно находящиеся в меню Options, трогать без лишней необходимости не нужно.

Опции фильтрации в меню Video становятся доступны, когда подгружен видеофайл или файл проекта. Эти параметры не применяются при сохранении проекта, они будут использоваться декодером и применяться на лету. Тем не менее, при наличии AviSynth про эти опции можно успешно забыть. А вот опция Field Operation доставит вам, пожалуй, больше всего головной боли. Чем она так плоха, сейчас и разберемся. Но для этого сначала узнаем, что такое Pulldown. Дословный перевод этого слова не имеет никакого смысла. Слово pulldown связано с понятием телекино (telecine). Телекино — это процесс перевода фильма с кинопленки на электронный носитель. Как известно, для кинопленки стандартной считается частота 24 кадра в секунду, в то время как для PAL стандартной является частота 25 кадров в секунду, а для NTSC — 30 кадров в секунду (или 29,97 для цветного NTSC). Более того, среднестатистический бытовой телевизор рассчитан на показ видео с частотой обновления, равной частоте питающей сети, то есть 50 и 60 Гц (кадров в секунду) соответственно. Чтобы привести киноматериал в соответствие с "электронными" стандартами, применяют pulldown — различные способы увеличения частоты кадров. Частота кадров (а часто — и количество кадров) увеличивается таким образом, чтобы общая длительность видео при заданной частоте кадров не изменилась или изменилась незначительно. Например, на обычном телевизоре (NTSC) видео можно проиграть с частотой 60 Гц, или 60 (59,94) полей в секунду (что равняется 30 (29,97) кадрам в секунду). Чтобы привести такое видео в соответствие со стандартом, декодер MPEG-2 плейера DVD дублирует поля некоторых кадров (так называемый 2:3 pulldown — каждый второй кадр показывается с длительностью трех полей, т.е. 1,5 кадра). Что касается PAL, то здесь применяется 2:2:2:2:2:2:2:2:2:2:2:3 pulldown (каждый 12-й кадр показывается с длительностью трех полей).

В случае PAL может применяться и 2:2 pulldown — частота кадров просто увеличивается на 4%. Производитель диска может и не полагаться на декодеры и выполнить pulldown до записи материала на диск. При этом прогрессивный материал становится чересстрочным. Можно выполнить деинтерлейс, но, во-первых, вы таким образом снизите разрешение кадра, а во-вторых, вместо плавного движения получите прерывистое. Вернемся к настройкам DGIndex. Опция Honor Pulldown Flags включает подстановку "лишних" полей, опция Forced Film отключает подстановку полей и изменяет частоту кадров. Опция Ignore Pulldown Flags также отключает подстановку полей, но сохраняет частоту кадров прежней. То есть если самостоятельно не изменить частоту кадров в скрипте AviSynth или файле проекта, то длительность изменится. Казалось бы, здесь все просто: укажи правильно опцию — и получишь ожидаемый результат. Но дело в том, что отдельный VOB-файл может состоять из нескольких кусочков. Представьте, что получится, если смешать "нормальное" видео (с частотой кадров 29,97) и видео, которому требуется pulldown (с реальной частотой кадров 23,976) — хороший результат вы получите только с опцией Honor Pulldown Flags, но качество этого результата вас не устроит. В файле помощи программы содержится рекомендация (рекомендация не автора, а коллектива людей, эту проблему исследовавших) включать опцию Forced Film при содержании "фильмового" материала выше 95%.

Если этот процент ниже, то нужно либо выполнить pulldown (включить опцию Honor Pulldown Flags), либо разобраться с капризным видео позже самостоятельно в скрипте AviSynth, пока что включив опцию Ignore Pulldown Flags. Делать выводы о том, с каким видеоматериалом вы столкнулись, можно будет только после сохранения проекта (информация выводится в окне статуса, которое появляется при сохранении проекта). Если вы не угадали тип видео, придется сохранять проект второй раз. По итогам создания проекта DGIndex может порекомендовать запустить одну из утилит для коррекции файла проекта. Возможно, для их запуска придется включить дополнительные опции в меню Options и сохранить проект еще раз. После создания проекта DGIndex можно приступать к написанию скрипта AviSynth, который затем будет передан кодировщику. Инструкции по написанию скриптов AviSynth, а также готовые скрипты можно найти в интернете (например, на сайте ixbt.com). Однако если вам лень искать эту информацию, дождитесь следующей статьи.

Продолжение следует.

Maxe Erte the Mad, maxe.erte@gmail.com


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

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