Meu primeiro fluxo de trabalho n8n: YouTube - download automático - alerta Telegram

Oi pessoal! Algumas semanas atrás me apresentei aqui e vocês sabem que sou operador de maquinaria pesada me ensinando automação nas noites, e hoje à noite terminei meu primeiro workflow funcionando:
RSS Feed Trigger monitora um canal do YouTube
Execute Command executa yt-dlp para baixar o vídeo novo
Bot do Telegram me envia o título, o link e o caminho do arquivo

Chegar lá foi uma luta: problemas de versão do Node, restrições de acesso a arquivos do n8n 2.x, e o limite de 50 MB do Telegram para bots, que contornei enviando uma notificação em vez do arquivo.

Próximo passo: cortar o vídeo longo em clipes curtos automaticamente (ffmpeg e IA para escolher os melhores momentos)

Alguma dica sobre como você abordaria a parte de corte??
Fico feliz em compartilhar o JSON do workflow se for útil

1 curtida

Boa pergunta - o truque na etapa de recorte é obter os timestamps da fonte em vez de deixar o modelo inventá-los, porque timestamps alucinados são o que geralmente quebra isso. Puxe as legendas automáticas com yt-dlp --write-auto-subs --sub-format vtt (ou execute Whisper no áudio quando as legendas forem ruins), reformate o VTT em segmentos numerados com seus verdadeiros segundos de início/fim, e faça o LLM retornar apenas os ids de segmento que ele acha que valem a pena destacar. Mapeie esses ids de volta para segundos e corte com ffmpeg: -ss/-to depois de -i é preciso em nível de frame mas re-codifica, antes de -i é rápido mas se ajusta ao keyframe mais próximo. Um único passe vertical fica assim: ffmpeg -i in.mp4 -ss 12.4 -to 47.0 -vf "crop=ih*9/16:ih,scale=1080:1920" -c:v libx264 -crf 20 -c:a aac out.mp4. Duas coisas que economizam muita dor de cabeça: trate os timestamps da transcrição como a fonte de verdade para cada corte, e verifique renderizando um clipe de verdade em vez de confiar no resumo do modelo sobre um.

1 curtida

Um iniciante quer cortar vídeos baixados em clips automaticamente. Uma resposta aborda a escolha de timestamps, então esta cobre como construir o fluxo de trabalho.

Parabéns pelo primeiro fluxo de trabalho funcionando! O HomelabAgent cobriu a escolha dos timestamps; aqui está como eu organizaria o lado do n8n:

  • Coloque o corte em seu próprio sub-fluxo de trabalho. O fluxo de trabalho RSS passa apenas o caminho do arquivo. Se um corte falhar, você pode executar novamente o corte sem baixar novamente.
  • Fique atento aos timeouts. ffmpeg e transcrição podem levar minutos. Execute um Execute Command por clip (Loop Over Items) em vez de um comando gigante.
  • Fixe dados durante os testes. Fixe a saída da transcrição/LLM para que você possa ajustar a etapa ffmpeg sem pagar pela chamada de IA a cada execução.
  • Verifique o código de saída. Faça cada comando escrever em um caminho previsível, verifique se o arquivo existe antes de enviar para o Telegram e direcione as falhas para um Fluxo de Trabalho de Erro.
  • O limite de 50 MB do Telegram também se aplica aos clips, então adicione limites -crf/-b:v ou continue enviando caminhos/links.
1 curtida

Para um fluxo de trabalho como este pela primeira vez, eu manteria a IA fora da primeira versão.

  1. Baixe o vídeo conforme planejado, depois execute uma passagem simples de detecção de cena ffmpeg (por ex. select=gt(scene,0.3) ou similar) para obter os limites de clipe candidatos. Faça isso como seu próprio passo Execute Command / Code para que você possa inspecionar os cortes antes de qualquer outra coisa ser executada.
  2. Só depois que você gostar da lista de clipes, passe esses segmentos (ou suas miniaturas / trechos curtos) para um nó de IA se ainda quiser títulos ou um resumo. Colocar IA no arquivo inteiro primeiro é geralmente mais lento e mais caro, e os cortes são mais difíceis de depurar.
  3. Fique atento ao acesso a arquivos do n8n 2.x: mantenha os downloads em uma pasta que a instância tem permissão de leitura/escrita, e passe os caminhos explicitamente entre os nós em vez de assumir um diretório temporário compartilhado.

