Automações: Editando Shorts com programação
Tags: development, python, shorts, developer
Published: 2024-07-01 01:48:31


O problema: Tempo. 

Tenho pouco tempo para gravar conteúdos para o canal e queria aproveitar os vídeos longos que faço para o formato vertical.

Eu pegava esses vídeos longos, gerava uma lista com 5-6 vídeos curtos (shorts <1 minuto) para então jogar no editor e cortar esses vídeos, converter no formato vertical, colocar a logo do canal e ctas (call to action, curte, comenta, se inscreve e informando que era um vídeo curto para um vídeo maior). 

Isso consome muito tempo, e trabalho manual que minha mão grita de dor pois tenho lesões nas duas mãos.

Quebrando o problema em etapas menores:

- Cortar os vídeos em tamanho máximo de 59 segundos.
- Converter os vídeos para formato vertical, eu gravo em 16:9 formatos verticais são 9:16.
- Adicionar o layer de cta do canal 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m18csfl5i3owoz09bxx3.gif)


Iremos falar da primeira etapa hoje, cortar os vídeos em no máximo 59 segundos. Aqui tem um trabalho manual de assistir o vídeo e anotar uma minutagem de início, fim e nome do arquivo para o corte ser realizado. 

Feito essa planilha no formato  csv, ela será o input do script que escrevi e vou ler a mesma utilizando a lib csv do python.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/omou1yeyogi2th3of9tk.png)


Faço validação pois preciso ter os campos que mencionei acima e sigo para criar os vídeos no formato vertical. Nesse ponto para cada vídeo longo eu vou criar n vídeos dependendo das entradas da planilha e o nome dos arquivos segue o formato abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjii566f3tp8s97vghyf.png)


Onde um dicionário foi criado para marcar o nome do arquivo de saída com um contador, pois para cada entrada abaixo vai ser formado uma saída dessa forma:

{basename}_{counter}{extension}

Em outras palavras, informado a planilha abaixo:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lfiav5o0kfa8250orb8f.png)

Eu tenho a saída:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wn5cvig80kzoxzacc3fh.png)


Tudo certo, agora precisamos cortar o vídeo de fato, para isso vamos utilizar FFmpeg, software utilizado para manipular, editar etc arquivos de áudio e vídeo.

Procurando na doc e stackoverflow e chat gpt para explicar os comandos consegui realizar o comando abaixo:

Estou rodando o ffmpeg no terminal e os comandos ditam:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yk7xuwr6zih8pixlc1zv.png)



“”ss” - Inicio do corte
“to” - Fim do corte
“-i” -  Arquivo de entrada”

Rodando esse comando eu consigo cortar os vídeos dado um início e fim e o nome de saída, agora falta integrar isso no python e tá pronto o sorvetinho certo? 

Não!



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g9oeljko6rqdz4vk0bbf.gif)



 
Detectei um problema onde há uma falha de sincronização entre o áudio e o vídeo. A faixa de áudio começava primeiro e após alguns segundos aparecia o vídeo, ouch!! 

Pesquisa, pesquisa e mais pesquisa. 

Chatgpt me explicou alguns comandos que achei na doc (a doc é bem triste de ler do ffmpeg). 

Vamos de teste com o novo comando:

` ffmpeg -ss 00:00:00 -t 00:00:10 -i branding.mp4 -vcodec copy -acodec copy -avoid_negative_ts make_zero potato.mp4`

Agora podemos comemorar


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gpvw6pk85nze26dy0ry1.gif)


Agora é juntar isso tudo no python, criar um subprocesso para chamar o ffmpeg e cortes rápidos igual aquela marca de faca (patrocina nós) .

 Vou utilizar a lib subprocess para abrir o processo de chamar o ffmpeg que está instalado no meu sistema operacional e aguardar até que o vídeo seja cortado.

`result = subprocess.run([
   'ffmpeg', '-ss', start_time, '-t', duration, '-i', filename,
   '-vcodec', 'copy', '-acodec', 'copy', '-avoid_negative_ts', 'make_zero',
   output_filename
], capture_output=True, text=True)`

O pulo do gato para retirar a falha de sincronização foi justamente adicionar o parâmetro ('-avoid_negative_ts', 'make_zero') que evita de ter timestamp negativos e com isso não gerar a falha de sync entre vídeo e aúdio.  

 E seguimos fazendo isso para cada linha do csv que nos foi informado para processar e o resultado são vídeos cortados em até 59 segundos para serem colocados no formato vertical.

Por hoje era isso, receber o csv, cortar o vídeo, lidei com a dessincronização de áudio e vídeo e exportei os vídeos para a próxima etapa que é transformá-los em formato vertical. Irei trazer o artigo de conversão desses vídeos para vertical em um futuro próximo.