Домой Сделай сам! Хромакей в стерео 3D: что это и как его сделать своими руками

Хромакей в стерео 3D: что это и как его сделать своими руками

Автор: Владимир Климов, ведущий специалист по технологии стерео кино и стерео телевидения

Что такое хромакей

Слово “хромакей“, калькированное с английского Chroma key (буквально “цветовой ключ”) – это технология наложения (композинга) двух изображений, в основе которой лежит идея объявить какой-то конкретный цвет прозрачным (“цветовым ключом”). В англоязычной профессиональной среде эта техника также фигурирует под названием Chroma key compositing, или даже Chroma keying.

Обычно речь идёт о съёмке какого-нибудь объекта в студии (например, человека) на светло-синем или светло-зелёном фоне и впоследствии изображение этого объекта накладывают на изображение-подложку (например, изображение лесной поляны). Таким образом, получается изображение человека, стоящего на лесной поляне, т.е. человека и лесную поляну снимали отдельно, а потом совместили.

Если светло-синий цвет (в данном случае) не объявить прозрачным, то изображение человека на светло-синем фоне просто ляжет сверху на изображение лесной поляны и мы увидим только верхнюю картинку и даже не будем знать, что под ней лежит ещё что-то. Одежда человека не должна содержать цветных деталей того цвета, который мы объявляем прозрачным, иначе на этих местах возникнут “дырки”, через которые будет просвечивать изображение-подложка (бэкграунд). В качестве меры предосторожности нужно избегать цветных деталей, близких к ключевому цвету.

Это – обычный классический светло-синий (или зелёный) хромакей. Его мы можем увидеть, когда смотрим прогноз погоды по телевизору и в голливудских фильмах с применением комбинированных съёмок. Но нет ничего сложного в том, чтобы сделать такой эффект самостоятельно. Например, с помощью программы Stereo Movie Maker. Вы можете бесплатно скачать её здесь: SMM .

Изображение объекта открываем как левое видео, а изображение-подложку – как правое видео. В установках хромакея с помощью инструмента “пипетка” щёлкаем по фону левого изображения, назначая конкретный цвет ключевым. В маленьком окошке рядом устанавливаем в каких пределах заданный цвет на картинке может отклоняться от ключевого. Это так называемый фузз-фактор (fuzz-factor, то есть, фактор отклонения).

В меню "Вид" выбираем "установки хромакея"

Назначаем цвет фона ключевым

После этого в меню “Файл” выбираем пункт “сохранить как стереоизображение” и устанавливаем флажок “как хромакей”. Нажимаем кнопку “сохранить”, выбираем каким кодеком сжать и ждём результат.

В общем-то, что такое обычный хромакей, знают все видеолюбители и предыдущие абзацы для них можно было и не писать – разве что для начинающих. Но нас интересует, в первую очередь, 3D-хромакей, потому что наше время – это эпоха расцвета стереоскопического видео. С помощью уже упомянутой программы Stereo Movie Maker делаем хромакей отдельно по левому ракурсу и делаем хромакей отдельно по правому ракурсу. Затем совмещаем и получаем стереоскопическое видео, которое упаковываем в один из стандартов для просмотра на экране 3D телевизора: “anamorph over/under” или “anamorph side-by-side”. Как видим, сделать 3D хромакей не сложнее, чем два раза сделать обычный.

Многие видеолюбители ещё только осваивают технологию съёмки и монтажа стереоскопического видео, поэтому термин “3D-хромакей” всё ещё несёт в себе некоторую загадочность и терминологическую путаницу. Хотелось бы отметить, что компьютерные программы для трёхмерного моделирования (3ds Max, Maya и др.) никакого отношения к 3D-хромакею не имеют.

3D-хромакей – это хромакей стереоскопического изображения, когда одно стерео изображение накладывается на другое стерео изображение методом последовательной обработки сначала левого ракурса, а затем – правого.

Можно, конечно, в 3ds Max создать и отрендерить стереоскопическое изображение какого-нибудь фантастического леса и использовать эту картинку как подложку – таким образом, актёр окажется помещённым в фантастическое пространство (я так и сделал). Но так же можно в качестве подложки использовать какое-нибудь документальное видео, снятое стереокамерой “с воздуха”. Суть хромакея от этого не изменится.

Чем 3D хромакей отличается от обычного хромакея?