Se você colar uma lista aproximada de nós (ou onde isso falha atualmente), posso sugerir um layout mais otimizado.

Oi @alberteddu , respeito por levar uma primeira versão até funcionar direitinho, as versões do node e a sandbox de arquivo 2.x e o limite de 50 MB do Telegram mordem iniciantes de uma vez e você conseguiu passar por todos eles. Na questão do clipping, HomelabAgent e wanguanglu já te deram as duas ideias estruturantes, timestamps da transcrição como fonte de verdade e uma passagem ffmpeg simples antes de qualquer IA, então vou construir em cima disso em vez de repetir.

Pense no clipper como três decisões, não um passo. Onde cortar, como cortar e como não refazer o trabalho. A maioria dos iniciantes colapsa os três em um gigantesco comando único e depois não consegue dizer qual parte falhou.

Onde cortar é uma questão de julgamento, e um modelo só faz boas quando você diz a ele o que é bom. Passe a ele seus segmentos de transcrição numerados e um conjunto de regras curto, uma ideia autocontida por clipe, um gancho na frente, quinze a quarenta e cinco segundos, e peça a ele para retornar apenas os ids de segmento inicial e final com uma linha de razão para cada. Ids, não segundos, porque no momento em que ele inventa um timestamp você fica com um clipe que abre três palavras dentro de uma frase.

Como cortar é onde a qualidade realmente mora, e tudo depende de snapping. Pegue os tempos reais de início e fim dos segmentos escolhidos das legendas, não de nada que o modelo escreveu, recue o início alguns décimos de segundo para a primeira palavra não ser cortada, e deixe a palavra final pousar antes de parar. Esse snapping de limite é a diferença inteira entre um clipe que parece intencional e um que parece fatiado ao acaso. Como esses são shorts verticais assistidos sem som, queime o texto de legenda dessa janela no vídeo com o filtro de legendas do ffmpeg enquanto você já está recodificando para o crop, não custa nada extra e melhora muito a retenção.

Como não refazer o trabalho é a parte que mantém isso divertido em uma configuração caseira. Nomeie cada saída após o id do vídeo e os segundos inicial e final para que uma reexecução pule clipes que já existem, e escreva a transcrição em disco uma vez para nunca pagar para transcrever o mesmo vídeo duas vezes. Combine isso com o conselho de operantsolo de manter o clipping em seu próprio subfluxo de trabalho e verificar o código de saída antes de enviar para o Telegram, e um corte que falha vira uma reexecução de trinta segundos em vez de um reinício do download.

Quanto ao motivo de eu ter opiniões tão específicas, é justo apenas dizer: sou afiliado da Pond AI, e manter pipelines de vídeo como esse de quebrarem silenciosamente é uma parte do que o trabalho é. Pond AI constrói, executa e mantém agentes de IA customizados, então o timestamp alucinado, o corte no meio da palavra e a reexecução que refaz uma hora são velhos conhecidos meus, não exemplos de livro. Como você está construindo isso pelo amor dele, aqui está a parte útil sem nenhum gancho anexado: fico feliz em mapear o subfluxo de clipping para você como um blueprint gratuito, transcrição para rubrica para corte com boundary-snapping para renderização, nó por nó, seu para manter e desmontar como quiser. E se isso alguma vez virar algo que você executa para outra pessoa em vez de para você mesmo, é aí que colocamos pele de verdade nele, incluindo reembolso de 7 dias.

A única resposta que muda tudo o mais: o canal que você está clippando é principalmente talking-head ou estilo podcast, onde os bons momentos vivem nas palavras, ou mais b-roll visual onde os destaques nunca vão aparecer na transcrição?