HOWTO · Python
Converter MP3 em WAV em Python
Neste tutorial, discutiremos como converter MP3 em WAV em Python
Nesta página
Para converter um arquivo MP3 em WAV com Python, use pydub para ter uma interface de biblioteca simples ou chame ffmpeg quando precisar de controle direto sobre as opções de linha de comando. As duas abordagens exigem que o executável ffmpeg esteja disponível. Em geral, WAV não é comprimido e pode ocupar muito mais espaço do que MP3; converter um MP3 com perdas não recupera os detalhes de áudio descartados durante a compressão.
Converter MP3 em WAV com pydub
Instale pydub no ambiente em que seu script será executado usando python -m pip install pydub. Também é necessário instalar o executável ffmpeg e deixá-lo disponível no PATH; instalar apenas pydub não inclui esse executável. Consulte o guia de ffmpeg para saber mais. As etapas de instalação variam conforme o sistema operacional, então use o gerenciador de pacotes ou o método de instalação compatível com seu sistema. Não há um destino localizado em português disponível para esse guia, por isso o link aponta para a versão em inglês.
Neste exemplo, input.mp3 é o arquivo de origem e test.wav é o destino. Substitua esses caminhos pelos dos seus arquivos. O código verifica se o arquivo de entrada existe antes de importar pydub, então pode ser usado como modelo; quando o arquivo está presente, o código carrega o MP3 e exporta um arquivo WAV.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
from pathlib import Path
source_path = Path("input.mp3")
destination_path = Path("test.wav")
if not source_path.is_file():
print(f"Place an MP3 file at {source_path} and run again.")
else:
from pydub import AudioSegment
audio = AudioSegment.from_mp3(str(source_path))
audio.export(str(destination_path), format="wav")
print(f"Created {destination_path}")
Executar ffmpeg diretamente para converter MP3 em WAV
Você pode executar ffmpeg no terminal sem usar uma biblioteca de áudio do Python. Verifique se ffmpeg está instalado e pode ser chamado pelo nome ou use o caminho completo do executável. O argumento -i indica o arquivo de entrada, e o argumento final indica o caminho de saída: ffmpeg -i input.mp3 test.wav.
Esse comando pressupõe que input.mp3 esteja no diretório atual e grava test.wav, como nos exemplos em Python a seguir. Se o arquivo de entrada estiver em outro local, informe o caminho correto. O ffmpeg pode perguntar se deve substituir um arquivo de destino existente; escolha outro nome ou use a opção de sobrescrita apenas quando quiser substituir esse arquivo.
Usar subprocess para converter MP3 em WAV com Python
Em um script Python, subprocess.run() pode passar uma lista de argumentos para o programa externo ffmpeg. Isso evita montar uma string de comando para o shell e permite que o Python detecte um status de processo diferente de zero. O exemplo usa o mesmo arquivo de origem input.mp3 e o mesmo destino test.wav dos outros métodos; substitua ambos pelos caminhos dos seus arquivos. Antes de chamar ffmpeg, o exemplo verifica se o arquivo de origem existe.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
from pathlib import Path
import subprocess
source_path = Path("input.mp3")
destination_path = Path("test.wav")
if not source_path.is_file():
print(f"Place an MP3 file at {source_path} and run again.")
else:
subprocess.run(
["ffmpeg", "-i", str(source_path), str(destination_path)],
check=True,
)
print(f"Created {destination_path}")
Com check=True, o Python informa quando a conversão falha, em vez de continuar sem avisar. O ffmpeg grava o arquivo de áudio de destino; o subprocess não redireciona a saída padrão do processo para esse arquivo WAV. Em tarefas em lote, capture subprocess.CalledProcessError e registre o caminho do arquivo de origem e os detalhes do erro para facilitar o diagnóstico de falhas.
Verificar a saída WAV e solucionar problemas comuns
Os três exemplos de conversão usam input.mp3 como arquivo de origem e test.wav como destino. Se você alterou o destino em algum exemplo, ajuste destination_path abaixo para usar exatamente esse caminho. A verificação primeiro confirma que o arquivo existe e, em seguida, abre-o com o módulo wave do Python para confirmar que ele contém um contêiner WAV legível. Essa verificação é separada do arquivo WAV sintético apresentado a seguir: ele serve para testar a leitura de WAV e não converte um MP3.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
from pathlib import Path
import wave
# Match this path to the destination used by the conversion example.
destination_path = Path("test.wav")
if not destination_path.is_file():
print(f"WAV file not found: {destination_path}")
else:
try:
with wave.open(str(destination_path), "rb") as wav_file:
print(
f"WAV: {wav_file.getnchannels()} channel(s), "
f"{wav_file.getframerate()} Hz"
)
except (OSError, wave.Error) as error:
print(f"Could not read WAV file: {error}")
O exemplo autocontido a seguir cria um pequeno arquivo WAV de teste usando a biblioteca padrão do Python e verifica alguns metadados básicos. Ele demonstra apenas como inspecionar um WAV; não decodifica um MP3.
from pathlib import Path
import tempfile
import wave
with tempfile.TemporaryDirectory() as directory:
output_path = Path(directory) / "test.wav"
with wave.open(str(output_path), "wb") as wav_file:
wav_file.setnchannels(1)
wav_file.setsampwidth(2)
wav_file.setframerate(8000)
wav_file.writeframes(b"\x00\x00" * 800)
with wave.open(str(output_path), "rb") as wav_file:
print(f"WAV: {wav_file.getnchannels()} channel(s), {wav_file.getframerate()} Hz")
Saída:
WAV: 1 channel(s), 8000 Hz
Os valores exibidos descrevem o fluxo WAV; eles não indicam se a qualidade do som é melhor do que a do MP3 de origem. Se o Python não encontrar ffmpeg, instale o executável ou adicione o diretório dele ao PATH e reinicie o terminal ou o processo que executa o Python. Se o ffmpeg não conseguir abrir o arquivo de entrada, confira o nome e o caminho de origem em relação ao diretório de trabalho do script. Se a conversão falhar, examine as mensagens de diagnóstico do ffmpeg e verifique se o arquivo de entrada pode ser lido e se o diretório de destino permite gravação. Escolha pydub quando uma API mais simples for adequada ao script; use ffmpeg por meio de subprocess quando for útil acessar diretamente as opções e o status do processo.