mpv
启动后,有没有办法从 , 获取当前播放文件的完整路径mpv
?
我看到了这个问题,但它没有显示如何获取属性,只是如何发送命令。
编辑:通过“获取完整路径”,我的意思是从编程方式;从另一个程序或终端,而不是通过在应用程序本身上使用mpv
命令/键绑定。mpv
为此,您必须从选项开始mpv
,--input-ipc-server
或将其放入mpv.conf
文件中。那看起来像:
--input-ipc-server=/tmp/mpvsocket
或文件中没有破折号mpv.conf
:
input-ipc-server=/tmp/mpvsocket
套接字连接到使用相同启动的最新mpv
实例input-ipc-server
。
然后,您可以使用如下命令:
echo '{ "command": ["get_property", "<some property>"] }' | socat - /tmp/mpvsocket
例如:
$ echo '{ "command": ["get_property", "path"] }' | socat - /tmp/mpvsocket
{"data":"01 - Don't Know Why.mp3","request_id":0,"error":"success"}
您可以通过执行获取属性列表mpv --list-properties
要获得完整路径,请结合working-directory
和path
属性。可以使用 解析响应jq
,因此对于所需的输出:
#!/bin/sh
SOCKET='/tmp/mpvsocket'
# pass the property as the first argument
mpv_communicate() {
printf '{ "command": ["get_property", "%s"] }\n' "$1" | socat - "${SOCKET}" | jq -r ".data"
}
WORKING_DIR="$(mpv_communicate "working-directory")"
FILEPATH="$(mpv_communicate "path")"
printf "%s/%s\n" "$WORKING_DIR" "$FILEPATH"
编辑:我已经为上述脚本添加了额外的错误处理;mpv-currently-playing
. 除非您确定它正在播放本地文件,否则不应总是尝试计算绝对路径。如果它是一个 URL,那最终可能会弄乱方案/位置
试试这个 :
echo '{ "command": ["get_property", "playlist"] }' | socat - /tmp/mpvsocket |jq '.data[].filename'
"/mnt/d6/media/vid.mp4"
IE
# -- 1
echo '{ "command": ["get_property", "playlist"] }' | socat - /tmp/mpvsocket # |jq . '.data[].filename'
{"data":[{"filename":"/mnt/d6/media/vid.mp4","current":true,"playing":true}],"request_id":0,"error":"success"}
# -- 2
echo '{ "command": ["get_property", "playlist"] }' | socat - /tmp/mpvsocket |jq . # '.data[].filename'
{
"data": [
{
"filename": "/mnt/d6/media/vid.mp4",
"current": true,
"playing": true
}
],
"request_id": 0,
"error": "success"
}
# -- 3
echo '{ "command": ["get_property", "playlist"] }' | socat - /tmp/mpvsocket |jq '.data[].filename'
"/mnt/d6/media/vid.mp4"
# -- 4
enjoy ;)
# -- jq
https://www.baeldung.com/linux/jq-command-json
https://stedolan.github.io/jq/tutorial/
jq is like sed for JSON data :
you can use it to slice and filter and map and transform structured data
with the same ease that sed, awk, grep and
friends let you play with text.
把它放在你的 mpv 配置文件中以在打开时显示完整路径
osd-playing-msg=${path}