是否可以在每次 mpv 开始播放时生成一个简短的通知?也许通过notify-send
?
答案1
mpv
能跑卢阿用户脚本,其中列出了一些这里。其中之一,通知将生成一个复杂的notify-send
.它有一些依赖项,我无法让它在我的设置中工作,但以下大大简化的代码对我有用。将此文件放入
~/.config/mpv/scripts/mynotify.lua
(如果需要,创建目录),然后mpv
照常运行。当艺术家或标题发生变化时,您应该会看到一条通知。
-- 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)
此更新版本等待新文件准备好播放时发送的事件。它尝试查找元数据并从中提取艺术家和标题。如果为空,则获取当前文件名 ( "path"
) 并拆分出最后一部分/
以获取文件名,并从中删除任何尾随的 3 个字符后缀。它尝试查找文件名的最后一个目录部分,并在通知中使用这两项。如果您的目录结构如下:艺术家/专辑名称/tracktitle.aac,您可能希望通过更合适的模式匹配和提取来更改此设置。请参阅 lua 部分图案。
答案2
mpv
有一个事件挂钩库,libmpv
.这里有一个问题要求本质上相同的东西,标题为:C# 中的 libmpv 事件挂钩 #3810。
有一个关于该问题的评论并附有截图:
从这个线程看来,它mpv
至少在某种程度上能够做你想做的事情。我相信您必须编写一些代码才能实现您想要的功能。
探索 D 总线
如果已经通过 D-Bus 发送消息,则解决此问题的另一种方法mpv
是使用 cli 工具dbus-monitor
。使用此工具,您将能够捕获所有正在记录的事件,也许您将能够捕获来自mpv
.
$ sudo dbus-monitor --system
笔记: mpv
是一个分支mplayer2
,我知道mplayer2
它确实利用了 D-Bus,所以我希望mpv
做同样的事情。