Тем же, чем стереоскопическое (объёмное) изображение отличается от обычного, т.е. разница огромная. Учитывая тот факт, что речь идёт о технологии совмещения объекта (например, человека-актёра) и объёмного пространства, надо подумать, каким образом актёр будет взаимодействовать с этим пространством?

Если, по сценарию, актёр должен сесть на какой-то виртуальный стул, то именно в этом месте кадра нужно установить похожий реальный стул, обклеенный светло-синим (или зелёным) материалом. Если актёр при этом достаёт из карманов перчатки и ложит их на виртуальный стол, желательно на этом месте съёмочной площадки установить похожий реальный стол, также обклеенный хромакейным материалом. При таком подходе взаимодействие актёра с виртуальной реальностью будет выглядеть натуралистично. Это достаточно трудоёмкий и дорогостоящий вид комбинированных съёмок и поэтому применяется он, как правило, при производстве крупнобюджетных голливудских фильмов.

Заметьте, пока что мы рассуждали только теоретически…

Практическая часть (как делался демо ролик “Хромакейная голова”)

Как бы нам сделать 3D-хромакей своими руками? Чтобы наше любительское 3D видео выглядело по-голливудски. Что бы такого снять? Строить сначала виртуальные декорации, а потом арендовать съёмочную площадку, на которой строить реальные декорации и обклеивать их хромакейным материалом – слишком долго и дорого…

Давайте для начала сделаем хотя бы несложный 3D-хромакей. Чтобы было просто, но эффектно. Призадумались мы с Леонардом…  и тут я вспомнил об одной особенности стереосъёмки – объекты, которые не влезают целиком в кадр, нельзя приближать ближе 2 метров (при классической “орто-стерео” съёмке). Всё равно такие объекты будут отбрасываться сознанием за плоскость рампы и из экрана телевизора “высовываться” не будут. Если человек подойдёт близко к стереокамере, то зрители не будут воспринимать это так, что голова человека выплывает из экрана. А вот если тело сделать невидимым и голова будет как отдельный объект, то она будет выплывать “из экрана” достаточно реалистично.

Идея понятна, осталось осуществить. Для начала нужно арендовать достаточно просторную хромакейную студию, где всё уже приспособлено для съёмок с вычитанием цвета. В нашем случае возникла дополнительная проблема – нужен большой кусок хромакейного материала, чтобы укрыть тело актёра (т.е. меня). Стали обзванивать фотостудии. Многие даже не поняли, зачем нам нужен этот дополнительный кусок. Наконец, нашли фотостудию с хорошим павильоном, в котором был тёмно-синий бумажный фон.

Тёмный фон не совсем подходит для таких съёмок (нужны мощные светильники, чтобы его осветить), но зато нам предоставили большой кусок тёмно-синего ватмана и сказали, что это – расходные материалы и мы можем делать с ним всё, что захотим. Мы быстренько (всего за полтора часа) установили съёмочное 3D оборудование, за 15 минут сняли несколько дублей, сфотографировались и поехали домой с большим радостным чувством. Впереди была стадия постпродакшн, полная как творческих удач, так и технологических затруднений.

В павильоне фотостудии Александра Васильева (г.Барнаул)

Перекачали файлы в компьютер, разжали файлы .МР4 до несжатых .avi, выбрали самый удачный дубль – с ним теперь будем работать. Открыли в SMM. В качестве бэкграунда (изображения-подложки) выбрали видео с условным названием “Райский островок”.

Отрендерили хромакей, посмотрели. Досадно – как ни старались, хромакей не получается. Как ни меняли значение фузз-фактора, хромакей получается или грязным или объект частично “разъедается”. Некоторые отдельные кадры получаются хорошо, но “грязных” всё же много. Вот почему важно, чтобы фон был освещён равномерно и никаких затемнений не содержал.

И на этом можно было закончить рассказ о неудачной попытке снять хромакей. Точнее, если его сейчас закончить, то попытка станет неудачной. Чувствуете разницу?

Надо продолжать… Поэтому для особо упёртых и маниакально упрямых следующий раздел.

Как добиться успеха, применив все свои знания и накопленный опыт

В автоматическом режиме из данного ролика сделать качественный хромакей не удалось. Попробуем сделать в ручном режиме. Тут нам нужны специальные инструменты и я рекомендую те, которыми пользуюсь сам. Нам понадобятся:

и ещё какая-нибудь программа-фоторедактор с “пипеткой”, чтобы определять значение RGB. Например, GIMP.

