Перейти к содержимому



  • Вы не можете создать новую тему
  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1
OFFLINE   metal_01

metal_01

    Member

  • Пользователи
  • PipPip
  • 92 сообщений

Практически постоянно рендерю файлы из командной строки (aerender`ом), и в 95% случаев все проходит нормально, но иногда по непонятным причинам рендер прерывается. И ведь ладно бы если б прерывался с ошибкой, но и в логах и звучек - типа все нормально.. отрендерит пару кадров и типа все.. файл закончился

Можно ли как нибудь проверить файл из командной строки на длительность например, т.к. при запуске aerender всегда выдает информацию о duration

 

92265635c7ee.png


Сообщение отредактировал metal_01: 05 Июль 2017 - 10:06


#2
OFFLINE   metal_01

metal_01

    Member

    Топикстартер
  • Пользователи
  • PipPip
  • 92 сообщений

итак отвечу сам себе и подведу итог долгой дискуссии со специалистом.

 

т.к. при рендере создается лог со временем затраченным на каждый кадр и последней строчкой идет не длительность, как я ошибочно полагал, а последний кадр рендера (логично, да?), то было решено вытащить её в батник и сравнивать его с последним кадром рендера в логе. на деле это выглядит так:

конец лога лога:

  0:00:29:23 (749): 0 Seconds
  0:00:29:23 (749): 1 Seconds
  0:00:29:24 (750): 0 Seconds
  0:00:29:24 (750): 34 Seconds
  22.07.2017 14:57:11: Finished composition “Comp 1”.
 
и там всегда присутствует таймкод и (,(  0:00:29:24 ( ), поэтому и надо сравнивать на жесткое совпадение с этим.
но тут выяснилась еще одна проблема: javascript не умеет сохранять файл с кодировкой OEM 866 (это нужно для правильного отображения кириллицы и работы внутренних программ сравнения и поиска)... в итоге решили сохранить в "ANSI" и потом уже средствами самого батника перекодировать файл.
 
в конечном итоге получился вот такой батник:
@ECHO OFF
SETLOCAL EnableExtensions
if "%~1" neq "" goto begin
chcp 1251
cmd /d /a /c set /p=яю<NUL > .tmp
cmd /d /u /c type "%~fs0" >> .tmp
chcp 866
cmd /d /a /c type .tmp > "%~dp0%~n0_866.cmd"
del .tmp
call "%~dp0%~n0_866.cmd" 866
del "%~f0" & exit /b
:begin
set "aeFolder=C:\Program Files\Adobe\Adobe After Effects CC 2014\Support Files"
set "TimeStamp=0:00:04:24"
ECHO.
ECHO.BG Renderer
ECHO.
ECHO.Launching aerender...
:BeginRender
set /a try+=1
title 333 (%try%)
START "RENDERING: 333" /B /WAIT /D "%aeFolder%" aerender.exe -mp -project "D:\Темповая папка\333.aep" -sound ON
for /f "delims=" %%a in ('dir /b /a-d /od "%~dp0333.aep Logs\AE*.txt"') do set log=%%a
findstr /RC:"^  %TimeStamp% \(" "%~dp0333.aep Logs\%log%" || goto BeginRender
RMDIR "D:\Темповая папка\333.aep Logs" /s /q
del "D:\Темповая папка\333.aep"
del "D:\Темповая папка\333.xmp"
del "%~f0"

если кому интересно само обсуждение и больше деталей можно посмотреть тут

 

а я пока буду тестировать рендер



#3
OFFLINE   metal_01

metal_01

    Member

    Топикстартер
  • Пользователи
  • PipPip
  • 92 сообщений

проблема с кодировкой решена. в java script нет OEM866 зато есть IBM866, и это тоже самое. теперь все кириллические буквы будут отображаться правильно.

в общем вот кусочек скрипта, который отвечает за создание батника

var aeSupFilesPath = Folder.appPackage.fsName; // папка с программой, т.е. папка, где находиться файл запуска программы? 
var fr=timeToCurrentFormat((app.project.activeItem.workAreaStart+app.project.activeItem.workAreaDuration-(1/app.project.activeItem.frameRate)),app.project.activeItem.frameRate);
	var renderStr = new Array ("@ECHO OFF", "SETLOCAL EnableExtensions"); 
	renderStr.push("set \"aeFolder="+aeSupFilesPath+"\""); //папка, где находиться файл запуска after effect 
	renderStr.push("set \"TimeStamp="+fr.substring(1,fr.length)+"\""); //переменная, время последнего кадра рендера 
	renderStr.push(":BeginRender"); 
	renderStr.push("ECHO.", "ECHO.BG Renderer", "ECHO.",); 
	renderStr.push("ECHO.Launching aerender...", ":BeginRender"); 
	renderStr.push("set /a try+=1"); 
	renderStr.push("title " + nameFile+" (%try%)"); //название командной строки берется из названия файла 
	renderStr.push("START \"RENDERING: " + nameFile + "\" /B /WAIT /D \"" + "%aeFolder%\"" + " aerender.exe -mp -project \"" + newaepPathName + "\""+ " -sound ON"); 
	renderStr.push("for /f \"delims=\" %%a in ('dir /b /a-d /od \"%~dp0"+nameFile+".aep Logs\\AE*.txt\"') do set log=%%a"); 
	renderStr.push("findstr /RC:\"^ %TimeStamp% \\(\" \"%~dp0"+nameFile+".aep Logs\\%log%\" || goto BeginRender"); 
	renderStr.push("RMDIR " + "\""+pathFile+"\\"+nameFile+".aep Logs\"" + " /s /q"); //удаляет папку с логами 
	renderStr.push("del \"" + pathFile+"\\"+nameFile+".aep\""); //удаляет сам файл проекта 
	renderStr.push("del \"" + pF_target+"\\"+nameFile+".xmp\""); //удаляет файл ненужный XMP 
	renderStr.push("del /f /a \"%~f0\""); // самоуничтожение .cmd //все, все строки готовы, осталось их записать в файл cmd 
	var pathCmd = pathFile + "\\"+ nameFile + ".cmd"; //прописываем путь, куда будем сохранять cmd файл, и имя файла 
	var cmdFile = new File(pathCmd); //создаем cmd файл в папке с проектом и названием как у проекта 
	cmdFile.encoding = "IBM866"; //устанавливаем кодировку "OEM866". 
	cmdFile.open('w'); //открываем только что созданный файл для записи 
	for (var i = 0; i < renderStr.length; i++) { //вписываем построчно весь массив 
		renderStr cmdFile.writeln(renderStr[i]); } 
	cmdFile.close(); //закрываем файл 
	cmdFile.execute(); //исполняем файл, т.е. запускам.


Сообщение отредактировал metal_01: 20 Август 2017 - 11:02

  • monter это нравится




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных