DEV Community

TheDigitalBricklayer
TheDigitalBricklayer

Posted on

Automações: Editando Shorts com programação

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

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

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

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

Eu tenho a saída:
Image description

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

“”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

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

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.

Top comments (0)