Probando pydub para convertir y reproducir audio

por | abril 2, 2017

Pydub es un módulo de Python que nos permite realizar operaciones de reproducción y conversión de formato de ficheros de audio.

Para comenzar a utilizarlo lo más sencillo es instalarlo con el gestor de paquetes pip:

pip install pydub

El módulo permite trabajar directamente con ficheros en formato WAV, pero si tenemos mp3, ogg, etc… necesitaremos ffmpeg o libav. En Ubuntu podríamos hacer:

# Instalamos ffmpeg
apt install ffmpeg 

# O bien libav
apt install libav

Recordad que en el caso de Debian, para instalar ffmpeg necesitaréis activar el repo deb-multimedia.org tal y como veíamos en un artículo anterior. Sin embargo, para probar pydub yo he trabajado con libav sin ningún problema, así que podéis tirar de él y evitaros añadir ningún repo adicional.

Vamos a ver una serie de ejemplos de conversión de formato:

  • Para convertir de mp3 a ogg, podríamos utilizar el siguiente snippet de código:
    from pydub import AudioSegment
    
    song = AudioSegment.from_mp3("/home/bob/Music/example.mp3")
    song.export("/home/bob/Music/example.ogg", format="ogg")
  • Para convertir de ogg o de wav a otros formatos tampoco tendría pérdida, sustituyendo las líneas anteriores por lo que corresponda según el caso:
    # De ogg a mp3
    song = AudioSegment.from_ogg("/home/bob/Music/example.ogg")
    song.export("/home/bob/Music/example.mp3", format="mp3")
    
    # De wav a mp3
    song = AudioSegment.from_wav("/home/bob/Music/example.wav")
    song.export("/home/bob/Music/example.mp3", format="mp3")
    
    # De mp3 a wav
    song = AudioSegment.from_mp3("/home/bob/Music/example.mp3")
    song.export("/home/bob/Music/example.wav", format="wav")
    
  • Si quisiéramos extraer el audio en mp4 a partir de un vídeo mp4:
    from pydub import AudioSegment
    
    video = "/home/bob/Videos/example.mp4"
    AudioSegment.from_file(video).export("/home/bob/Videos/example.mp3", format='mp3')

También podemos reproducir audio sin complicarnos demasiado. Por ejemplo, para reproducir un fichero de audio ya sea ogg, mp3 o wav podríamos crear un script llamado playsong.py:

from pydub import AudioSegment
from pydub.playback import play
import sys
import os

song = sys.argv[1]
extension = os.path.basename(song)

if extension.endswith('.wav'):
    song = AudioSegment.from_wav(song)
    play(song)
elif extension.endswith('.mp3'):
    song = AudioSegment.from_mp3(song)
    play(song)
elif extension.endswith('.ogg'):
    song = AudioSegment.from_ogg(song)
    play(song)

Después lo ejecutamos con python playsong.py /ruta/fichero/cancion, por ejemplo:

python playsong.py /home/bob/Music/mysong.ogg

Y pasaría a reproducir el audio, pudiendo parar la reproducción con Ctrl+C

Como vemos, pydub nos proporciona una forma sencilla de realizar conversión y reproducción de audio. En GitHub tenéis el código del proyecto, además de instrucciones sobre su uso y útiles snippets.