Spleeter con Docker

Crear el contenedor

Vamos a crear un contenedor basándonos en un fichero Dockerfile del proyecto Spleeter.

FROM python:3.7
RUN mkdir -p /model
ENV MODEL_PATH /model
RUN apt-get update && apt-get install -y ffmpeg libsndfile1
RUN pip install musdb museval
RUN pip install spleeter==1.4.5
ENTRYPOINT ["spleeter"]

Este archivo lo guardaremos con el nombre Dockerfile en la carpeta de trabajo que vayamos a usar. Posteriormente construiremos una imagen a partir de este fichero:

$ docker build -t spleeter .

Crearemos una carpeta data/in/ para el fichero de entrada y otra data/out/ para los ficheros de salida:

$ mkdir data/in data/out -p

Ejecutar el contenedor

Ahora copiamos el archivo que queramos separar en data/in y ejecutamos el contenedor:

$ cp archivo_a_separar.mp3 data/in$ docker run -v $(pwd)/data:/data spleeter separate -i /data/in/archivo_a_separar.mp3 -o /data/out

Esto separará el archivo de entrada en dos ficheros, uno de voz y otro de acompañamiento en la carpeta data/out.
Si queremos separar en 4 pistas (voz, bajo, batería y resto), usaremos el siguiente comando:

$ docker run -v $(pwd)/data:/data spleeter separate -i /data/in/i.mp3 -o /data/out/i2 -p spleeter:4stems

En el momento de escribir este artículo podemos hacer la siguientes separaciones:

  • spleeter:2stems – voz y acompañamiento
  • spleeter:4stems – voz, bajo, batería y resto
    spleeter:5stems – voz, bajo, batería, piano y resto
  • Podemos resumir todo con el siguiente script:
$ git clone https://github.com/Deezer/spleeter$ cp spleeter/docker/python-3.7.dockerfile Dockerfile$ mkdir data/in data/out -p $ docker build -t spleeter .$ cp i.mp3 data/in$ docker run -v $(pwd)/data:/data spleeter separate -i /data/in/i.mp3 -o /data/out$ ls data/out

Procesando varios archivos

Si queremos hacer un batch podemos usar el siguiente parámetro para i:

$ eval "files=($(ls --quoting-style=shell-always -vd ./data/in/*.mp3))"$ ... -i "${files[@]}" ...

Referencias

Empezando con Spleeter