IPB

Здравствуйте, гость ( Вход | Регистрация )

 ??????? ????? ?????? Правила поведения на форуме. Несоблюдение правил карается.
 
???????? ? ??? ??????????? ????? ????
Захват видео из q3mme 1.6 с помощью скрипта, для мувмейкеров
uN*DeaD!HOX
сообщение 15.08.2010 - 23:10
Сообщение #1





Группа: Пользователи
Сообщений: 595
Регистрация: 6.04.2010
Пользователь №: 4137



Может кто будет делать мувик, пригодиться статейка.
Капчурить в q3mme достаточно долго каждое видео по отдельности, особенно с максимальным качеством блюрфрейма. Поэтому был сделан скрипт, который достаточно один раз запустить, например на ночь, а утром все демки будут преобразованы в видео.
Оригинал Инструкции по использованию скрипта здесь. Однако там на английском и без подробностей, поэтому я переписал на русский более понятно.
Но сразу оговорюсь, мой скрипт работает не до конца, он только капчурит, а изначально он еще может не только капчурить, но и преобразовывать в AVI, если закапчурить в TGA. Но я капчурю в TGA и сразу вставляю в Sony Vegas как секвенцию, т.е. последовательность файлов и этого достаточно.

Итак, для начала потребуется готовый проект q3mme с указанием границ времени.
Чтобы создать простейший проект, нужно:
1. Запустить демку
2. Нажать 3 - редактирование Line
3. Перемотать на начало нужного момента и нажать T
4. Перемотать на конец нужного момента и нажать G
5. Написать в консоли Save имя_проекта имя_списка_проектов, например save 1 list.txt, чтобы по быстрому. Тогда создаться текстовый файл list.txt со строкой данного проекта
Файл проекта сохраняется в папке Project как обычный текстовый файл
Далее можно загрузить другую демку, написать тоже save 1 list.txt и в лист добавиться новая демка с проектом 1 и ляжет в отдельную папку в папке Project.
p.s. Кстати, загрузив заного демку и написав в консоли load 1, можно загрузить этот проект и продолжить работать над ним.

Теперь самое главное, лист с проектами готов, его нужно закапчурить скриптом:

1. Подготовка к запуску.
Скрипт написан с помощью программы Microsoft Powershell. И для его запуска прийдется установить её.
Скачать можно с офф. сайта: http://www.microsoft.com/windowsserver2003...l/download.mspx
После установки, её надо запустить и настроить, т.к. по умолчанию она не запускает не подпписанные скрипты ради безопасности. Чтобы разрешить ей выполнить наш скрипт, надо прописать set-executionpolicy remotesigned и нажать enter. Теперь её можно закрыть.