Я использую VirtualDub v1.8.8, Avisynth v2.5.6, ImageMagick v6.7.0-0 Q16 (2011-06-01) и GIMP v2.6.8 (Вот как сильно отстал от прогресса!)

Итак, имеем исходное видео:

Исходное видео имеет неравномерный фон

Стоит задача – неравномерный фон вокруг актёра превратить в равномерный. Это главная проблема подготовки видео для хромакея. Я предлагаю использовать “заливку”. Сейчас объясню, как это сделать с помощью ImageMagick, но сначала нам нужно преобразовать наш несжатый .avi файл в секвенцию картинок BMP. Для этого мы будем использовать VirtualDub.

Как сказал один видеолюбитель: “Открыл я программу VirtualDub и сразу понял – это не моё!” И я тоже в своё время открыл эту программу и тут же её закрыл. Но после того, как хвалёный Adobe Premiere Pro много раз меня подводил в режиме Full HD и раскалил мои нервы добела, открыл я VirtualDub – и с тех пор больше не закрываю.

А Adobe Premiere Pro рекомендую использовать для финального монтажа звуковой дорожки. То же можно сказать о программе Avisynth – она может творить чудеса похлеще Adobe After Effects. Только надо привыкнуть к тому, что команды для Avisynth существуют в виде скриптов, которые нужно открывать программой VirtualDub, как будто бы эти скрипты являются обычными видеофайлами, т.е. программа Avisynth не имеет своего “лица” – графического интерфейса.

Программа ImageMagick тоже не имеет своего интерфейса. Команды для ImageMagick существуют в виде пакетных файлов для программы “Командная строка” (это такое чёрное окошко, которое возникает само при запуске пакетного файла). Раньше она наследовала все “хвосты” DOS и понимала только короткие имена файлов и папок. Начиная с Windows XP и далее, это уже не совсем DOS, теперь она понимает имена файлов и папок любой длины. Пакетный файл сделать не сложно – открываете программу “Блокнот”, набираете текст, сохраняете. При сохранении расширение файла указываете не .txt , а .bat (от слова “Batch” – “пакет”, то есть, для пакетного исполнения последовательности команд), и всё в порядке.

Открываем .avi файл с помощью VirtualDub, назначаем с какого по какой номер кадра должен быть наложен хромакей, и именно этот отрезок нашего видео экспортируем в секвенцию картинок BMP. Допустим, получается 740 картинок ВМР по каждому ракурсу. Всего 1480 картинок ВМР. В одну кучу их валить не надо, а лучше левые картинки поместить в папку с названием Left, а правые – с названием Right, и обрабатывать их отдельно. Названия левым картинкам дать типа _0000.bmp – L_0740.bmp , а правым картинкам типа R_0000.bmp – R_0740.bmp .

Ну что ж, начнём. Набираем в блокноте текст файла, который в дальнейшем назовём “Floodfill_blue.bat” Зелёным цветом раскрашу название файлов, а фиолетовым – название директорий.

@echo off
echo Hello this is a batch file for blue floodfill
mkdir chrom
for %%a in (*.bmp) do (
echo. Processing file: “%%~nxa”
convert %%a -fuzz 15%% -fill blue -draw “color 10,10 floodfill” -alpha off chrom\%%a
)

Параметры, которые можно менять в этом тексте – это цифра после слова fuzz и цифры после слова color (10,10 в данном случае означает координаты точки ввода). Этот пакетный файл создаст папку “chrom” внутри той папки, в которую он будет помещён, и будет складывать в эту папку результат своей работы. Учитывая то, что мы не знаем, какое значение фузз-фактора даст нам наилучший результат, то делаем несколько пакетных файлов с фузз-фактором 2%, 15%, 25%, 50% и смотрим, какой они выдают результат.

Чтобы все 740 картинок ВМР сразу не обрабатывать, создадим папку “Test”, куда скопируем несколько картинок ВМР и будем испытывать всё на них. В моём случае неплохо сработал фузз-фактор 25%. Местами, конечно, остались слишком тёмные и слишком светлые вкрапления, но это можно подтереть вручную с помощью любого фоторедактора, например, Corel Photo Paint или того же GIMP.

После простой заливки синим нужно подтирать мусор вручную

Обработал я первые 10 тестовых картинок ВМР, создал из них .avi файл, проверил с помощью SMM, какой получается хромакей – результат безрадостный, объект имеет слишком заметную синюю кромку по контуру. Нужен дополнительный фильтр.

