mpvpode executar scripts de usuário lua , alguns dos quais estão listados aqui . Um deles, notify irá gerar um sofisticado notify-send. Ele tem algumas dependências e não consegui fazê-lo funcionar na minha configuração, mas o código bastante simplificado a seguir funcionou para mim. Coloque este arquivo
~/.config/mpv/scripts/mynotify.lua(crie o diretório, se necessário) e execute mpvcomo de costume. Você deve ver uma notificação quando o artista ou o título mudar.
-- based on https://github.com/rohieb/mpv-notify
-- https://unix.stackexchange.com/a/455198/119298
lastcommand = nil
function string.shellescape(str)
return "'"..string.gsub(str, "'", "'\"'\"'").."'"
end
function do_notify(a,b)
local command = ("notify-send -a mpv -- %s %s"):format(a:shellescape(),
b:shellescape())
if command ~= lastcommand then
os.execute(command)
lastcommand = command
end
end
function notify_current_track()
data = mp.get_property_native("metadata")
if data then
local artist = (data["ARTIST"] or data["artist"] or " ")
local title = (data["TITLE"] or data["title"] or " ")
if artist..title~=" " then
do_notify(artist, title)
return
end
end
local data = mp.get_property("path")
if data then
local file = data:gsub("^.-([^/]+)$","%1")
file = file:gsub("%....$","") -- delete 3 char suffix
local dir = data:gsub("^.-([^/]+)/[^/]*$","%1")
do_notify(dir, file)
end
end
mp.register_event("file-loaded", notify_current_track)
Esta versão atualizada aguarda os eventos que são enviados quando um novo arquivo está pronto para ser reproduzido. Ele tenta encontrar os metadados e extrair o artista e o título deles. Se estiver vazio, ele obtém o nome de arquivo atual ( "path") e divide a última parte depois /para obter um nome de arquivo, do qual remove qualquer sufixo de 3 caracteres à direita. Ele tenta localizar a última parte do diretório do nome do arquivo e usa esses 2 itens na notificação. Se seus diretórios estão estruturados com, digamos, artist/albumname/tracktitle.aac , você pode alterar isso com uma correspondência de padrão e extração mais apropriadas. Veja a seção lua sobre padrões .
mpvtem uma biblioteca de gancho de evento, libmpv. Há um problema pedindo essencialmente a mesma coisa aqui intitulada: libmpv event hooking in C# #3810 .
Há um comentário sobre esse problema com uma captura de tela:
Olhando para este segmento, parece que mpvé pelo menos um pouco capaz de fazer o que você deseja. Acredito que você terá que escrever algum código para implementar o que deseja.
Explorando o D-Bus
A outra maneira de abordar isso caso mpvjá esteja enviando mensagem via D-Bus é usar a ferramenta cli dbus-monitor. Com esta ferramenta você poderá capturar todos os eventos que estão sendo registrados, e talvez você possa capturar os vindos de mpv.
$ sudo dbus-monitor --system
NOTA:mpv é um fork de mplayer2e eu sei mplayer2que utiliza D-Bus, então eu esperaria mpvfazer o mesmo.
mpv
pode executar scripts de usuário lua , alguns dos quais estão listados aqui . Um deles, notify irá gerar um sofisticadonotify-send
. Ele tem algumas dependências e não consegui fazê-lo funcionar na minha configuração, mas o código bastante simplificado a seguir funcionou para mim. Coloque este arquivo~/.config/mpv/scripts/mynotify.lua
(crie o diretório, se necessário) e executempv
como de costume. Você deve ver uma notificação quando o artista ou o título mudar.Esta versão atualizada aguarda os eventos que são enviados quando um novo arquivo está pronto para ser reproduzido. Ele tenta encontrar os metadados e extrair o artista e o título deles. Se estiver vazio, ele obtém o nome de arquivo atual (
"path"
) e divide a última parte depois/
para obter um nome de arquivo, do qual remove qualquer sufixo de 3 caracteres à direita. Ele tenta localizar a última parte do diretório do nome do arquivo e usa esses 2 itens na notificação. Se seus diretórios estão estruturados com, digamos, artist/albumname/tracktitle.aac , você pode alterar isso com uma correspondência de padrão e extração mais apropriadas. Veja a seção lua sobre padrões .mpv
tem uma biblioteca de gancho de evento,libmpv
. Há um problema pedindo essencialmente a mesma coisa aqui intitulada: libmpv event hooking in C# #3810 .Há um comentário sobre esse problema com uma captura de tela:
Olhando para este segmento, parece que
mpv
é pelo menos um pouco capaz de fazer o que você deseja. Acredito que você terá que escrever algum código para implementar o que deseja.Explorando o D-Bus
A outra maneira de abordar isso caso
mpv
já esteja enviando mensagem via D-Bus é usar a ferramenta clidbus-monitor
. Com esta ferramenta você poderá capturar todos os eventos que estão sendo registrados, e talvez você possa capturar os vindos dempv
.NOTA:
mpv
é um fork demplayer2
e eu seimplayer2
que utiliza D-Bus, então eu esperariampv
fazer o mesmo.Referências