Skip to content

NeedForKillTheGame/nfk-videomaker

Repository files navigation

NFK Video Maker

Автоматизирует создание видео из демок для игры Need For Kill.

Набор из четырех утилит для развертывания на выделенном сервере (требуется видеокарта для запуска игры).

Заложена возможность параллельного запуска на разных серверах с передачей согласованных результатов на сайт статистики. Для этого достаточно изменить appid в config.xml.

Проект запущен на выделенном сервере и продюсирует видео от последних сыгранных игр на http://www.youtube.com/user/needforkilldemo

ndmscheduler

Запрашивает информацию о демке из API сайта статистики, скачивает файл демки запускает ndm2video.exe для создания из нее видео файла. При запуске не создает окон, предназначена для запуска по планировщику (раз в минуту с запретом дублирующего процесса).

  • управляет appid (увеличивает его в виде appidНОМЕР, если в папке уже есть json файлы с предыдущим номером appid)
  • скачивает демку с сайта статистики, для которой еще не создано видео, через определенный appid
  • запускает ndm2video с необходимыми параметрами столько раз, сколько игроков в демке - по одному видео от первого лица для каждого игрока
  • при успешном создании всех видео для всех игроков создает json файл с информацией о демке, иначе, если ndm2video завершился с ошибкой, — удаляет незаконченный видео файл

ndm2video

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

  • в autoexec.cfg добавляются команды в числе которых avi_start
  • запускается nfk.exe
  • при появлении первой картинки в basenfk, меняется следуемый игрок путем посыла нескольких команд nextplayer
  • здесь же запускается утилита ffmpeg с захватом видео из окна игры
  • по окончании проигрывания демки (время задается в параметрах запуска) nfk.exe убивается, а за ним и ffmpeg закрывается сам с готовым видео файлом
  • если в конфиге ParallelEncoding = false, то выполняются следующие раунды (кодирование и склеивание с видео заставкой)

ndmdecoder

Используется опционально для кодирования видео (запускает все раунды, кроме первого — запись видео делается через ndm2video). Уменьшается общее время создания видео за счет параллельного кодирования видео. Но для этого потребуется SSD, поскольку обычный диск не справится с одновременным записью и кодированием видео и в некоторых видео будут лаги. Консольная программа, может работать отдельно с параметрами запуска через командную строку. При запуске не создает окон, предназначена для запуска по планировщику (раз в минуту с запретом дублирующего процесса).

  • мониторит json файлы, если в json параметр demo.local_completed = false то выполняет дальнейшие шаги
  • если в конфиге ParallelEncoding = true, то кодирует все видео файлы, которые были сделаны через ndm2video (сжимает до приемлемого размера)
  • при успешном кодировании всех видео устанавливает demo.local_completed = true, иначе удаляет json файл, чтобы ndm2video дополнил недостающие видео

ndmuploader

Работает отдельно, загружает видео на Youtube. При запуске не создает окон, предназначена для запуска по планировщику (раз в минуту с запретом дублирующего процесса). Возможно добавить несколько заданий в планировщике, переименовав в разные файлы nfkuploader1.exe, nfkuploader2.exe, и т.д.

  • мониторит json файлы, читает из них информацию о демке, имена видео файлов для закачки на YouTube; если в json параметр demo.local_completed = true то выполняет дальнейшие шаги

  • загружает файл демки на файловый хостинг mega.co.nz

  • загружает видео файлы на YouTube, в описание вставляется информация о демке, ссылка на сайт статистики и ссылка на скачивание файла демки с mega.co.nz

  • по окончании загрузки посылает YouTube ссылки на сайт статистики

  • по окончании загрузки выполняет команду из опции конфига YoutubeUploadCompleteExec (по-умолчанию записывает текст в message.txt)

Irc bot, запускается отдельно в качестве службы.

  • message.lua плагин, в новом потоке проверяет файл message.txt на обновления
  • при обнаружении изменения файла добавляет в очередь текст из файла, и через 20 минут посылает его на канал #nfk (с задержкой — чтобы видео успелось обработаться на Youtube)
  • дополнительно, с запуском раз в 5-10 минут, в планировщик можно добавить Powershell скрипт planetchecker.ps1, он будет отправлять сообщение на канал #nfk через irccdctl.exe, когда на NFK планете в игре не хватает одного игрока