5

mpv启动后,有没有办法从 , 获取当前播放文件的完整路径mpv

我看到了这个问题,但它没有显示如何获取属性,只是如何发送命令。

编辑:通过“获取完整路径”,我的意思是从编程方式;从另一个程序或终端,而不是通过在应用程序本身上使用mpv命令/键绑定。mpv

4

3 回答 3

3

为此,您必须从选项开始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-directorypath属性。可以使用 解析响应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,那最终可能会弄乱方案/位置

于 2020-06-25T19:05:50.077 回答
1

试试这个 :

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.
于 2021-04-11T10:09:28.160 回答
0

把它放在你的 mpv 配置文件中以在打开时显示完整路径

osd-playing-msg=${path}
于 2021-06-07T05:54:34.170 回答