Fala galera do mundo dos dados! Já pensou em extrair texto de vídeo com Python? Sabia que o Python já tem algumas bibliotecas prontinhas para fazer essa mágica? Pensa em pegar um arquivo mp4 e transformar ele num txt, quanta coisa dá para resolver. Desde criar a legenda de um filme, até em pesquisar a parte de um vídeo que contém alguma palavra. É muita coisa que dá para fazer ao transformar vídeo em texto.
Para essa atividade, faremos a extração de audio do vídeo e depois é só Reconhecimento de Voz com a Biblioteca SpeechRecognition Python, solução que já apresentamos aqui no Dados ao Cubo. Então partiu Python, começando a configurar o ambiente para extrair texto de um vídeo.
Configurar Ambiente para Extrair Texto de Vídeo com Python
Para começar, faremos a configuração do ambiente com instalação de três bibliotecas. Confere o código de instalação abaixo através do gerenciador de pacotes do Python o pip.
pip install SpeechRecognition pip install moviepy pip install pydub
A biblioteca SpeechRecognition é para realização de reconhecimento de fala, com suporte para diversos engines e APIs, online e offline. Já a lib moviepy é para edição de vídeo: corte, concatenações, inserções de títulos, composição de vídeo, processamento de vídeo e criação de efeitos personalizados. E o pacote pydub é para manipulação de áudio com uma interface de alto nível simples e fácil. Finalizando a configuração inicial, podemos partir para o código Python.
Extrair Texto de Vídeo ao Cubo
Agora faremos a extração do texto de um vídeo. Para fazer essa transformação de um vídeo em um texto, precisamos de três etapas. A primeira é fazer uma conversão do arquivo MP4 em arquivo MP3, ou seja, converter um arquivo de vídeo em áudio apenas. A segunda etapa, é transformar o tipo do arquivo de áudio, dessa forma, vamos transformar o arquivo MP3 em um arquivo WAV. Esta segunda etapa, é necessária, pois é preciso que o arquivo de áudio esteja no formato WAV para que seja possível realizar a extração do texto. Enfim, a nossa terceira etapa, quer fazer a extração do texto do arquivo de áudio do tipo WAV. E para começar, importaremos as bibliotecas que instalamos na configuração do ambiente.
Importar Bibliotecas Python
Abaixo o código Python, importando as bibliotecas e as funções que vamos utilizar, além das três bibliotecas configuradas no ambiente importaremos mais duas bibliotecas auxiliares. A tqdm para acompanhar a execução do loop for, e a os para as operações de deleção de arquivos.
import moviepy.editor as mp import speech_recognition as sr from pydub import AudioSegment from pydub.utils import make_chunks from tqdm import tqdm import os
Bibliotecas importadas, começaremos a construção do código.
Criar Variáveis
Nesse ponto, criaremos algumas variáveis importantes, que utilizaremos ao longo da solução. A variável arquivo deve conter o nome do arquivo de vídeo, e a partir dela criaremos as demais variáveis que utilizaremos: mp4, mp3, wav e txt.
arquivo = 'RecommendLeads' mp4 = f'{arquivo}.mp4' mp3 = f'{arquivo}.mp3' wav = f'{arquivo}.wav' txt = f'{arquivo}.txt'
Seguimos após a criação das variáveis para converter o arquivo MP4 em MP3.
Transformar MP4 em MP3
Para transformar o vídeo MP4 em um áudio MP3 as funções VideoFileClip e write_audiofile da biblioteca moviepy, conforme código Python abaixo.
clip = mp.VideoFileClip(mp4).subclip() clip.audio.write_audiofile(mp3)
Com o áudio no formato MP3, precisamos transformar em WAV.
Converter MP3 em WAV
A biblioteca pydub vai realizar a conversão do arquivo MPE em WAV através da função AudioSegment lendo o arquivo, utilizando o método export para gravar no novo formato. E para finalizar salvaremos o arquivo WAV na variável audio.
sound = AudioSegment.from_mp3(mp3) sound.export(wav, format='wav') audio = AudioSegment.from_file(wav, 'wav')
Agora que não utilizaremos mais a variável MP3, podemos excluir a mesma com a função remove da lib os.
try: os.remove(mp3) except: print('Arquivo não existe')
Com o formato correto, agora é preparar para extrair o texto.
Dividir Áudio em Partes
Uma necessidade do algoritmo que extrai o texto do arquivo de áudio é ter pequenos arquivos de áudio. Então, a missão é dividir o arquivo em pequenas partes. Então, utilizaremos a biblioteca pydub com sua função make_chunks. Esta função realiza a divisão do arquivo de áudio em tamanhos iguais, que vai ser definido na variável tamanho e vai estar em milisegundos.
tamanho = 30000 partes = make_chunks (audio, tamanho) partes_audio =[] for i, parte in tqdm(enumerate(partes)): parte_name = 'audio{0}.wav'.format(i) partes_audio.append(parte_name) parte.export(parte_name, format='wav')
Já temos o arquivo WAV em partes, podemos excluir com a função remove da lib os.
try: os.remove(wav) except: print('Arquivo não existe')
Enfim, chegou a hora de extrair o texto do vídeo após todas as transformações que realizamos anteriormente.
Extrair Texto
Para extrair o texto, foi criada a função transcreve_audio. Ela recebe como parâmetro o nome do arquivo de áudio e retorna a variável texto, com a transcrição ou com erro apresentado. Ao final, podemos excluir o pedaço do áudio que foi transcrito com a função remove da lib os. Em detalhes técnicos, utilizaremos as funções Recognizer e record para ler o arquivo de áudio. Em seguida, a função recognize_google para fazer a transcrição do arquivo de áudio para texto. Veja o código Python abaixo.
def transcreve_audio(nome_audio): r = sr.Recognizer() with sr.AudioFile(nome_audio) as source: audio = r.record(source) try: texto = r.recognize_google(audio,language='pt-BR') print('Google Speech Recognition: ' + texto) except sr.UnknownValueError: texto = '' print('Google Speech Recognition NÃO ENTENDEU o audio') except sr.RequestError as e: texto = '' print('Erro ao solicitar resultados do Google Speech Recognition; {0}'.format(e)) finally: try: os.remove(nome_audio) except: print('Arquivo não existe') return texto
Para executar a função, criaremos uma string vazia com a variável texto, e um loop for para aplicar a função transcreve_audio em todas as partes que criamos do arquivo. A função tqdm mostra a execução do loop for com um log em tempo de execução.
texto = '' for parte in tqdm(partes_audio): texto = texto + ' ' + transcreve_audio(parte)
Chegou a hora de ver o resultado da nossa solução no arquivo de texto final.
Gerar Arquivo de Texto
Nesta etapa, criamos um arquivo de texto através da variável arq, com o nome declarado na variável criada no início do código. A função write é utilizada para escrever o conteúdo da variável texto. E então a função close fecha o arquivo salvo.
arq = open(txt,'w') arq.write(texto) arq.close()
E chegamos ao fim de mais um conteúdo do Dados ao Cubo para você! Portanto, espero que você tenha curtido o conteúdo. Além disso, não esqueça de mandar aquele feedback e compartilhar nosso conteúdo com a comunidade.
Conteúdos ao Cubo
Se você curtiu o conteúdo, lá no Dados ao Cubo tem muito mais. Então, deixo algumas sugestões de conteúdos que você pode encontrar por lá, sempre falando sobre o mundo dos dados.
- Bem Vindos ao Dados ao Cubo
- Extraindo Texto de Arquivos PDF com Python
- Leitura de Textos com Emoji
- Extraindo Dados do Twitter com Python
- Análise de Imagens com OpenCV
- Inteligência Artificial em Ressonância Magnética
- Regressão com scikit-learn
Finalizo com um convite para você ser Parceiro de Publicação Dados ao Cubo, escrever o próximo artigo e ter divulgação para toda a comunidade de dados no LinkedIn.

Baiano, apaixonado por dados e tecnologia, amante das inovações tecnológicas que facilitam a vida humana! Formado em Engenharia da Computação e com MBA em Gestão da Informação e Business Intelligence e especialização em Data Science. Atualmente atua como Data Tech Lead na Lopes, além de Professor na área de dados e nas horas vagas cria uns modelos de Machine Learning com Python e soluções diversas com dados!
1 Comment
Igor Costa
25 de julho de 2023Copiei o codio certinho e esta dando erro. Nessa parte:
for i, parte in tqdm(enumerate(partes)):
parte_name = ‘audio{0}.wav’.format(i)
partes_audio.append(parte_name)
parte.export(parte_name, format=’wav’)
try:
os.remove(wav)
except:
print(‘Arquivo não existe’)