DVD в AVI. Обработка и кодирование

Самый интересный и самый ответственный этап конвертирования DVD в AVI заключается в написании скрипта AviSynth. Конвертеры типа Auto Gordian Knot пишут такие скрипты автоматически, иногда допуская ошибки. Скрипты AviSynth, как и любые другие, можно писать по-разному. Можно вымучить скрипт, который пригодится для обработки лишь один раз, а можно написать шаблон, в который будет достаточно подставить лишь имя файла… "Правильно" писать скрипты эта статья вас не научит — будет рассмотрен лишь простой пример скрипта для обработки видео DVD. Полагаю, что вы уже установили AviSynth (где его взять и куда устанавливать, можно прочитать в первой статье этого цикла).

Скрипт будет удобнее писать в специальном редакторе, однако на первый раз можно воспользоваться и блокнотом. Откройте блокнот (notepad.exe) и добавьте первые строчки:
LoadPlugin("D:\VideoTools\DGIndex\DGDecode.dll")
video=MPEG2Source("D:\AVS_projects\test.d2v")

В первой строке загружается плагин AviSynth, который будет использоваться для декодирования видео MPEG-2 (он расположен в папке DGIndex). Во второй строке открывается проект DGIndex. Кроме видео, нужно подгрузить еще и аудио, иначе клип будет без звука. Для этого нужно скачать соответствующий плагин — например, NicAudio (найти его можно на странице сайт и положить его в папку Plugins, которая расположена в папке, куда вы устанавливали AviSynth. После этого следующие строки скрипта приобретут смысл:

LoadPlugin("D:\VideoTools\AviSynth\Plugins\NicAudio.dll")
audio=NicAC3Source("D:\AVS_projects\test T01 3_2ch 384Kbps DELAY -14ms.ac3")

В этом примере предполагается, что в результате сохранения проекта DGIndex у вас сохранилась шестиканальная дорожка AC3 и задержка
составила -14 мс. Теперь необходимо объединить эти дорожки и указать задержку. Это делается следующими инструкциями:
Audiodub(video, audio)
Audiodelay(-0.014)

Если видео не прогрессивное (присутствует "гребенка" в динамичных кадрах), нужно выполнить деинтерлейс, воспользовавшись, например, фильтром TDeint:
LoadPlugin("D:\VideoTools\AviSynth\Plugins\TDeint.dll")
TDeint()

Вот и все: простейший скрипт готов. Однако один момент был упущен. Для видео DVD соотношение сторон кадра задается не размерами кадра, а специальным параметром. Узнать, какое же соотношение сторон в каждом конкретном случае, можно, открыв файл test.d2v с помощью блокнота. Соотношение сторон будет указано в строке Aspect Ratio. Допустим, соотношение сторон равно 16:9. В этом случае вам надо будет добавить в скрипт инструкцию BicubicResize с такими размерами кадра, чтобы соотношение между ними было 16:9. Например:
BicubicResize(720,400)

Предполагается, что размеры кадра в данном примере были 720х576, как у большинства лицензионных SDTV DVD видео. В данном случае, как мне кажется, более целесообразно уменьшать вертикальный размер кадра, чем увеличивать горизонтальный. После подсчетов новая высота кадра составит 405 точек. Однако цветовое пространство YV12 (такое цветовое пространство чаще всего встречается в видео DVD) предполагает, что высота кадра должна быть четной. Поэтому нужно задать высоту равной либо 404 точкам, либо 406. Но с другой стороны, если вы используете кодер H.264, необходимым условием будет являться высота кадра, кратная 16. Поэтому в данном примере и задана высота 400. При этом будет небольшое искажение кадра (1%). Если вы настолько придирчивы, что хотите сохранить исходные пропорции, вам поможет функция AddBorders. Перепишем последнюю строку и добавим еще одну:
BicubicResize(720,404)
AddBorders(0, 6, 0, 6, $000000)

Размеры кадра станут 720х416, при этом снизу и сверху кадра будут добавлены черные полосы размером 6 точек. Сохраните скрипт с названием test.avs. Если вы не допустили ошибок, он без проблем откроется, например, в Windows Media Player. При наличии достаточно мощного компьютера вы сможете просмотреть это видео и проверить синхронизацию, оценить правильность соотшения сторон кадра… После этого можно передавать скрипт кодировщику (тому же Virtual Dub). При передаче скрипта кодировщику необходимо учитывать два важных фактора. Во-первых, открывает ли кодировщик файлы средствами ОС или использует для этого собственные средства. Понятно, что приемлемыми будут кодировщики только первого типа. Во-вторых, поддерживает ли кодировщик формат аудио, заложенный в скрипт. Далеко не каждый кодировщик готов принять на вход шестиканальный WAV. Чтобы облегчить понимание кодировщиками этого формата, можно установить кодек FFDShow и в настройках аудиодекодера разрешить декодирование для Uncompressed-формата. Что же касается первой проблемы, то можно попробовать создать файл формата AVIS (это специальный AVI-файл на основе скрипта AVS) с помощью утилиты MakeAVIS, входящей в состав FFDShow. Если проблема не решится, нужно менять кодировщик. Я рекомендую в качестве кодировщика использовать MeGUI. Итак, процесс конвертирования DVD в AVI в данном случае состоит из четырех этапов. По большому счету, автоматизировать здесь можно только создание скрипта AviSynth и сам процесс кодирования. Остальные же этапы могут потребовать вашего вмешательства. Автоматизировать создание скрипта AviSynth можно с помощью DGIndex, задав шаблон скрипта в настройках (Options/AVS template). Правда, автоматизация эта еще не достигла того уровня, какого хотелось бы. С помощью DGIndex версии 1.49 и выше вы можете генерировать скрипт из шаблона, в котором автоматически могут быть указаны только названия и пути файлов видео и аудио и задержка аудио (а хотелось увидеть еще хотя бы соотношение сторон). Соответствующие строки в скрипте-шаблоне должны выглядеть следующим образом:

video=MPEG2Source("__vid__")
audio=NicAC3Source("__aud__")
Audiodelay(__del__)

Как вы понимаете, шаблон на основе рассмотренного выше скрипта — далеко не предел совершенства. А значит, есть к чему стремиться.

Особенности написания скриптов AviSynth и советы по их написанию будут изложены в отдельных статьях.

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


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

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