Como reproduzir um arquivo mp3 e excluir

2

Eu estou procurando um script onde eu poderia reproduzir um arquivo mp3 usando mpg123 e excluir ou não o arquivo. Eu gostaria de ouvir por alguns segundos e pular para o próximo arquivo depois de decidir se será ou não apagado. Alguém poderia ajudar?

    
por Leandro Franco 04.04.2017 / 02:44

1 resposta

2

O script abaixo irá reproduzir uma amostra de 5 segundos de todos os arquivos mp3 dentro de um diretório em uma fila, perguntando se o arquivo deve ser excluído ou não após cada amostra.

Depois de prosseguir, o script produzirá um relatório como:

--------------------
remove: /home/jacob/Bureaublad/test/04 Suite Espanola Nr. 1 Op. 47 Nr. 4.mp3
keep: /home/jacob/Bureaublad/test/08 Danzas Espanolas Op. 37 Nr. 3.mp3
remove: /home/jacob/Bureaublad/test/02 Suite Espanola Nr. 1 Op. 47 Nr. 2.mp3

O script

#!/usr/bin/env python3
import subprocess
import os
import sys
import time

dr = sys.argv[1]
report = []

for f in [f for f in os.listdir(dr) if f.endswith(".mp3")]:
    file = os.path.join(dr, f)
    subprocess.call(["timeout", "5", "mpg123", "--quiet", file])
    try:
        subprocess.check_output([
            "zenity",
            "--question",
            "--text=Delete?",
            ]).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        report.append("keep: "+file)
    else:
        os.remove(file)
        report.append("remove: "+file)

print("-"*20)
for l in report:
    print(l)

Como usar

  1. É desnecessário dizer, mas instalar o 'mpg123:

    sudo apt install mpg123
    
  2. Copie o script em um arquivo vazio, salve-o como filter_mp3.py

  3. Execute-o com o diretório de destino como argumento:

    python3 /path/to/filter_mp3.py /path/to/folder
    

Explicação

O script:

  • lista todos os mp3 filse em um diretório:

    for f in [f for f in os.listdir(dr) if f.endswith(".mp3")]:
        file = os.path.join(dr, f)
    
  • toca por 5 segundos:

    subprocess.call(["timeout", "5", "mpg123", file])
    
  • executa um diálogo zenity question:

    try:
        subprocess.check_output([
            "zenity",
            "--question",
            "--text=Delete?",
            ]).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        report.append("keep: "+file)
    else:
        os.remove(file)
        report.append("remove: "+file)
    

    O diálogo aumentará um subprocess.CalledProcessError se o usuário clicar em Não ou fechar a janela (nada acontecer), ou fechar sem erros se o usuário escolher Sim .

    No último caso, o arquivo será removido:

    os.remove(file)
    
por Jacob Vlijm 04.04.2017 / 08:21