Дело в том, что эта кромка не совсем синяя. Чисто синий цвет – это RGB (0,0,255). Откроем картинку в каком-нибудь фоторедакторе и измерим “пипеткой” значение RGB на самой кромке объекта и фона. В моём случае это значение RGB (110,110,200). Поэтому зальём именно этим цветом, т.е. вместо слова blue пишем “rgb(110,110,200)”. Значение фузз-фактора подберём оптимальное, чтобы синяя кромка по контуру почти совсем исчезла, но сам объект не “разъедала”. После этого зальём чистым синим. Опять создадим .avi файл и проверим, как будет работать SMM. Теперь синяя кромка по контуру почти не заметна.

Далее нужно вручную “подтирать мусор” в 1480 картинках ВМР. Как-то не вдохновляет… Можно ли хоть как-нибудь облегчить эту работу? Например, наложить снизу и по бокам широкие полосы чисто синего цвета, чтобы только центральная зона кадра осталась для ручной работы. Сделаем синюю полоску подходящей ширины, назовём её base_blue_color_0000.bmp и наложим её на правую часть кадра с помощью такого пакетного файла:

@echo off
echo Hello this is a batch file for overlaying a small picture to a large picture
mkdir over
for %%a in (L_*.bmp) do (
echo Processing file: “%%~nxa”
composite -compose Copy -gravity East base_*.bmp %%a over\%%a
)

Понятно, что если мы поменяем в тексте слово East на West, то эта полоска наложится теперь уже на левую сторону. Если поменяем на слово South, то полоска наложится на нижнюю часть изображения.

Вот, сделали вроде бы всё, что могли… Поместим наш полуфабрикат в папку с названием For_manual_work и с завтрашнего дня начнём методично вручную в фоторедакторе подтирать мусор в 1480 картинках ВМР. Сколько, интересно, времени нужно потратить? :)

Когда сидишь весь день за компьютером и тупо подтираешь мусор в десятках, сотнях и тысячах картинок, то очень быстро начинаешь понимать, что время – это не только деньги, но и, собственно, само время, которое бесценно. Одного дня, потраченного на этот процесс, оказалось достаточно для того, чтобы мысль заработала дальше.

Нам, собственно говоря, важна кромка объекта. Нельзя ли как-то выделить её по цвету, затем создать маску и через неё спроецировать объект на чистый синий фон? Какого цвета у нас те части объекта, которые соприкасаются с фоном? Рубашка розовая, кепка коричневая (это значит, в какой-то степени содержит красный цвет), лицо розовато-коричневато-зеленоватое (тоже содержит красный цвет), волосы тёмно-коричневые (содержат немного красного цвета). Если отключить каналы синего и зелёного цветов, то останется только чёрно-красное изображение. Зальём в “красную морду лица” белый цвет и получим чёрно-белую маску.

Дальше текст, наверно, вообще для супер продвинутых. Если Вы обычный юзер, то предлагаю сразу сдаться. Как сказал один видеолюбитель: “Я ничего не понимаю во всех этих прозрачностях и масках!” А я и не буду особенно углубляться.

Как известно, в компьютерах используется самая простая модель представления цвета, которая называется RGB. Red – красный, Green – зелёный, Blue – синий. Каждая картинка состоит как бы из трёх слоёв (их называют каналами) – красного, зелёного и синего. RGB (255,0,0) – какой это цвет? Красный, причём самый насыщенный. RGB (0,255,0) – какой цвет? RGB (0,0,255) – какой? RGB (0,0,0) – чёрный, когда яркость по всем каналам равна нулю. RGB (255,255,255) – белый, когда яркость по всем каналам максимальная.

Обычно применяют 8 бит квантования на каждый канал. Это так называемый стандарт RGB 24, который может обеспечить палитру в 16,7 млн. цветовых оттенков, т.е. каждый конкретный цвет можно обозначить тремя числами через запятую. Вы можете посмотреть в свойствах любой картинки ВМР, там будет написано: квантование – 24 бит/пиксель.

Для работы с прозрачностью нам понадобится стандарт RGB 32, или как его ещё называют RGBА. Буква А обозначает дополнительный канал Alpha, который не несёт информации о цвете, а определяет степень прозрачности пикселя, когда изображение используют в качестве маски. Не знаю, как в других фоторедакторах, а в ImageMagick белый цвет считается прозрачным, а чёрный – нет. В качестве маски обычно применяют высококонтрастное чёрно-белое изображение, в котором нет полутоновых градаций. Как такое изображение получить? Создадим пакетный файл, который назовём “Mask.bat”:

