Как я могу автоматически записывать имена песен, которые я воспроизвожу в окне проигрывателя VLC?

qBittorrent

Описание

Продвинутый и многоплатформенный клиент BitTorrent с приятным пользовательским интерфейсом Qt4, а также веб-интерфейс для удаленного управления и интегрированная поисковая система. qBittorrent направлен на удовлетворение потребностей большинства пользователей при использовании как можно большего количества процессора и памяти.

Описание

Simultaneous download of multiple torrents
Integrated torrent search engine
Integrated RSS feed reader and downloader
Good internationalization
DHT, PeX, Encryption, LSD, UPnP, NAT-PMP
Cross platform (Linux, Mac Os, Windows)
Very lightweight
Torrent queueing and prioritizing
Control over files in a torrent (filtering, prioritizing)
Nice µTorrent-like interface with Qt4 toolkit (qBittorrent v2.x)
IP filtering (eMule dat files or PeerGuardian files)
Peer display with country and hostname resolution (qBittorrent v2.x)
Advanced control over torrent trackers (qBittorrent v2.x)
µTorrent peer id spoofing to avoid tracker blacklisting
Closest open source equivalent to µTorrent (qBittorrent v2.x)
Torrent creation tool
Remote control through Secure Web User Interface
-1
задан 6 June 2017 в 19:29

6 ответов

Вы можете получить имя текущей воспроизводимой дорожки (адрес), используя:

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

Если вы хотите сохранить имя при двойном щелчке по файлу mp3, чтобы открыть VLC, вот моя идея :

откройте файл рабочего стола VLC:

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

, затем отредактируйте строку Exec, чтобы он выглядел так:

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

он сохранит имя файла в /home/user/list.

В противном случае я предлагаю вам создать простой keybinding для sh -c 'lsof -p $(pidof -s vlc) | grep -o "/.*\.mp3"', поэтому всякий раз, когда вы нажимаете эти клавиши, он сохраняет имя текущей песни.

Мы можем также создайте сценарий и запустите его одновременно с VLC и продолжайте работать в фоновом режиме, а затем с помощью этого скрипта мы можем проверить, какой трек воспроизводится прямо сейчас.

3
ответ дан 22 May 2018 в 21:50
  • 1
    Строка: lsof -p `pidof -s vlc` | grep -o "/home.*mp3" дает мне эту ошибку: lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing Output information may be incomplete. – Amir A. Shabani 5 June 2017 в 22:00
  • 2
    Предупреждение не связано с синтаксисом команды, Здесь: 1 , Здесь: 2 . Просто убедитесь, что VLC запущен и играет песню, а затем снова запустил эту команду, я также обновил эту команду, используя ее вместо старой. вы можете проверить его, используя sudo. – Ravexina 5 June 2017 в 22:10

Вы можете получить имя текущей воспроизводимой дорожки (адрес), используя:

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

Если вы хотите сохранить имя при двойном щелчке по файлу mp3, чтобы открыть VLC, вот моя идея :

откройте файл рабочего стола VLC:

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

, затем отредактируйте строку Exec, чтобы он выглядел так:

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

он сохранит имя файла в /home/user/list.

В противном случае я предлагаю вам создать простой keybinding для sh -c 'lsof -p $(pidof -s vlc) | grep -o "/.*\.mp3"', поэтому всякий раз, когда вы нажимаете эти клавиши, он сохраняет имя текущей песни.

Мы можем также создайте сценарий и запустите его одновременно с VLC и продолжайте работать в фоновом режиме, а затем с помощью этого скрипта мы можем проверить, какой трек воспроизводится прямо сейчас.

3
ответ дан 18 July 2018 в 12:07

Вы можете получить имя текущей воспроизводимой дорожки (адрес), используя:

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

Если вы хотите сохранить имя при двойном щелчке по файлу mp3, чтобы открыть VLC, вот моя идея :

откройте файл рабочего стола VLC:

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

, затем отредактируйте строку Exec, чтобы он выглядел так:

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

он сохранит имя файла в /home/user/list.

В противном случае я предлагаю вам создать простой keybinding для sh -c 'lsof -p $(pidof -s vlc) | grep -o "/.*\.mp3"', поэтому всякий раз, когда вы нажимаете эти клавиши, он сохраняет имя текущей песни.

Мы можем также создайте сценарий и запустите его одновременно с VLC и продолжайте работать в фоновом режиме, а затем с помощью этого скрипта мы можем проверить, какой трек воспроизводится прямо сейчас.

3
ответ дан 24 July 2018 в 19:55

Автоматически записывать все воспроизводимые песни с отметкой времени

В качестве альтернативы, не изменяя ничего в ваш файл .desktop или не записывая вручную свои песни, вы можете запустить фоновый скрипт ниже. Он создаст файл журнала с именем played_songs в вашем домашнем каталоге:

Преимущества:

Полностью автоматически записывает все ваши воспроизводимые песни. Не нужно для изменения вашего файла .desktop, что означает, что он также работает, когда вы запускаете VLC из командной строки.