2. Корректировка готового скрипта.
Скрипт уже написан, его нужно только подправить под себя, прописав пути к q3mme.
У меня для q3mme лежит отдельный квейк, папка с которым называется q3mme, а диск V:\ Вот это и надо подправить под себя.
Мой скрипт:
Код
    #===============DEFINE================= v 1.4
     $demolist = "v:\q3mme\mme\dl10.txt"
     $mmePath = "v:/q3mme/mme/capture"
     $mme = "v:/q3mme/mme"
     $basepath = "v:/q3mme"
     $mmeSavePath = "v:/q3mme/avi"
     $mmeRunSettings = "v:/q3mme/mme/ps/mmeRunSettings.txt"
     $virtualDubPath = "C:\Program Files (x86)\VirtualDub"
     $virtualDubSetting = "v:\q3mme\mme\ps\defaultVD.txt"
     $imageType = "tga" #jpg, tga, pgn, *, anything u want
     #======================================
     Get-Date
     $i = 1; $notFound = 0; $currentpath = Get-Location; $runSettings = gc $mmeRunSettings
     Write-Host "`n Q3MME RUN SETTING: `n $runSettings `n"

     foreach
     ($vrstica in Get-Content $demolist)
     {
     $parse = $vrstica.Split(""""); $path = $parse[1]; $project = $parse[3]

     #=============== RUN Quake3MME CAPTURE ===============
     Write-Host "`n== $i == Quake3MME CAP ====" -f green
     Write-Host "DEMO: $path `nPROJECT: $project"
     sc $mme/xgoDL.txt $vrstica #.Substring(0,$foo.LastIndexOf("\"))
     $p = [diagnostics.process]::Start("v:\q3mme\quake3mme.exe", "$runSettings +set fs_basepath $basepath +demolist xgoDL.txt +set mme_demoListQuit 1")
     $p.WaitForExit()

     $firstImage = ""; $firstImage = dir $mmePath$path/$project*.$imageType -name

     if($firstImage -eq $null)
     {
     $notFound++
     Write-Host ====== COULDNT FIND IMAGE FILE $notFound ****** ======
     Write-Host $mmePath$path/$project*.$imageType -name
     }
     else
     {
     $firstImage = $firstImage[0]
     $wavFile = dir $mmePath$path/$project.wav -name

     #=============== CREATE VirtualDub SCRIPTO ===============
     $aviPath = $path.Substring($path.LastIndexOf("/")+1)
     $defaultVD = Get-Content $virtualDubSetting

     $scripta = "VirtualDub.Open(U""$mmePath$path/$firstImage"", """", 0);
     VirtualDub.audio.SetSource(U""$mmePath$path/$wavFile"");
     $defaultVD
     VirtualDub.SaveAVI(U""$mmeSavePath/$aviPath-$project.avi"");
     "

     #=============== WRITE VirtualDub SKRIPTO ===============
     $scripta | Out-File $virtualDubPath\VirtualDubMod.jobs -encoding "ASCII"
     Write-Host " "
     Write-Host "VdScripta: " -f yellow
     Write-Host CAP DIR: $mmePath$path
     Write-Host IMAGE: $firstImage
     Write-Host WAV: $wavFile
     Write-Host SAVE: $mmeSavePath/$aviPath.avi
     Write-Host " "
     #================ $i. RUN VirtualDub SKRIPTO =================
     cd $virtualDubPath
     .\vdub.exe /s VirtualDubMod.jobs
     cd $currentpath

     #============== DELETE CAPTURE IMAGES =================
     #CAREFULL WITH THIS ONE
     #Write-Host "`n==== DELETING ====" -f red
     #Write-Host "dir" $mmePath$path/$project*.$imageType
     #Remove-Item $mmePath$path/$project*.$imageType

     $i++
     }
     Write-Host "==========================================================`n"
     }
     Write-Host "`n==== Number of not found image files: $notFound ====`n" -f red
     Get-Date

Его нужно полностью скопировать, создать у себя текстовый файл с именем captureAvi.ps1 и вставить туда этот текст скрипта, после чего подправить пути.

$demolist = "v:\q3mme\mme\dl10.txt" - это лист с проектами, например list.txt
В нем должен быть список проектов, например:
"/demo0001" "1"
"/demo0002" "1"
А в папке project должны были создаться папки demo0001 с файлами проектов 1.cfg

$mmePath = "v:/q3mme/mme/capture" - сюда будут капчуриться проекты, если папки capture нет, её нужно обязательно создать.
Дальше думаю понятно все что нужно исправить.
$mmeSavePath = "v:/q3mme/avi" - это на случай если потом пережимать в avi, лучше тоже создать эту папку на всякий случай.

$mmeRunSettings = "v:/q3mme/mme/ps/mmeRunSettings.txt" - это файл с настройками, которые будут импортироваться перед началом захвата.
Мои например такие:
+set fs_game mme +set fs_extraGames defrag +set mme_renderWidth 1280 +set mme_renderHeight 720
fs_extraGames - можно указать любой мод, например osp, смотря с каким работа идет.
+set mme_renderWidth 1280 +set mme_renderHeight 720 - это очень важные параметры. Какого формата мы хотим захватить видео. Капчурить скрипт может в любом разрешении, т.к. захват идет в фоновом режиме. Сейчас стандарт 720р наиболее оптимальный, поэтому я рендерю всегда в нем, но это дело каждого.
Важное дополнение: т.к. скрипт записывает в конфиг mme_renderWidth 1280 +set mme_renderHeight 720, то зайти в q3mme будет проблематично, он будет запускаться также в фоновом режиме. Поэтому в запускной файл, обычно это quake3mme.start.cmd стоит дописать +set mme_renderWidth "0" +set mme_renderHeight "0"
+set r_multisample 8 - Для видеокарт ATI уровень сглаживаия ступенек, чтобы не было ступенчатости на углах геометрии. Если видеокарта Nvidia, то нужен другой параметр: seta r_multiSampleNvidia "8"
Самое значение зависит от параметров видеокарты, если параметр сбрасывается а видео лесенкой, значит видеокарта не тянет такое число, надо глянуть в видеодрайвере сколько максимум, например, если 4, то надо 4 поставить.
+set r_anisotropy 16 - уровень анизотропной фильтрации текстур, для большей четкости текстур. Опять же зависит от видеокарты конкретное число.
+set r_picmip 0 - отключить размывку текстур, на всякий случай.

$virtualDubPath = "C:\Program Files (x86)\VirtualDub" не понадобиться если не переводить секвенцию в AVI

$virtualDubSetting = "v:\q3mme\mme\ps\defaultVD.txt" - настройки для перевода в AVI, тоже не понадобятся, но вот дефолт:

Код
VirtualDub.audio.SetMode(0);
VirtualDub.audio.SetInterleave(1,500,1,0,0);
VirtualDub.audio.SetClipMode(1,1);
VirtualDub.audio.SetConversion(0,0,0,0,0);
VirtualDub.audio.SetVolume();
VirtualDub.audio.SetCompression();
VirtualDub.audio.EnableFilterGraph(0);
VirtualDub.video.SetInputFormat(0);
VirtualDub.video.SetOutputFormat(7);
VirtualDub.video.SetMode(3);
VirtualDub.video.SetSmartRendering(0);
VirtualDub.video.SetPreserveEmptyFrames(0);
VirtualDub.video.SetFrameRate2(50,1,1);
VirtualDub.video.SetIVTC(0,0,-1,0);
VirtualDub.video.SetCompression(0x75796668,0,10000,0);
VirtualDub.video.filters.Clear();
VirtualDub.video.filters.Add("resize");
VirtualDub.video.filters.instance[0].Config(50,50,1,4,3,1,320,240,4,3,0,7,1,0x000000);
VirtualDub.video.filters.Add("sharpen");
VirtualDub.video.filters.instance[1].Config(22);
VirtualDub.audio.filters.Clear();


$imageType = "tga" #jpg, tga, pgn, *, - в каком формате производить захват видео. Оптимально в tga

$p = [diagnostics.process]::Start("v:\q3mme\quake3mme.exe", "$runSettings +set fs_basepath $basepath +demolist xgoDL.txt +set mme_demoListQuit 1") - путь к quake3mme.exe и запуск демолиста xgoDL.txt, теоретически должен сам создаваться на базе dl10.txt - листа с проектами

По сути это все настройки. Если кто разберется с переводом в AVI с помощью скрипта, объясните.

Мой скрипт, который возможно содержит ошибку:
captureLenght.ps1

