Дано: видеоролик для первого примера (first.vob) в формате MPEG2 PAL 720x576 со звуком MPEG1 layer 2 48KHz, 16 bit, stereo; видеоролик для второго примера (second.avi) в контейнере avi, с любым разрешением, зажатый любым кодеком, с частотой кадров 30 кадров в секунду, частотой дискретизации звука 44.1 KHz .
Задача: создание удобного средства для пакетной подготовки видеороликов для публикции в Сети. Подготовка ролика состоит в следующем:
- наложение полупрозрачного логотипа на видеоролик;
- добавление в начало стартового титра;
- добавление финального титра в конец ролика.
- уменьшение разрешения ролика с целью сжатия в h264 или другой низкобитрейтный формат.
Выполнение всех этих действий будем выполнять одним avisynth-скриптом.
Дополнительные оговорки: 1) Все рабочие файлики лежат в одной папке. Поэтому не надо прописывть пути в скриптах. Если у вас они в разных папках, изменяйте пути в скриптах. 2) Вне зависимости от формата вашего исходного ролика, вы можете использовать приведенную инструкцию, лишь слегка модифицировав скрипты. Все конкретные значения разрешений, fps, частоты дискретизации и т.д. даны просто для примера.
Прежде всего подготовьте логотип в Photoshop (файл video_logo.bmp). Чтобы потом в скриптах не мучаться с его расположением, сделайте логотип в файле размером 720х576, поместив его сразу в нужное место "кадра". В описываемом методе, прозрачность логотипа определяется маской прозрачности. Маска прозрачности - суть чернобелый графический файл идентичного video_logo.bmp разрешения, в котором более темным областям соответствует более сильная степень "опрозрачнивания" логотипа. Соответственно, абсолютно черному цвету соответствует полная прозрачность, абсолютно белому - полная непрозрачность. Файл маски прозрачности (video_mask.bmp) также необходимо подготовить вручную в Фотошопе. В результате должен получиться файл 720х576, преимущественно абсолютно черный с белым "образом" вашего логотипа.
Теперь подготовьте начальный титр (start_title.avi) и финальный титр (final_title.avi). Пусть (хотя это не принципиально), эти ролики будут в формате uncompress, 720x576, 25 fps, RGB, звук 48 KHz, 16 bit, stereo.
Первый видеоролик first.vob разумеется сначала нужно демукснуть с помощью DJIndex, в результате чего вы получите два файла - предположим, first.m2v и first.mpa.
Затем создайте такой .avs скрипт:
# Обработка MPEG-источника # готовим ролик: собираем его из видео и звука, попутно уменьшая разрешение видео audio = NicMPG123Source("first.mpa") video = DGDecode_mpeg2source("first.d2v").LanczosResize(400,320) background = AudioDub(video, audio) # готовим логотип: вводим подготовленную картинку и уменьшаем ее разрешение до того же значения, что и у ролика overlay = ImageSource("video_logo.bmp").LanczosResize(400,320) # накладывам логотип на ролик, используя маску прозрачности из файла video_mask.bmp, одновременно приводя маску прозрачности к нужному разрешению; устанавливаем тип наложения "blend"; прозрачность оставшихся непрозрачными после маски областей устанавливаем 50%. movie = overlay(background, overlay, mask=ImageSource("video_mask.bmp"). \\ LanczosResize(400,320), mode="blend", opacity=0.5) # вводим начальный титр, приводим его к нужному формату, далее стыкуем основной ролик (он уже с логотипом), и наконец добавляем финальный титр с необходимой обработкой avisource("start_title.avi").ConvertToYV12().LanczosResize(400,320) + movie + avisource("final_title.avi").ConvertToYV12().LanczosResize(400,320)
Рассмотрим теперь чуть более сложный случай. Основной ролик в контейнере .avi и зажат совсем не так, как начальный и конечный титры. Для avisynth это не проблема:
#Обработка AVI-источника # готовим ролик: открываем файл, уменьшаем разрешение, конвертируем цветность background = avisource("second.avi").LanczosResize(400,320).ConvertToYV12() # готовим логотип: вводим подготовленную картинку и уменьшаем ее разрешение до того же значения, что и у ролика overlay = ImageSource("video_logo.bmp").LanczosResize(400,320) # накладывам логотип на ролик, используя маску прозрачности из файла video_mask.bmp, одновременно приводя маску прозрачности к нужному разрешению; устанавливаем тип наложения "blend"; прозрачность оставшихся непрозрачными после маски областей устанавливаем 50%. movie = overlay(background, overlay, mask=ImageSource("video_mask.bmp"). \\ LanczosResize(400,320), mode="blend", opacity=0.5) # вводим начальный титр, конвертируем его цветность, подгоняем fps и частоту дискретизаци к значениям основного ролика, уменьшаем разрешение; далее стыкуем основной ролик (он уже с логотипом); и, наконец, добавляем финальный титр с такой же обработкой, как у первого. avisource("start_title.avi").ConvertToYV12().ChangeFPS(30).SSRC(44100, false).LanczosResize(400,320) + movie + avisource("final_title.avi").ConvertToYV12().ChangeFPS(30). \\ LanczosResize(400,320).SSRC(44100, false)
Разумеется, приведенные скрипты не описывают всего многообразия возможных вариантов обработки. Вы можете подгонять параметры ролика к начальному и конечному титру, а не наоборот, вы можете накладывать логотип не только на сам ролик, но и на приставленные титры, вы, наконец, можете подавать на вход любое видео в любом формате через DirecShowSource, лишь бы оно открывалось в Windows. Внимательно проанализировав два приведенных примера, вы, полагаю, убедитесь, что в avisynth нет ничего сложного, и без труда составите подходящий для своего случая скрипт. Ну и не забывайте про справку Avisynth :)
Полученный рабочий .avs можно закодировать, например, в ProCoder'e, или через MeGui и Behappy зажать в h264, как описано в статье h264 - год спустя.
Оставить комментарий