Преимущества :

Полностью автоматически записывает все ваши сыгранные песни От времени до (долгого) времени вам нужно будет «пусто» или удалить файл журнала, так как (в настоящее время) он не имеет ограничений по размеру. Это можно легко исправить, если хотите.

Сценарий

#!/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

Как использовать

Для сценария нужны как xdotool, так и wmctrl:
sudo apt-get install xdotool wmctrl
Скопируйте сценарий в пустой файл, сохраните его как log_vlc.py. Протестируйте его с терминала командой:
python3 /path/to/log_vlc.py
Откройте любую песню в VLC в любом случае (cli, gui), файл журнала должен быть создан и показать записанные песни. Если все работает нормально, добавьте в приложения для запуска: Dash> Startup Applications> Add. Добавьте команду:
python3 /path/to/log_vlc.py

Объяснение

Один раз в две секунды сценарий:

От времени до (долгого) времени вы будете необходимо «удалить» или удалить файл журнала, так как (в настоящее время) он не имеет ограничений по размеру. Не нужно изменять файл .desktop, что означает, что он также работает, когда вы запускаете VLC из командной строки. (только), если название песни изменяется, очевидно, что воспроизводится новая песня, тогда имя песни записывается в файл журнала, с отметкой времени.
        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
1
ответ дан 22 May 2018 в 21:50

Автоматически записывать все воспроизводимые песни с отметкой времени

В качестве альтернативы, не изменяя ничего в ваш файл .desktop или не записывая вручную свои песни, вы можете запустить фоновый скрипт ниже. Он создаст файл журнала с именем played_songs в вашем домашнем каталоге:

Преимущества:

Полностью автоматически записывает все ваши воспроизводимые песни. Не нужно для изменения вашего файла .desktop, что означает, что он также работает, когда вы запускаете VLC из командной строки.

Преимущества :

Полностью автоматически записывает все ваши сыгранные песни От времени до (долгого) времени вам нужно будет «пусто» или удалить файл журнала, так как (в настоящее время) он не имеет ограничений по размеру. Это можно легко исправить, если хотите.

Сценарий

#!/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

Как использовать

Для сценария нужны как xdotool, так и wmctrl: sudo apt-get install xdotool wmctrl Скопируйте сценарий в пустой файл, сохраните его как log_vlc.py. Протестируйте его с терминала командой: python3 /path/to/log_vlc.py Откройте любую песню в VLC в любом случае (cli, gui), файл журнала должен быть создан и показать записанные песни. Если все работает нормально, добавьте в приложения для запуска: Dash> Startup Applications> Add. Добавьте команду: python3 /path/to/log_vlc.py

Объяснение

Один раз в две секунды сценарий:

От времени до (долгого) времени вы будете необходимо «удалить» или удалить файл журнала, так как (в настоящее время) он не имеет ограничений по размеру. Не нужно изменять файл .desktop, что означает, что он также работает, когда вы запускаете VLC из командной строки. (только), если название песни изменяется, очевидно, что воспроизводится новая песня, тогда имя песни записывается в файл журнала, с отметкой времени. 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
1
ответ дан 18 July 2018 в 12:07

Автоматически записывать все воспроизводимые песни с отметкой времени

В качестве альтернативы, не изменяя ничего в ваш файл .desktop или не записывая вручную свои песни, вы можете запустить фоновый скрипт ниже. Он создаст файл журнала с именем played_songs в вашем домашнем каталоге:

Преимущества:

Полностью автоматически записывает все ваши воспроизводимые песни. Не нужно для изменения вашего файла .desktop, что означает, что он также работает, когда вы запускаете VLC из командной строки.

Преимущества :

Полностью автоматически записывает все ваши сыгранные песни От времени до (долгого) времени вам нужно будет «пусто» или удалить файл журнала, так как (в настоящее время) он не имеет ограничений по размеру. Это можно легко исправить, если хотите.

Сценарий

#!/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

Как использовать

Для сценария нужны как xdotool, так и wmctrl: sudo apt-get install xdotool wmctrl Скопируйте сценарий в пустой файл, сохраните его как log_vlc.py. Протестируйте его с терминала командой: python3 /path/to/log_vlc.py Откройте любую песню в VLC в любом случае (cli, gui), файл журнала должен быть создан и показать записанные песни. Если все работает нормально, добавьте в приложения для запуска: Dash> Startup Applications> Add. Добавьте команду: python3 /path/to/log_vlc.py

Объяснение

Один раз в две секунды сценарий:

От времени до (долгого) времени вы будете необходимо «удалить» или удалить файл журнала, так как (в настоящее время) он не имеет ограничений по размеру. Не нужно изменять файл .desktop, что означает, что он также работает, когда вы запускаете VLC из командной строки. (только), если название песни изменяется, очевидно, что воспроизводится новая песня, тогда имя песни записывается в файл журнала, с отметкой времени. 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
1
ответ дан 24 July 2018 в 19:55

Другие вопросы по тегам:

Похожие вопросы: