filipedeschamps / video-maker

Projeto open source para fazer vídeos automatizados
MIT License
2.44k stars 630 forks source link

Problemas com o video.js ou output.mov #179

Open Abraaozuza opened 5 years ago

Abraaozuza commented 5 years ago

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

ERRO 7

eu também tentei modificar o caminho de saída no template, mas o After Effects me retorna isto aqui

ERRO AFTER EFFECTS

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?

jonaspereirar commented 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! :(

Abraaozuza commented 5 years ago

@jprodrigues1981 tipo, não está criando o arquivo output.mov ?

jonaspereirar commented 5 years ago

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! :-/ image

hebertlima commented 5 years ago

@jprodrigues1981 seu erro diz address already in use :::5000 essa porta ja esta sendo usada no seu pc, você precisa apontar outra porta

Abraaozuza commented 5 years ago

@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.

Erro sei lá qual

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

jonaspereirar commented 5 years ago

[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

jonaspereirar commented 5 years ago

image 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 ;)

Abraaozuza commented 5 years ago

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.

Abraaozuza commented 5 years ago

vou comparar já já, estou terminando de ver um conteúdo, tenho prova amanhã

matbrgz commented 5 years ago

@Abraaozuza Conseguiu resolver? Posso fechar a issue? Em 15 dias sem resposta do autor irei fechar, caso necessário posso abrir novamente.

leodutra commented 5 years ago

Também parece um erro mais profundo, merece ser investigado e ter guards.

Abraaozuza commented 5 years ago

@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

Abraaozuza commented 4 years ago

problema Hoje, dia 31 de dezembro, ainda estou com o mesmo problema, não consigo criar o arquivo output.mov