Код
#===============DEFINE================= v 1.3
$demolist = "v:/q3mme/mme/dl10.txt"
$mmePath = "v:/q3mme/mme"
$oneFrame = 1.5 #size in MB
$fps = 50
$oneSecCapture = 20 #in sec for 1 second capture footage
$compressionTime = 5.8 #in sec for 1 sec captured footage
#======================================
$sum = 0
foreach
($vrstica in Get-Content $demolist)
{
$parse = $vrstica.Split(""""); $path = $parse[1]; $project = $parse[3]
$parser = "<", ">"

$file = Get-Content $mmePath/project$path/$project.cfg

foreach($text in $file)
{
if($text.IndexOf("<start>") -gt 0) {
$start = $text.Split($parser)[2]
}

if($text.IndexOf("<end>") -gt 0) {
$end = $text.Split($parser)[2]; break
}
}
$sum = $sum + ([int]$end - [int]$start)
}
$sec = $sum/1000
$min = $sum/60000

Write-Host Sec: $sec ::or:: Min: $min
Write-Host FPS = $fps :: One frame size = $oneFrame MB
Write-Host SIZE: ($sec*$fps*$oneFrame) MB
Write-Host Capture time: ([int]($sec*($oneSecCapture)/60)) min ::or:: (([int]($sec*($oneSecCapture)/36)/100)) hours
Write-Host Compression time: ([int]($compressionTime*$sec/60)) min


Нужно также создать текстовый файл captureLenght.ps1 и туда кинуть текст. Когда все отрендерено в tga, то теоретически, запустив этот скрипт, оно переведет в AVI.
Но это не нужно. Можно прямо в вегасе нажать открыть, выбрать первый файл из последовательности tga и поставить внизу галочку "открыть как диапазон". FPS можно выставить максимум 60. А капчурят обычно больше для лучшего качества моушн блюра. Поэтому тут надо рассчитать. Допустим я имортирую tga с FPS 30, проект у меня 30, а захват был с FPS 120. Поэтому я иду в свойства файла в вегасе и в поле Playback rate ставлю 4, чтобы ускорить видеоряд в 4 раза, тогда получиться правильная скорость.

3. Запуск.
Теперь на файл captureAvi.ps1 достаточно нажать правой кнопкой и выбрать - выполнить с помощью PowerShell, скрипт запуститься, его можно оставить на ночь, если там очень много и качественно настроено, а утром будет все готово smile.gif
Правда если запускать скрипт правой кнопокой, то в конце,либо в случае неудачи программа PowerShell закроется. Поэтому лучше запустить программу PowerShell из меню пуск, перетащить файл captureAvi.ps1 на это окно и нажать enter. Если будет ошибка, он скажет что именно неполучается. Если ничего не понятно, надо проверить настройки более внимательно.
p.s. Квейк во время захвата запускается в фоне, видна только консоль, это удобно, но гамма бывает глючит, повышается. У меня например на видеокарте ATI такое есть. Поэтому если я хочу капчурить днем, а не ночью, то когда гамма измениться на рабочем столе, я иду в настройки драйвера Catalyst, вкладка Графика - цвет и нажимаю кнопку Включить элементы управления цветом ATI. На NVIDIA возможно по другому

Сообщение отредактировал uN*DeaD!HOX - 16.08.2010 - 11:01


--------------------
????????? ? ?????? ????????
+???????? ? ???????????? ??????? ?????????
glm
сообщение 15.08.2010 - 23:14
Сообщение #2


Strf0r


Группа: Модераторы
Сообщений: 4376
Регистрация: 11.06.2005
Из: Санкт-Петербург
Пользователь №: 741



Полезная статья, прилепил.
Правда ещё пока не читал, попозже изучу, если соберусь делать чего-нибудь smile.gif


--------------------
Весна покажет, кто где срал!
????????? ? ?????? ????????
+???????? ? ???????????? ??????? ?????????
GT-Agressor
сообщение 16.08.2010 - 08:30
Сообщение #3


Team defrag.ru: mapper


Группа: Пользователи
Сообщений: 1971
Регистрация: 10.05.2004
Из: Пермь
Пользователь №: 176



Сурово!


--------------------
GT-Team site: http://admdefrag.narod.ru
http://gt-team.blog.ru

Все по разработке Q3Bers лежит тут: http://q3bers.nm.ru

инфо по Q3Bers http://wiki.quakegate.ru/q3bers

PS а почему у моего профиля больше всего просмотров? Что там интересного? Смотрел, не понял :)

PSS Зависаю в танках - GTAgressor
????????? ? ?????? ????????
+???????? ? ???????????? ??????? ?????????
Nolakor
сообщение 30.03.2017 - 20:26
Сообщение #4





Группа: Пользователи
Сообщений: 8
Регистрация: 30.03.2017
Пользователь №: 4603



Отличная статья! Спасибо, думаю, пригодится!
????????? ? ?????? ????????
+???????? ? ???????????? ??????? ?????????

???????? ? ??? ??????????? ????? ????
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 21.10.2017 - 19:36
  Рейтинг@Mail.ru   Rambler's Top100