【发布时间】:2020-10-16 08:07:17
【问题描述】:
mpv启动后,有没有办法从mpv获取当前播放文件的完整路径?
我看到this 的问题,但它没有显示如何获取属性,只是如何发送命令。
编辑:“获取完整路径”是指以编程方式;从另一个程序或终端,而不是通过在 mpv 应用程序本身上使用 mpv 命令/键绑定。
【问题讨论】:
mpv启动后,有没有办法从mpv获取当前播放文件的完整路径?
我看到this 的问题,但它没有显示如何获取属性,只是如何发送命令。
编辑:“获取完整路径”是指以编程方式;从另一个程序或终端,而不是通过在 mpv 应用程序本身上使用 mpv 命令/键绑定。
【问题讨论】:
为此,您必须使用 --input-ipc-server 选项启动 mpv,或将其放入您的 mpv.conf 文件中。看起来像:
--input-ipc-server=/tmp/mpvsocket
或者在mpv.conf 文件中没有破折号:
input-ipc-server=/tmp/mpvsocket
套接字连接到使用相同input-ipc-server 启动的最新mpv 实例。
然后,您可以使用如下命令:
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"
即
# -- 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}
【讨论】:
mpv 本身获取路径。已更新问题以使其更加明显