А у нас новый сайт ----------------> www.ph-ph.ru!
Finar.ru
web.finar.ru
video.finar.ru
Темы для BootstrapNew!

Наложение логотипа на видео средствами Avisynth

описана методика наложения на видео полупрозрачного bmp-логотипа, благодаря avisynth легко автоматизируемая для пакетной обработки файлов

Автор: Филипп Казаков | 2008-06-29 | просмотров 13845
Тэги

Дано: видеоролик для первого примера (first.vob) в формате MPEG2 PAL 720x576 со звуком MPEG1 layer 2 48KHz, 16 bit, stereo; видеоролик для второго примера (second.avi) в контейнере avi, с любым разрешением, зажатый любым кодеком, с частотой кадров 30 кадров в секунду, частотой дискретизации звука 44.1 KHz .

Задача: создание удобного средства для пакетной подготовки видеороликов для публикции в Сети. Подготовка ролика состоит в следующем:

  1. наложение полупрозрачного логотипа на видеоролик;
  2. добавление в начало стартового титра;
  3. добавление финального титра в конец ролика.
  4. уменьшение разрешения ролика с целью сжатия в 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 - год спустя.




Оставить комментарий 


Ваше имя:
->