@echo off
echo Hello this is a batch file for mask
mkdir chrom
for %%a in (*.bmp) do (
echo. Processing file: “%%~nxa”
convert %%a -channel G -evaluate set 0 +channel -colorspace RGB g_%%a.miff
convert g_%%a.miff -channel B -evaluate set 0 +channel -colorspace RGB gb_%%a.miff
convert gb_%%a.miff -level 25%% gb_contrast_%%a.miff
convert gb_contrast_%%a.miff -fuzz 50%% -fill white -draw “color 950,500 floodfill” w_%%a.miff
convert w_%%a.miff -fuzz 20%% -fill black -draw “color 10,10 floodfill” mask_black_%%a.miff
convert w_%%a.miff -fuzz 99%% -fill blue -draw “color 10,10 floodfill” fone_blue_%%a.miff
convert fone_blue_%%a.miff %%a mask_black_%%a.miff -composite median_%%a.miff
convert mask_black_%%a.miff -negate mask_negative_%%a.miff
convert mask_negative_%%a.miff -fuzz 20%% -fill black -draw “color 10,10 floodfill” mask_negative2_%%a.miff
convert median_%%a.miff %%a mask_negative2_%%a.miff -composite -alpha off chrom\%%a
DEL *.miff
)

Такой длинный пакетный файл, наверное, надо прокомментировать, а затем проиллюстрировать. Сначала создаём папку chrom, куда будем складывать готовый результат. Затем определяем, что будем делать с каждой входящей ВМР картинкой. В следующей строчке даём указание отображать на экране имя картинки, которая находится в данное время в обработке. Далее отключаем последовательно сначала канал зелёного, а затем синего цветов, получаем картинку с названием gb_%%a.miff .

Тут нужно сказать, что формат .miff является внутренним форматом ImageMagick и в других программах мы не можем его открыть и посмотреть. Насколько я понял, когда ImageMagick записывает промежуточный результат работы в служебный файл с расширением .miff , то автоматически создаётся канал прозрачности, который в конце работы (перед записью готового результата) нужно принудительно отключать командой -alpha off .

Далее, повышаем контраст картинки в значительной степени – получаем картинку с названием gb_contrast_%%a.miff . Затем заливаем в “красную морду лица” белый цвет (обратите внимание, что координаты точки ввода изменились), а в окружающее пространство зальём чёрный цвет и получим чёрно-белую маску (картинка с названием mask_black_%%a.miff), через которую спроецируем объект на чисто синий фон.

Таким образом, получаем картинку median_%%a.miff . Это пока ещё не совсем то, что нужно, первая маска не до конца сделала свою работу – через неё не спроецировались слишком тёмные брови, зрачки глаз, некоторые другие элементы, потому что при повышении контраста они стали совсем чёрные. Поэтому командой -negate сделаем негатив первой маски и этот негатив доработаем, залив его чёрным цветом.

Потом через эту вторую маску (картинка с названием mask_negative2_%%a.miff) допечатаем недостающие детали с оригинала на картинку median_%%a.miff , выключим канал прозрачности командой -alpha off и положим готовый результат в папку chrom. После этого удалим все служебные картинки с расширением *.miff .

Исходное изображение *.bmp
Картинка g_%%a.miff (отключен канал зелёного цвета)
Картинка gb_%%a.miff (отключены каналы зелёного и синего цветов)
Картинка gb_contrast_%%a.miff (увеличен контраст)
Картинка w_%%a.miff (заливка контура лица белым цветом)
Картинка mask_black_%%a.miff (первая чёрно-белая маска)
Картинка fone_blue_%%a.miff (вспомогательное изображение)
Картинка median_%%a.miff (почти готовый результат)
Картинка mask_negative_%%a.miff (делаем инверсию первой маски)
Картинка mask_negative2_%%a.miff (создаём вторую маску)
Готовое изображение *.bmp

Вроде бы всё. Но объект-то в кадре двигается, его координаты меняются! Значит, должна меняться и точка ввода заливки лица. Для тех кадров, которые не обработались этим пакетным файлом, создаём несколько вариантов, меняя точку ввода заливки. Как говорится, “тыкнув несколько раз в небо, попадаем в лицо”. Возможно, не все кадры удастся обработать таким методом, а процентов 90 – 95, но и это уже значительно ускорит работу.

