Como usei Python para automatizar um canal do Youtube
Tags: python, braziliandevs
Published: 2022-07-13 23:10:29

Quando comecei a programar, a primeira coisa que fiz para por em prática meus novos conhecimentos foi automatizar um processo que era feito todos os dias no meu emprego.

Trabalhava com edição de vídeos e, no mínimo uma vez por dia, tinha que descarregar uma mídia com as gravações para um servidor de backup e depois puxá-las para a minha máquina para começar a editar. Então, resolvi criar um script que fizesse isso.

## Por que automatizar?

Ao automatizar os processos corriqueiros, era como se estivesse “ganhando” tempo. Se uma tarefa diária que demora 5 minutos para ser feita é automatizada, em 5 dias úteis, você terá 25 minutos a mais para fazer qualquer outra coisa. Em um mês, 1 hora e 40 minutos; em um ano, 20 horas…Multiplique isso por mais tarefas ou usuários e você terá números realmente consideráveis.

## Como surgiu a inspiração

Estudando JavaScript, assisti uma série de vídeos do [Fillipe Deschamps](https://www.youtube.com/watch?v=kjhu1LEmRpY&list=PLMdYygf53DP4YTVeu0JxVnWq01uXrLwHi&ab_channel=FilipeDeschamps), onde ele ensina a criar um canal no Youtube que gera conteúdo de forma programática.

Em resumo, ele acessa um artigo do Wikipedia para pegar as informações que serão usadas no vídeo; usa a inteligência artificial Watson da IBM para “quebrar” o texto em sentenças; a API do Google para buscar imagens para ilustrar o vídeo; ImageMagick para tratar as fotos e criar a thumbnail; Adobe After Effects para editar o vídeo; e por fim a API do Youtube para fazer o upload.

Acompanhei a série e fiz esse projeto. No fim, adicionei algumas funcionalidades extras como gerar áudio para cada sentença com a API Text-to-Speech, também do Watson da IBM, e adicioná-los ao vídeo.

## O que é o projeto

A ideia era criar um canal no Youtube de replays de partidas de um jogo bem popular chamado “League of Legends”, totalmente automatizado.

Alguns sites disponibilizam para download partidas de jogadores profissionais. Os replays são arquivos executáveis que rodam o jogo.

Para automatizar todo o processo de criação, alguns passos eram necessários:

- Entrar no site, escolher uma partida, pegar as informações da partida e fazer o download do replay
- Executar o replay e gravar a tela
- Editar o vídeo
- Criar a thumbnail
- Subir o vídeo e a thumbnail para o Youtube e preencher informações como título, descrição e palavras-chave

## Por que Python?

Como tinha mais familiaridade com Javascript por já ter usado em outros projetos, seria a escolha óbvia, mas tinha um problema, eu precisava executar o jogo e configurar algumas coisas quando a partida começasse. Para isso, precisava controlar mouse e teclado de forma programática.

Busquei alguma biblioteca Javascript que me ajudasse a fazer isso, mas não tive sucesso. Foi quando lembrei de uma em Python, que se chama PyAutoGUI. Então, resolvi fazer tudo em Python! Além de ter tudo o que precisava, era uma chance de me aperfeiçoar em uma outra linguagem.

## Como foi implementado

### Web scrapping

Web scrapping é um método para acessar qualquer site e pegar informações.

O que utilizei para buscar as partidas foi o [League of Graphs](https://www.leagueofgraphs.com/) e, através [desse link](https://www.leagueofgraphs.com/replays/with-high-kda/grandmaster/sr-ranked), consigo acessar uma página com replays e filtrar a minha busca, para pegar apenas partidas com bons jogadores.

A ideia aqui foi pegar a primeira partida e extrair as informações dessa tabela.

![https://raw.githubusercontent.com/joaomaranhao/video-maker/main/docs/images/match.png](https://raw.githubusercontent.com/joaomaranhao/video-maker/main/docs/images/match.png)

Dentre as muitas opções do Python para realizar essa tarefa, escolhi o Selenium por ter a funcionalidade de interagir com o site. A biblioteca permite clicar para fazer o download da partida.

Criei um dicionário Python com todas as informações que precisava e salvei em um arquivo JSON, em uma pasta chamada “assets”, na raiz do projeto.

### Thumbnail

Para criar a thumbnail, desenvolvi um template com HTML e CSS. Já com as informações do JSON, os dados são preenchidos dinamicamente e um arquivo HTML é salvo na pasta “assets”: 

```python
./assets
	match_data.json
	thumbnail.html
```

Depois disso, utilizo novamente o Selenium para acessar esse HTML e tirar uma screenshot da página. A imagem é salva em png em uma pasta no meu diretório local.

O resultado é esse:

![https://raw.githubusercontent.com/joaomaranhao/video-maker/main/docs/images/thumb.png](https://raw.githubusercontent.com/joaomaranhao/video-maker/main/docs/images/thumb.png)

### Gravação

Para simplificar a criação do vídeo, decidi gravar o jogo com o OBS Studio. Assim posso adicionar elementos em tela, que ficam sobrepostos à partida, sem a necessidade de editar ou pós-produzir o vídeo.

Com o módulo *subprocess* do Python, executo o arquivo *.bat* que abre o replay da partida.

O PyAutoGUI é usado para abrir o OBS Studio e colocar a partida para gravar.

Já as informações do JSON, são passadas para o script com comandos de teclado para selecionar o jogador certo, do time certo.

Para rodar as hotkeys no jogo, usei uma biblioteca chamada PyDirectInput, já que o PyAutoGUI utiliza uma espécie de teclado virtual e não funcionava dentro do jogo.

Quando a partida acaba, a gravação para e um arquivo de vídeo *.mp4* é salvo no meu disco local, pronto para ser usado.

### Upload para o Youtube

Criei um projeto no [Google Cloud Platform](https://cloud.google.com/), para conseguir utilizar a [API do Youtube](https://developers.google.com/youtube/v3/quickstart/python).

Com as informações do JSON, faço uma requisição com título, descrição, palavras-chave e o arquivo em vídeo.

Quando o upload do vídeo termina, faço outra requisição para adicionar a thumbnail ao vídeo.

## Conclusão

Esse projeto me permitiu usar diferentes tecnologias e métodos para criar conteúdo de forma programática. Com todos os processos automatizados, é só rodar uma linha de código para popular esse canal com um vídeo novo, atualizado, com thumbnail e informações personalizadas.

Você pode conferir o canal [aqui](https://www.youtube.com/channel/UC-C_dsVX2-G2UYA9IoD5i3Q).

Você pode conferir o código no meu [Github](https://github.com/joaomaranhao/video-maker).

Fique à vontade para tirar dúvidas, dar sugestões e contribuir com o projeto.