Como posso registrar automaticamente os nomes das músicas que reproduzo em uma janela do VLC player?

-1

Eu quero poder salvar o nome de um arquivo .mp3 toda vez que eu abrir uma música com o VLC.

Edit: Como vocês nos comentários mencionados;

  1. Eu quero abrir o VLC diretamente em uma janela do player.
  2. Quero salvar o nome da música que está sendo reproduzida em um arquivo de texto.

Como posso alcançar esse objetivo? Desde já, obrigado.

    
por Amir A. Shabani 05.06.2017 / 19:50

2 respostas

3

Você pode obter o nome da faixa atual (Endereço) usando:

lsof -p 'pidof -s vlc' | grep -o "/.*\.mp3"

Se você quiser salvar o nome quando clicar duas vezes em um arquivo mp3 para abrir o VLC, aqui está minha ideia:

abra o arquivo da área de trabalho do VLC:

sudo nano /usr/share/applications/vlc.desktop

edite a linha Exec para que pareça:

Exec=bash -c "{ /usr/bin/vlc --started-from-file %U; }& sleep 1; lsof -p 'pidof -s vlc' | grep -o "/.*\.mp3" > /home/user/list"

ele salvará o nome do arquivo em /home/user/list .

Caso contrário, sugiro que você crie uma simples combinação de teclas para sh -c 'lsof -p $(pidof -s vlc) | grep -o "/.*\.mp3"' , então, sempre que você pressionar essas teclas, ele salvará o nome da música atualmente sendo reproduzida.

Podemos também criar um script e executá-lo ao mesmo tempo com o VLC, e mantê-lo rodando em segundo plano, então, com esse script, podemos verificar qual faixa está sendo reproduzida agora.

    
por Ravexina 05.06.2017 / 20:54
1

Registra automaticamente todas as suas músicas reproduzidas, com um registro de data e hora

Como alternativa, sem alterar nada para o arquivo .desktop ou ter que registrar manualmente suas músicas, você pode executar o script de plano de fundo abaixo. Ele criará um arquivo de log, denominado played_songs , em seu diretório inicial:

Vantagenssão:

  • Registraautomaticamentetodasassuasmúsicasreproduzidas
  • Nãoénecessárioalteraroarquivo.desktop,oquesignificaqueeletambémfuncionaquandovocêiniciaoVLCapartirdalinhadecomando.

Desvantagenssão:

  • Emboraeunãopossamedirouverqualquercargaadicionaldoprocessador,teoricamenteeleadicionaalgumaatividade.Issoépraticamentenenhum,mesmoemcaixasdeidadedapedra.
  • Devezem(muito)tempo,vocêprecisará"esvaziar" ou remover o arquivo de log, já que (atualmente) não tem limite de tamanho. Isso pode ser facilmente corrigido se você quiser.

O script

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

home = os.environ["HOME"]
log = os.path.join(home, "played_songs")
def_name = "VLC media player"

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

song1 = None

while True:
    time.sleep(2)
    pid = get(["pgrep", "vlc"])
    if not pid:
        song = None
    else:
        # only do anything at all if vlc runs
        wins = get(["wmctrl", "-lp"])
        if wins:
            wins = wins.splitlines()
            try:
                # check if any of the windows belongs to vlc
                # this will not if it is closed in the meantime
                match = [w.split()[0] for w in wins if pid in w][0]
            except IndexError:
                pass
            else:
                # ...if so, retrieve the song name, only log if there is a new song
                song2 = get(["xdotool", "getwindowname", match])
                if all([song2, song2 != song1, song2 != def_name]):
                    open(log, "a+").write(
                        time.strftime("%H:%M:%S_%d-%m-%Y")+"\n   "+\
                        song2.replace(def_name, "").rstrip(" - ")+"\n"
                        )
                song1 = song2

Como usar

  1. O script precisa dos dois xdotool e wmctrl :

    sudo apt-get install xdotool wmctrl
    
  2. Copie o script em um arquivo vazio, salve-o como log_vlc.py

  3. Teste- execute-o a partir de um terminal pelo comando:

    python3 /path/to/log_vlc.py
    

    Abra qualquer música no VLC de qualquer forma (cli, gui), o arquivo de log deve ser criado e mostrar as músicas registradas.

  4. Se tudo funcionar bem, adicione a opção Startup Applications: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    python3 /path/to/log_vlc.py
    

Explicação

Uma vez por dois segundos, o script:

  • verifica se o VLC está rodando em tudo , não faz nada se não

    pid = get(["pgrep", "vlc"])
    if pid:
        # only do anything at all if vlc runs
    
  • se o VLC estiver rodando, ele encontra sua janela e analisa o título da música

    wins = get(["wmctrl", "-lp"])
    if wins:
        wins = wins.splitlines()
        try:
            # check if any of the windows belongs to vlc
            # this will not be the case if it is closed in the meantime
            match = [w.split()[0] for w in wins if pid in w][0]
        except IndexError:
            pass
        else:
            # ...if so, retrieve the song name, only log if there is a new song
            song2 = get(["xdotool", "getwindowname", match])
    
  • (apenas) se o título da música mudar, obviamente, uma nova música é tocada e, em seguida, o nome da música é registrado no arquivo de registro, com a hora marcada.

            if all([song2, song2 != song1, song2 != def_name]):
                open(log, "a+").write(
                    time.strftime("%H:%M:%S_%d-%m-%Y")+"\n   "+\
                    song2.replace(def_name, "").rstrip(" - ")+"\n"
                    )
                print(song2)
            song1 = song2
    
por Jacob Vlijm 06.06.2017 / 18:15