Теперь применим дополнительный фильтр для уменьшения синего контура вокруг объекта. Цвет кромки в нашем случае мы уже замеряли “пипеткой” и он равен RGB (110,110,200). Назовём файл “Additional_filter_L.bat” :

@echo off
echo Hello this is a batch file for additional filter
::Background picture BMP must be blue
mkdir chrom
for %%a in (L_*.bmp) do (
echo. Processing file: “%%~nxa”
convert %%a -fuzz 45%% -fill “rgb(110,110,200)” -draw “color 10,10 floodfill” floodfill_%%a.miff
convert floodfill_%%a.miff -fuzz 45%% -fill gray -draw “color 10,10 floodfill” floodfill_gray_%%a.miff
convert floodfill_%%a.miff -transparent “rgb(110,110,200)” overlayed_%%a.miff
convert bgr_blue_*.bmp overlayed_%%a.miff -composite test_%%a.miff
convert floodfill_gray_%%a.miff +transparent “rgb(110,110,200)” b_details_%%a.miff
convert test_%%a.miff b_details_%%a.miff -composite -alpha off chrom\%%a
DEL *.miff
)

Сначала сделаем чистую синюю картинку bgr_blue_0001.bmp, которая понадобится для работы этого пакетного файла, и скопируем её в ту же папку, в которой будет происходить работа пакетного файла. Итак, первая стадия – это заливка синего фона цветом кромки, получаем картинку floodfill_%%a.miff.

Потом заливаем эту картинку серым цветом и получаем картинку floodfill_gray_%%a.miff , которая несколько позже нам пригодится. А пока вернёмся к картинке floodfill_%%a.miff. С помощью команды -transparent мы объявляем этот новый фон прозрачным. Таким образом, получаем картинку overlayed_%%a.miff , которую накладываем на чисто синий фон.

Почему мы не объявляем картинку test_%%a.miff готовой? А Вы задумывались над тем, что делать, если какие-нибудь детали внутри контура объекта совпадут по цвету с цветом кромки? Вот тут нам и пригодится картинка floodfill_gray_%%a.miff , на которой мы объявим прозрачным всё кроме нашего “фирменного” цвета, получив таким образом эти самые детали, которые далее мы наложим на картинку test_%%a.miff .

Готовый результат, который в данном случае мы складываем в папку chrom, по внешнему виду практически не будет отличаться от первоначального, но в процессе рендеринга хромакея с помощью SMM Вы наглядно увидите, что синяя кромка вокруг объекта станет значительно тоньше.

Тут нужно добавить, что польза от этого дополнительного фильтра очень большая – те кадры, которые кажутся плохо обработанными пакетным файлом “Mask.bat”, после прохождения дополнительного фильтра неожиданно оказываются совершенно готовыми. Поэтому не подтирайте на картинках мусор вручную, не пропустив их через этот дополнительный фильтр.

После того, как все файлы обработаны, остаётся принять решение – создаём из секвенции ВМР картинок .avi файл и запускаем SMM, или делаем хромакей средствами самой ImageMagick. Я не случайно прилепил цветную палитру себе на лоб – если делать хромакей с помощью ImageMagick, то внутри контура объект может иметь цветные детали любого цвета. Это почти полноцветный хромакей. Если же делать хромакей с помощью SMM, то на месте синих деталей образуются дырки, через которые будет просвечивать изображение-подложка.

Итак, решено: – делаем почти полноцветный хромакей.

Хромакей с помощью ImageMagic

Готовые секвенции ВМР картинок в папках “Left” и “Right” у нас уже есть по адресу типа D:\Left\chrom\L_0000.bmp…L_0740.bmp . Теперь создадим папки “bgr_Left” и “bgr_Right” и экспортируем туда видео, которое мы планируем использовать в качестве бэкграунда.

Естественно, с помощью VirtualDub, в виде секвенции ВМР картинок с названием типа bgr_L_0000.bmp…bgr_L_0740.bmp и bgr_R_000.bmp…bgr_R_0740.bmp . После этого, подготовленные для хромакея левые картинки переместим из папки Left в папку bgr_Left, а правые – в папку bgr_Right . Таким образом, в одной папке будут и картинки бэкграунда, и картинки объекта. Создадим пакетный файл с названием “chromakey_rgb_L.bat” и поместим его в папку bgr_Left .

