Protótipo de Dublagem de Vídeos PT-EN
- Após clonar o repositorio
- Inicializar um ambiente virtual na raiz do projeto
- instalar os pacotes do requirements.txt: Ex.
pip install -r requirements.txt
- colocar o video de teste dentro da pasta files que será o diretório de trabalho.
- Executar script "poc_voiceover.py" passando os parametros, working_dir, file, sample_size que correspondem ao diretório de trabalho, do arquivo de video que precisa estar no diretório de trabalho e do tamanho da amostra que será dublado, respectivamente. Ex.
python poc_voiceover.py --working_dir files/ --file case_ai.mp4 --sample_size 200
Nota: o script voiceover.py pode ser executado também, e foi uma tentativa de realizar a sintetização de fala através de um modelo do hugging face e sincronização do áudio e vídeo, mas a qualidade do video final ficou a baixo da apresentada pelo protótipo inicial que usa a vós do google tradutor na dublagem. Acredito que com mais tempo, talvez, seria possivel aprimorar a qualidade dessa abordagem.
Para manipular o video e extrair o áudio é usado o Moviepy
Por algum erro de conexão, não foi possível consumir o modelo Whisper do Hugging Face então é necessário intalar o pacote da OpenIA localmente e para evitar ter que intalar manualmente a ferramenta do ffmpeg, também é necessário instalar o pacote SpeechRecognition que auxilia no uso do whisper.
Inicialmente a ideia era usar o modelo da Unicamp dispinível no Hugging Face para traduzir o texto para inglês, mas após testar o tradutor do Whisper, decidi simplificar essa etapa.
Para sintetizar a fala do texto tradzido é usado uma das vozes masculina da base de dados do CMU_ARCTIC que jé possui um dataset de embeddings de suas vozes no Hugging Face e é necessário consumir o modelo da microsoft de Text To Speech também disponível no Hugging Face. O problema é que há um limite de tokens que o sintetizador aceita, assim seria necessário particionar o texto e sitentizer as partes separadas e depois montar o audio. Para ganhar tempo e ter um protótio funcional, foi implementado uma forma de consumir a api de tradução do google através do modulo gTTS.
Com o Librosa dá para fazer uma análise de spectograma e assim medir a energia e estabelecer as pausas para então segmentar a fala, e tentar sencronizar os trecho. Essa quebra do audio nas pausas, pode ser útil para lidar com o problema do limite de tokens na sintetização.