通过notify.send给mpv添加通知?

通过notify.send给mpv添加通知?

是否可以在每次 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

有一个关于该问题的评论并附有截图:

            SS #1

从这个线程看来,它mpv至少在某种程度上能够做你想做的事情。我相信您必须编写一些代码才能实现您想要的功能。

探索 D 总线

如果已经通过 D-Bus 发送消息,则解决此问题的另一种方法mpv是使用 cli 工具dbus-monitor。使用此工具,您将能够捕获所有正在记录的事件,也许您将能够捕获来自mpv.

$ sudo dbus-monitor --system

笔记: mpv是一个分支mplayer2,我知道mplayer2它确实利用了 D-Bus,所以我希望mpv做同样的事情。

参考

相关内容