@echo off
echo Hello this is a batch file for blue chromakey
::Background images must have the prefix “bgr_” in the beginning their name, but overlay images must be “L_” exactly
mkdir chrom
setlocal EnableDelayedExpansion
for %%a in (L_*.bmp) do (
set file=%%~nxa
set file=!file:L_=!
echo. Processing file: “%%~nxa”
convert %%a -fuzz 45%% -fill “rgb(110,110,200)” -draw “color 10,10 floodfill” floodfill_%%a.miff
convert floodfill_%%a.miff -fuzz 45%% -fill gray -draw “color 10,10 floodfill” floodfill_gray_%%a.miff
convert floodfill_%%a.miff -transparent “rgb(110,110,200)” overlayed_%%a.miff
convert bgr_*!file!.bmp overlayed_%%a.miff -composite test_%%a.miff
convert floodfill_gray_%%a.miff +transparent “rgb(110,110,200)” b_details_%%a.miff
convert test_%%a.miff b_details_%%a.miff -composite -alpha off chrom\masked_%%a
DEL *.miff
)

Вы, наверное, уже заметили, что название файлов типа bgr_*.bmp я выделил синим цветом и написал странное сочетание bgr_*!file!.bmp? Именно так. Это долго объяснять, написание текста для пакетных файлов DOS – это достаточно специфическая и запутанная процедура, о которой Вам лучше почитать где-нибудь отдельно. Тут нужно просто привыкнуть.

Я всегда обрабатываю сначала левый ракурс, а затем – правый. Чтобы ничего не забывать и не путаться. В общем, запускаем сначала пакетный файл в левой папке. Тут нужно сказать, что при работе этого файла выдаётся сообщение об ошибке, которому верить не следует. Можно на “Рабочем столе” создать папку “Test” для проверки работы хромакейного пакетного файла, куда скопировать этот файл, а также несколько картинок объекта и соответствующих им картинок бэкграунда.

Обратите внимание, что в тексте для этого пакетного файла я использую “фирменный” цвет кромки, а не чисто синий. Чтобы добиться минимальной толщины кромки объекта, можно попробовать изменить этот цвет, проверяя на тестовых картинках как это будет работать. В качестве бэкграунда можно использовать картинки чисто белого цвета, на котором легко видны все изъяны изображения.

Исходная картинка
Картинка floodfill_%%a.miff (заливка фирменным цветом) Картинка floodfill_gray_%%a.miff (заливка серым цветом)  
Картинка overlayed_%%a.miff (наш фирменный цвет объявляем прозрачным)
Картинка test_%%a.miff (накладываем на изображение-подложку)
Картинка b_details_%%a.miff (в данном случае не показательная)
Готовая картинка

Скорость работы хромакейного пакетного файла в несколько раз медленнее, чем у SMM. Но не потому, что ImageMagick работает медленнее чем SMM, а потому, что при создании почти полноцветного хромакея возникают дополнительные стадии обработки изображения.

После того, как секвенции картинок ВМР будут обработаны, запускаем VirtualDub, создаём из секвенции левых картинок ВМР видео “L_.avi” , а из секвенции правых картинок – видео “R_.avi”, назначаем сразу частоту (в моём случае это 29.97 fps) и сохраняем в виде несжатых .avi файлов, который далее используем для озвучивания.

И вот наступает момент объединить левое и правое видео в один файл. Пишем скрипт для программы AviSynth . Назовём его “Anamorph_side_by_side.avs”:

# Load sources
A = AviSource(“D:\For_stereo_video\L_.avi”)
B = AviSource(“D:\For_stereo_video\R_.avi”)
C = StackHorizontal (A,B)
HorizontalReduceBy2(C)

При сохранении текста присваиваем файлу расширение .avs . Этот файл открываем в программе VirtualDub как обычный видеофайл, назначаем кодек для сжатия (я рекомендую использовать Xvid) и получаем файл, пригодный для просмотра на экране 3D телевизора.

Скачать стерео 3D демо-ролик “Хромакейная голова”.

Конечно, придётся сначала попыхтеть при освоении VirtualDub (я рекомендую при работе с этой программой поначалу всегда записывать на листе бумаги все свои действия), зато впоследствии с помощью наработанной коллекции скриптов AviSynth Вы сможете делать с видео почти всё, что угодно. Ну а программа ImageMagick позволяет, наверно, вообще всё.

Удачи вам в ваших экспериментах, коллеги!