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, 보다 적절한 패턴 일치 및 추출을 통해 이 설정을 변경할 수 있습니다. 루아 섹션을 참조하세요무늬.
답변2
mpv
이벤트 후킹 라이브러리가 있습니다 libmpv
. 다음은 본질적으로 동일한 것을 요구하는 질문입니다.C# #3810의 libmpv 이벤트 후킹.
스크린샷에 문제에 대한 의견이 있습니다.
mpv
이 스레드를 보면 적어도 원하는 것을 어느 정도 수행할 수 있는 것 같습니다 . 원하는 것을 달성하려면 몇 가지 코드를 작성해야 한다고 생각합니다.
D-Bus 살펴보기
이미 D-Bus를 통해 메시지를 보내고 있다면 이 문제를 해결하는 또 다른 방법은 mpv
cli 도구를 사용하는 것입니다 dbus-monitor
. 이 도구를 사용하면 기록되는 모든 이벤트를 캡처할 수 있으며, 에서 오는 이벤트를 캡처할 수도 있습니다 mpv
.
$ sudo dbus-monitor --system
노트: mpv
포크 mplayer2
이고 D-Bus를 활용한다는 것을 알고 있으므로 동일한 작업을 수행하기를 mplayer2
바랍니다 .mpv