Синхронный перевод STATE OF UNREAL 2024
💭 Инновации в UE5 от Epic Games 🎫
⬇️Ссылка на стрим⬇️
💭 Инновации в UE5 от Epic Games 🎫
⬇️Ссылка на стрим⬇️
Привет! Сегодня сделал пробный тизер для своей новой игрушки, зацените :)
Наш сюжетный инди-хоррор
История о коротком приключении, которое планировалось на 3-4 недели работы и длится уже пятый месяц. Мы если что счастливы)) наверное.
Решили мы как-то командой единомышленников довести игру до релиза, хотя бы одну, и сели выбирать жанр. Как молодой команде наш выбор пал на жанр хоррора с единогласным (ошибочным) мнением, что его сделать изи. Мы никогда так не ошибались, но об этом позже.
Скрин из игры как ни странно
Побрейнштормили, нарративный специалист специально подготовленный для этого и обученный, набросал нам синопсис и мы сели разрабатывать проект технически. В виду легкомыслия и более быстрой разработки было решено брать за основу побольше готовых ассетов (с готовыми ассетами всё не так однозначно уж поверьте), это в основном не самые важные вещи и объекты второго плана. Основные вещи решили делать самостоятельно для вписывания этого в лор и атмосферу и тд. Проект в разработке примерно ~4-5 месяцев. Команда около пяти человек вроде. Планы по проекту взяли минимальные по нашим силам, какой никакой опыт в разработке у всех имеется, поэтому действительно рамки себе выставляли невысокие.
Наряду с этим нам категорически не хочется создавать типичный хоррор а-ля "прыжок в камеру - громкий звук кровь из ушей". Просмотрено много референсов хоррор жанров. И ААА тайтлы и инди хорроры сделанные на коленке. Поэтому пугалки в игре делаем с постановкой кадра, ведением игрока по флоу напряжения, перетекание игрока из одного эмоционального состояния в другое. Банальные скримеры с "прыжками в камеру" мы исключаем.
На этом этапе мы столкнулись с проблемой номер 1.
Из-за нее длина производства увеличились в разы. Мы ведь хотим красивые повествовательные сцены, с постановкой кадра, с освещением и анимациями персонажей находящихся в сцене? Да. Трудоемкость сборки таких сцен например на 10 секунд времени может варьироваться от одного рабочего дня и до "ну мы же в прошлом месяце это начали". Без жутких мыслей у игрока может сложиться впечатление, что мы играем не в хоррор, а в симулятор бега с тыканием в разные предметы, рядом с красивыми пейзажами.
Как пугать игрока тогда и не афигевать от объема работ для таких сцен?
Мы балансируем игровой опыт игрока от, назовем их, "важных" сцен, до второстепенных равными промежутками времени. Получается это производственная необходимость разбавлять хороший трудоемкий контент, средним контентом, который создается в разы быстрее. Плюс во второстепенные события удобно могут входить легко создаваемые эмбиент звуки, передвижения объектов, изменения окружения пока игрок не видит. Поддерживание нагнетающей атмосферы приветствуется. Плюс как вы себя чувствуете, когда вам постоянно кажется, что за вами кто-то следит?
О чем игра?
Это хоррор в старой русской деревне, в которой, вырос главный герой. Он возвращается в эту деревню после многих лет жизни, ради завершения своей коллекции антиквариата. Он помнит что в подростковом возрасте у одной семьи видел тот самый недостающий пазл для его коллекции. Что может пойти не так в пустой деревне? В игре завелась нечисть, которая собственно и звучит как название игры - Навь. Зарубежный вариант как Nav. Игроку предстоит на собственном опыте узнать, почему она там появилась и чем все закончится для "всех" кто есть в этой деревне.
Геймплей игры от первого лица. Персонаж использует предметы для освещения себе пути, решает головоломки, загадки. Находит необходимые предметы для их решения. И пугается этого мира само собой (так хотят авторы). Участвует в магических ритуалах, боится духов, использует идолы.
Взаимодействий игрока планируется много. Игрок будет трогать, двигать, крутить, переносить, переключать и т.д.
Создание атмосферы русской деревни и заброшенности. На лампочку не смотрите))
В итоге что имеем сейчас?
Сделано по моим скромным подсчетам процентов 15-20 (рассчитывали что спустя такой промежуток времени будет хотя бы половина). Если сложить дважды два можно высчитать что до задуманного финала работы еще годик. Есть ли столько времени, вопрос хороший.
Геймплей (текущий) игры примерно на 30-40 минут. По сути это демка, которая еще в разработке в данный момент находится, исправляются шероховатости. Должна выглядеть как вертикальный срез, поэтому стараемся. т.е. получается демка ~30 минут, вся игра до релиза ~2.5-3 часа геймплея. Звучит мало правда?
Поставлено и срежиссировано катсцен на ~90 секунд. Занимались таким впервые, поэтому опять ошибочное планирование времени на эти задачи. Львиная доля сил была потрачена на это.
Около 8 интерактивных объектов для игрока на данный момент для демки.
Звук. Записаны жуткие песни для хоррора, которые переделываются и еще будут переделываться. Мы ищем необходимый результат для нас. Проделана работа над созданием атмосферности игры, эмбиент музыка, звуки и шорохи.
Хочу добавить пару слов, по поводу работы с готовыми ассетами. Если есть мысли по поводу того, что их можно просто взять и склепать из них проект и выпустить в стим, мнение доброе. Это лишь вершина айсберга, который вас ждет. У нас весь объем работы был потрачен на проектирование левелдизайна, левел арт, геймдизайн, передача игрового опыта игроку, программирование игровых объектов (ассеты вам не помогут если вы хотите делать что-то свое), разработка звукового сопровождение (создаем сами), программирование и имплементация звука в игровой поток, постановка и режисирование катсцен, разработка катсцен, связывание лора и нарратива с игровым миром, внедрение повествование в игровой поток и многое другое. Купленный ассет это 1% от проделанной работы в хорошей игре.
Дом где раньше жил Главный Герой
В итоге, что хочу сказать. Сделать инди хоррор на дефолтных пугалках-кричалках, можно, хоть по одной штуке в месяц выпускать. Сделать хоррор с повествованием, лором, сюжетом, катсценами, взаимодействием игрока с окружающим миром и фидбэком этого мира на опыт игрока, динамическим миром, качественным звуком, построенным левелдизайном - это работа может затянуться на годы. В зависимости от ваших планов и умений.
В любом случае двигаемся дальше, Кровь, Пот и Пиксели.
Всем спасибо кто прочитал. Играйте в хорошие игры и делайте хорошие игры))
Скрин из нашего стима
История о коротком приключении, которое планировалось на 3-4 недели работы и длится уже пятый месяц. Мы если что счастливы)) наверное.
Решили мы как-то командой единомышленников довести игру до релиза, хотя бы одну, и сели выбирать жанр. Как молодой команде наш выбор пал на жанр хоррора с единогласным (ошибочным) мнением, что его сделать изи. Мы никогда так не ошибались, но об этом позже.
Скрин из игры как ни странно
Побрейнштормили, нарративный специалист специально подготовленный для этого и обученный, набросал нам синопсис и мы сели разрабатывать проект технически. В виду легкомыслия и более быстрой разработки было решено брать за основу побольше готовых ассетов (с готовыми ассетами всё не так однозначно уж поверьте), это в основном не самые важные вещи и объекты второго плана. Основные вещи решили делать самостоятельно для вписывания этого в лор и атмосферу и тд. Проект в разработке примерно ~4-5 месяцев. Команда около пяти человек вроде. Планы по проекту взяли минимальные по нашим силам, какой никакой опыт в разработке у всех имеется, поэтому действительно рамки себе выставляли невысокие.
Наряду с этим нам категорически не хочется создавать типичный хоррор а-ля "прыжок в камеру - громкий звук кровь из ушей". Просмотрено много референсов хоррор жанров. И ААА тайтлы и инди хорроры сделанные на коленке. Поэтому пугалки в игре делаем с постановкой кадра, ведением игрока по флоу напряжения, перетекание игрока из одного эмоционального состояния в другое. Банальные скримеры с "прыжками в камеру" мы исключаем.
На этом этапе мы столкнулись с проблемой номер 1.
Из-за нее длина производства увеличились в разы. Мы ведь хотим красивые повествовательные сцены, с постановкой кадра, с освещением и анимациями персонажей находящихся в сцене? Да. Трудоемкость сборки таких сцен например на 10 секунд времени может варьироваться от одного рабочего дня и до "ну мы же в прошлом месяце это начали". Без жутких мыслей у игрока может сложиться впечатление, что мы играем не в хоррор, а в симулятор бега с тыканием в разные предметы, рядом с красивыми пейзажами.
Как пугать игрока тогда и не афигевать от объема работ для таких сцен?
Мы балансируем игровой опыт игрока от, назовем их, "важных" сцен, до второстепенных равными промежутками времени. Получается это производственная необходимость разбавлять хороший трудоемкий контент, средним контентом, который создается в разы быстрее. Плюс во второстепенные события удобно могут входить легко создаваемые эмбиент звуки, передвижения объектов, изменения окружения пока игрок не видит. Поддерживание нагнетающей атмосферы приветствуется. Плюс как вы себя чувствуете, когда вам постоянно кажется, что за вами кто-то следит?
О чем игра?
Это хоррор в старой русской деревне, в которой, вырос главный герой. Он возвращается в эту деревню после многих лет жизни, ради завершения своей коллекции антиквариата. Он помнит что в подростковом возрасте у одной семьи видел тот самый недостающий пазл для его коллекции. Что может пойти не так в пустой деревне? В игре завелась нечисть, которая собственно и звучит как название игры - Навь. Зарубежный вариант как Nav. Игроку предстоит на собственном опыте узнать, почему она там появилась и чем все закончится для "всех" кто есть в этой деревне.
Геймплей игры от первого лица. Персонаж использует предметы для освещения себе пути, решает головоломки, загадки. Находит необходимые предметы для их решения. И пугается этого мира само собой (так хотят авторы). Участвует в магических ритуалах, боится духов, использует идолы.
Взаимодействий игрока планируется много. Игрок будет трогать, двигать, крутить, переносить, переключать и т.д.
Создание атмосферы русской деревни и заброшенности. На лампочку не смотрите))
В итоге что имеем сейчас?
Сделано по моим скромным подсчетам процентов 15-20 (рассчитывали что спустя такой промежуток времени будет хотя бы половина). Если сложить дважды два можно высчитать что до задуманного финала работы еще годик. Есть ли столько времени, вопрос хороший.
Геймплей (текущий) игры примерно на 30-40 минут. По сути это демка, которая еще в разработке в данный момент находится, исправляются шероховатости. Должна выглядеть как вертикальный срез, поэтому стараемся. т.е. получается демка ~30 минут, вся игра до релиза ~2.5-3 часа геймплея. Звучит мало правда?
Поставлено и срежиссировано катсцен на ~90 секунд. Занимались таким впервые, поэтому опять ошибочное планирование времени на эти задачи. Львиная доля сил была потрачена на это.
Около 8 интерактивных объектов для игрока на данный момент для демки.
Звук. Записаны жуткие песни для хоррора, которые переделываются и еще будут переделываться. Мы ищем необходимый результат для нас. Проделана работа над созданием атмосферности игры, эмбиент музыка, звуки и шорохи.
Хочу добавить пару слов, по поводу работы с готовыми ассетами. Если есть мысли по поводу того, что их можно просто взять и склепать из них проект и выпустить в стим, мнение доброе. Это лишь вершина айсберга, который вас ждет. У нас весь объем работы был потрачен на проектирование левелдизайна, левел арт, геймдизайн, передача игрового опыта игроку, программирование игровых объектов (ассеты вам не помогут если вы хотите делать что-то свое), разработка звукового сопровождение (создаем сами), программирование и имплементация звука в игровой поток, постановка и режисирование катсцен, разработка катсцен, связывание лора и нарратива с игровым миром, внедрение повествование в игровой поток и многое другое. Купленный ассет это 1% от проделанной работы в хорошей игре.
Дом где раньше жил Главный Герой
В итоге, что хочу сказать. Сделать инди хоррор на дефолтных пугалках-кричалках, можно, хоть по одной штуке в месяц выпускать. Сделать хоррор с повествованием, лором, сюжетом, катсценами, взаимодействием игрока с окружающим миром и фидбэком этого мира на опыт игрока, динамическим миром, качественным звуком, построенным левелдизайном - это работа может затянуться на годы. В зависимости от ваших планов и умений.
В любом случае двигаемся дальше, Кровь, Пот и Пиксели.
Всем спасибо кто прочитал. Играйте в хорошие игры и делайте хорошие игры))
Всегда может что-то глюкнуть, когда допиливаешь движок игры. Тогда становится видно, что игра у меня сделана из текстовых символов. Как будто из пиксель арта попадаешь в виртуальный мир. Случайный интересный эффект. Думаю, может использовать в игре как-нибудь?
Добавьте игру в Wishlist на страничке в Steam, если интересно, что из этого получится.
Вот и появился у нас первые прототип. Зацените чтоли, лайкните
Это техническая демо версия. все еще очень сырое, но сам игровой процесс примерно такой. Упор хотим сделать на анимации, чтобы все процессы были максимально милыми и няшными.
Наша целевая аудитория - девушки и женщины от 25 до 55 лет. Ну и все любители кошек заодно.
Продолжаю серию материалов о своей «хакерской» игре. Ранее я рассказывал об ее процессе разработки, а сегодня затрону не менее важную часть — маркетинг.
Для продвижения игры я начал публиковать Shorts на YouTube, но это отнимало много времени и ресурсов. Будучи инженером, я стараюсь автоматизировать рутинные задачи, поэтому сделал решение, которое самостоятельно нарезает видео на 60-секундные фрагменты.
Проблема инди-игр
Gamedev-разработчикам недостаточно просто создать игру, чтобы она пользовалась популярностью у пользователей. Неотъемлемой частью процесса является маркетинг. Разумеется, можно рассчитывать, что игра сама найдет свою аудиторию. Но будем реалистами: даже самый крутой проект может остаться незамеченным, если о нем не рассказать.
Существует огромное количество гайдов по маркетингу инди-игр. Мне удалось не только ознакомиться с ними, но и опробовать на практике. Ниже делюсь своими выводами, которые могут помочь начинающим gamedev-разработчикам.
Контента должно быть много. Необходимо показать игру как можно большему количеству людей, чтобы они узнали и добавили ее в вишлист.
Частота публикации важнее уникальности. Конечно, адаптировать контент под каждую соцсеть — круто, но это отнимает много времени и ресурсов. Эффективнее публиковать несколько простых материалов, чем один уникальный.
Вертикальные видео дают хорошие охваты. Причем необязательно даже записывать свой голос, достаточно показать игровой процесс.
Таким образом, я стал нарезать горизонтальные видео на множество Shorts, чтобы получать дополнительные просмотры.
Небольшой лайфхак для увеличения охвата на YouTube. Если при постинге видео убрать галочку Publish to subscriptions feed and notify subscribers, то знакомые с игрой люди не будут видеть его в своей ленте.
Окно с параметрами видео перед публикацией
Что было раньше
Сейчас у меня есть два основных YouTube-канала — игровой и личный. На первом публикую горизонтальные и вертикальные видео для продвижения своей игры. Часть из них уходят в GameJolt, Reddit и другие площадки. На втором — только горизонтальные, но некоторые из них посвящаю разработке игр.
Для монтажа я использую CapCut. В личном канале делаю видеоряд и накладываю звук, а в игровом — добавляю сгенерированный голос. Процесс этот довольно затратный, из-за чего нередко страдает стабильность публикаций. Подливает масла в огонь неудобство генерации голоса из-за ограничений в 300 символов за раз. Приходится генерировать озвучку в несколько этапов, что сильно замедляет подготовку нового контента.
Ограничение по тексту
Возможности для автоматизации
Решение автоматизировать процесс долго вынашивать не пришлось, но какие здесь есть возможности для этого? Рассмотрю несколько примеров.
Нарезать горизонтальные видео, чтобы получать больше охватов.
Автоматизировать генерацию голоса и визуала для создания видео. Более того, можно анимировать маскот, от лица которого буду вести повествование.
Маскот игры
3. Автоматизировать производство горизонтальных видео за счет подбора визуала. Для этого буду использовать контент из пула видео и хэш-таблицы тегов на основе семантического анализа текста.
В статье начну с малого и реализую только первый пункт. Остальные решения оставлю для следующих материалов.
Итак, мне нужен «черный ящик» для горизонтальных видео, который будет:
менять формат с 16:9 на 9:16,
заполнять лишнее пространство размытым фоном,
нарезать видео в соответствии с таймкодом, но не более 60 секунд,
добавлять текст с нумерацией выпуска и призывом посмотреть полное видео.
Выбор инструментария и философия
Не вижу смысла заморачиваться с UI, поэтому буду использовать bash-скрипты. Для обработки видео выбираю библиотеку FFMPEG — поверхностное изучение показало, что ее будет достаточно. Устанавливаю на MacOS с помощью Homebrew:
brew install ffmpeg
Пакеты для других платформ можно найти здесь.
Чтобы продолжить движение этого проекта в рамках философии UNIX, я нашел инструмент для загрузки YouTube-видео из терминала — youtube-dl. С его помощью я удалил свое первое отрендеренное видео.
Утилита проста в использовании. Сперва запрашиваю доступные форматы для скачивания видео:
youtube-dl -F "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
После — получаю список:
[info] Available formats for dQw4w9WgXcQ:
format code extension resolution note
249 webm audio only tiny 46k , webm_dash container, opus @ 46k (48000Hz), 1.18MiB
250 webm audio only tiny 61k , webm_dash container, opus @ 61k (48000Hz), 1.55MiB
140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 3.27MiB
251 webm audio only tiny 129k , webm_dash container, opus @129k (48000Hz), 3.28MiB
...
398 mp4 1280x720 720p 657k , mp4_dash container, av01.0.05M.08@ 657k, 25fps, video only, 16.62MiB
399 mp4 1920x1080 1080p 1180k , mp4_dash container, av01.0.08M.08@1180k, 25fps, video only, 29.83MiB
248 webm 1920x1080 1080p 1556k , webm_dash container, vp9@1556k, 25fps, video only, 39.34MiB
137 mp4 1920x1080 1080p 3024k , mp4_dash container, avc1.640028@3024k, 25fps, video only, 76.45MiB
18 mp4 640x360 360p 343k , avc1.42001E, 25fps, mp4a.40.2 (44100Hz) (best)
Пометка best — это не лучший формат, а формат с заранее склеенным видео и аудио.
Выбираю нужный формат для видео — в моем случае webm (251) и mp4 (137). Чтобы не скачивать их по-отдельности, использую опцию сложения:
youtube-dl -f 137+251 "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
Не уверен, что она доступна для всех видео, — нужно проверять.
С подготовкой разобрались! Время создать скрипт.
Написание кода
Смена формата видео и размытый фон
Для этой задачи не нужно создавать отдельный скрипт. Решение будет выглядеть следующим образом:
ffmpeg -i video.mp4 -filter_complex \
"[0:v]scale=-1:1920,crop=1080:1920,gblur=sigma=20[bg]; \
[0:v]scale=1080:-1[ov]; \
[0:a]volume=1.0[audio];
[bg][ov]overlay=(W-w)/2:(H-h)/2[mix]" \
-map "[mix]" -map "[audio]" -r 60 result.mp4 -y
Команда запускает библиотеку FFMPEG, чтобы передать на вход файл video.mp4. Применяю к нашему потоку filter_complex. Ниже расскажу, какие фильтры я использовал.
Вторая строка скрипта пропорционально меняет ширину нулевого видеопотока 0:v на его длину scale=-1:1920. Обрезает видео до вертикального формата crop=1080:1920 и размывает фон gblur-sigma=20. После — возвращает преобразованное видео в новый поток bg.
Третья строка снова берет 0:v, пропорционально меняет его длину на ширину scale=1080:-1 и возвращает результат в новый поток ov.
Аналогично преобразовываю аудио, чтобы оно не исчезло. Возможно, получится сделать это намного проще, но напрямую аудиопоток в map не отправить. Поправьте в комментариях, если вы знаете другой способ.
В четвертой строке смешиваю потоки bg и ov и располагаю видео в центре экрана overlay=(W-w)/2:(H-h)/2. Результат перемещаю в mix. После — отправляю потоки в финальный файл при помощи -map"[mix]" -map "[audio]".
Выставляю 60 FPS и сохраняю результат в result.mp4. Флаг -y перезаписывает файл, если он уже существует.
Результат
Начало положено! Нам удалось сэкономить минуту работы ценой всего нескольких часов исследований. Разве это не прекрасно?
2. Нарезка видео
Если длительность видео превышает 60 секунд, то YouTube не пропустить его в раздел Shorts. Для этого нужно модифицировать предыдущий скрипт.
Более того, хочу нарезать видео не просто на куски по 60 секунд, а разделять их на логические части. В описании под видео есть проставленные таймкоды. Значит я могу просто скопировать этот текст и передать в скрипт, а он уже обрежет видео автоматически. Приступим!
Для таймкодов на YouTube использую следующий формат:
00:00 - Text
01:40 - Text2
Их легко можно преобразовать в массив секунд:
time_codes=()
while read -r line; do
minutes=${line:0:2}
seconds=${line:3:2}
minutes="$(printf "%.0f" "$minutes")"
seconds="$(printf "%.0f" "$seconds")"
time_codes+=("$(($minutes*60+$seconds))")
done < $2
Если расстояние между таймкодами больше 60 секунд, их нужно отредактировать. Конечно, можно автоматизировать это разбиение, но так я рискую обрывать видео на нелогичных моментах.
Далее смотрю на длительность видео с помощью команды ffprobe:
lengths=()
prev=
for key in "${!time_codes[@]}"; do
if [[ $key == 0 ]]; then
prev=${time_codes[$key]}
else
current=${time_codes[$key]}
length=$((current-prev))
lengths+=("$length")
prev=$current
fi
done
vid_len=$(ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 $1)
vid_len=${vid_len%.*}
length=$((vid_len-prev))
lengths+=("$length")
Теперь к рендерингу самих видео! Для этого модифицирую команду filter_complex:
for i in "${!lengths[@]}"; do
target="${1}_$(($i+1)).mp4"
ffmpeg -ss ${time_codes[$i]} -i $1 -filter_complex \
"[0:v]scale=-1:1920,crop=1080:1920,gblur=sigma=20[bg]; \
[0:v]scale=1080:-1[ov]; \
[0:a]volume=1.0[audio];\
[bg][ov]overlay=(W-w)/2:(H-h)/2[mix];" \
-map [mix] -map [audio] -t ${lengths[$i]} -r 60 $target -y
done
Здесь я добавил флаг -ss ${time_codes[$i]} для рендеринга с заданного момента в секундах, а также -t ${lengths[$i]}, который задает соответствующую длительность видео.
Отлично! Теперь видео подходят для раздела Shorts.
3. Добавление текста
Видео готово, осталось добавить текст. Сверху я буду выводить название видео и номер части, а снизу — призыв посмотреть полную версию. Центрировать текст не получится, поэтому приходиться генерировать каждую строку отдельно. Для удобства закину текст в файл с таймкодами и разобью его на две строки.
Далее модифицирую код, который считывает таймкоды:
name1=""
name2=""
time_codes=()
while read -r line; do
if [[ $name1 == "" ]]; then
name1=$line
elif [[ $name2 == "" ]]; then
name2=$line
else
minutes=${line:0:2}
seconds=${line:3:2}
minutes="$(printf "%.0f" "$minutes")"
seconds="$(printf "%.0f" "$seconds")"
time_codes+=("$(($minutes*60+$seconds))")
fi
done < $2
Создаю переменные для параметров текста:
text_size=80
margin_top=160
margin_bottom=320
line_spacing=100
font="$HOME/tools/Ubuntu/Ubuntu-Bold.ttf"
text_border=5
Теперь модифицируем команду для генерации клипов:
ffmpeg -ss ${time_codes[$i]} -i $1 -filter_complex \
"[0:v]scale=-1:1920,crop=1080:1920,gblur=sigma=20[bg]; \
[0:v]scale=1080:-1[ov]; \
[0:a]volume=1.0[audio];\
[bg][ov]overlay=(W-w)/2:(H-h)/2,\
drawtext=text='$name1':fontfile=$font:fontcolor=white:fontsize=$text_size:x=w/2-text_w/2:y=$margin_top\
:bordercolor=black:borderw=$text_border,\
drawtext=text='$name2':fontfile=$font:fontcolor=white:fontsize=$text_size:x=w/2-text_w/2:y=$margin_top+$line_spacing\
:bordercolor=black:borderw=$text_border,\
drawtext=text='Часть $(($i+1))':fontfile=$font:fontcolor=white:fontsize=$text_size:x=w/2-text_w/2:y=$margin_top+$line_spacing*2+20\
:bordercolor=black:borderw=$text_border,\
drawtext=text='Полное видео':fontfile=$font:fontcolor=white:fontsize=$text_size:x=w/2-text_w/2:y=h-$margin_bottom-$line_spacing\
:bordercolor=black:borderw=$text_border,\
drawtext=text='на канале':fontfile=$font:fontcolor=white:fontsize=$text_size:x=w/2-text_w/2:y=h-$margin_bottom\
:bordercolor=black:borderw=$text_border[mix];" \
-map [mix] -map [audio] -t ${lengths[$i]} -r 60 $target -y
Несмотря на большое количество кода, все довольно просто. В блоке с размытием фона появилось пять команд drawtext. У каждой есть текст, шрифт, цвет, размер, позиция по x, позиция по y, цвет и толщина обводки.
Результат.
Заключение
У меня получилось довольно удобное решение, которое уже не раз помогло мне сэкономить время. Некоторые строки я захардкодил, но это поправимо. Также планирую добавить выбор языка при помощи флага в shell-скрипте. Для русского все работает уже так.
Изначально у меня были мысли встроить в пайплайн загрузку готовых видео, но YouTube воспринимал их как спам и блокировал. Если у кого-то получилось адекватно автоматизировать данный процесс, делитесь своим опытом в комментариях. Буду очень благодарен.
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.
Концепт-арт с нового проекта! как вам?
Игра про котят, которые работают на фабрике про производству кошачьих игрушек и вкусняшек.