Open Abraaozuza opened 5 years ago
Olá Abraaozuza! no seu caminho do Effect: "const aerenderFilePath =C:/Program Files/Adobe/Adobe After Effects CC 2019/Support Files/aerender.exe'
eu coloquei com duas barras assim: const aerenderFilePath = 'C:\\Program Files\\Adobe\\Adobe After Effects CC 2019\\Support Files\\aerender.exe'
Quando vou a pasta content do projeto vide-maker, está lá tudo, mas enquanto ao vídeo estou com o mesmo problema que o seu! :(
@jprodrigues1981 tipo, não está criando o arquivo output.mov ?
está sim @Abraaozuza, não estou é conseguindo estabelecer o consentimento com o loguin para o youtube, está a dizer que o local host 5000 já está a ser utilizado! :-/
@jprodrigues1981 seu erro diz address already in use :::5000 essa porta ja esta sendo usada no seu pc, você precisa apontar outra porta
@jprodrigues1981 Posso abusar ao pedir duas coisas de você? 1) Você poderia me enviar um print de quando o seu robô abre o After Effects? Tentei novamente, e o arquivo output.mov não foi criado. To me sentindo num beco sem saída. 2) O código do seu robô para comparar com o meu.
Quanto ao código do robô, só mudei aquilo que você falou mesmo. Eu já tinha tentado desta forma antes e tb não gerou o output.mov :( :( :( video.js.txt
[const gm = require('gm').subClass({imageMagick: true}) const state = require('./state.js') const spawn = require('child_process').spawn const path = require('path') const rootPath = path.resolve(__dirname, '..')
async function robot() { console.log('> [video-robot] Starting...') const content = state.load()
await convertAllImages(content) await createAllSentenceImages(content) await createYouTubeThumbnail() await createAfterEffectsScript(content) await renderVideoWithAfterEffects()
state.save(content)
async function convertAllImages(content) { for (let sentenceIndex = 0; sentenceIndex < content.sentences.length; sentenceIndex++) { await convertImage(sentenceIndex) } }
async function convertImage(sentenceIndex) {
return new Promise((resolve, reject) => {
const inputFile = ./content/${sentenceIndex}-original.png[0]
const outputFile = ./content/${sentenceIndex}-converted.png
const width = 1920
const height = 1080
gm()
.in(inputFile)
.out('(')
.out('-clone')
.out('0')
.out('-background', 'white')
.out('-blur', '0x9')
.out('-resize', `${width}x${height}^`)
.out(')')
.out('(')
.out('-clone')
.out('0')
.out('-background', 'white')
.out('-resize', `${width}x${height}`)
.out(')')
.out('-delete', '0')
.out('-gravity', 'center')
.out('-compose', 'over')
.out('-composite')
.out('-extent', `${width}x${height}`)
.write(outputFile, (error) => {
if (error) {
return reject(error)
}
console.log(`> [video-robot] Image converted: ${outputFile}`)
resolve()
})
})
}
async function createAllSentenceImages(content) { for (let sentenceIndex = 0; sentenceIndex < content.sentences.length; sentenceIndex++) { await createSentenceImage(sentenceIndex, content.sentences[sentenceIndex].text) } }
async function createSentenceImage(sentenceIndex, sentenceText) {
return new Promise((resolve, reject) => {
const outputFile = ./content/${sentenceIndex}-sentence.png
const templateSettings = {
0: {
size: '1920x400',
gravity: 'center'
},
1: {
size: '1920x1080',
gravity: 'center'
},
2: {
size: '800x1080',
gravity: 'west'
},
3: {
size: '1920x400',
gravity: 'center'
},
4: {
size: '1920x1080',
gravity: 'center'
},
5: {
size: '800x1080',
gravity: 'west'
},
6: {
size: '1920x400',
gravity: 'center'
}
}
gm()
.out('-size', templateSettings[sentenceIndex].size)
.out('-gravity', templateSettings[sentenceIndex].gravity)
.out('-background', 'transparent')
.out('-fill', 'white')
.out('-kerning', '-1')
.out(`caption:${sentenceText}`)
.write(outputFile, (error) => {
if (error) {
return reject(error)
}
console.log(`> [video-robot] Sentence created: ${outputFile}`)
resolve()
})
})
}
async function createYouTubeThumbnail() { return new Promise((resolve, reject) => { gm() .in('./content/0-converted.png') .write('./content/youtube-thumbnail.jpg', (error) => { if (error) { return reject(error) }
console.log('> [video-robot] YouTube thumbnail created')
resolve()
})
})
}
async function createAfterEffectsScript(content) { await state.saveScript(content) }
async function renderVideoWithAfterEffects() {
return new Promise((resolve, reject) => {
const aerenderFilePath = 'C:\Program Files\Adobe\Adobe After Effects CC 2019\Support Files\aerender.exe'
const templateFilePath = ${rootPath}/templates/1/template.aep
const destinationFilePath = ${rootPath}/content/output.mov
console.log('> [video-robot] Starting After Effects')
const aerender = spawn(aerenderFilePath, [
'-comp', 'main',
'-project', templateFilePath,
'-output', destinationFilePath
])
aerender.stdout.on('data', (data) => {
process.stdout.write(data)
})
aerender.on('close', () => {
console.log('> [video-robot] After Effects closed')
resolve()
})
})
}
}
module.exports = robot](url)
No meu ficou tudo igual, apenas modifiquei o caminho como te tinha dito, já foste na pasta do projeto e na pasta content e não está lá o mov? observando o seu ultimo print ele está gerando, no meu caso já consegui, modifiquei a porta de 5000 para 6000 no projeto na parte do video e gerei nova api no cloud, Obrigado @hebertlima
no caminho coloque duas barras como mostra no print "'C:\Program Files\Adobe\Adobe After Effects CC 2019\Support Files\aerender.exe'" espero que ajude ;)
Então, @jprodrigues1981 obrigado por compartilhar! O que acontece é que eu vou na pasta content e o output.mov nunca está lá, e a partir disso é que não tá funcionando pra mim.
vou comparar já já, estou terminando de ver um conteúdo, tenho prova amanhã
@Abraaozuza Conseguiu resolver? Posso fechar a issue? Em 15 dias sem resposta do autor irei fechar, caso necessário posso abrir novamente.
Também parece um erro mais profundo, merece ser investigado e ter guards.
@Abraaozuza Conseguiu resolver? Posso fechar a issue? Em 15 dias sem resposta do autor irei fechar, caso necessário posso abrir novamente.
Não consegui resolver, nem encontrar uma solução
Hoje, dia 31 de dezembro, ainda estou com o mesmo problema, não consigo criar o arquivo output.mov
Boa noite, pessoal! Eu acredito que em todas as etapas está indo tudo bem, com exceção de um detalhe essencial que não consegui encontrar solução ainda. O robô não está gerando o arquivo output.mov, Ele retorna este erro
eu também tentei modificar o caminho de saída no template, mas o After Effects me retorna isto aqui
e procurei tomar cuidado com a indexação dos caminhos no video.js conforme anexei abaixo,
video.js.txt
mas até agora ele simplesmente não gera o output.mov alguém saberia me dar uma luz?