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[@]}" ...