MPV:如何通过命令行获取正在播放的媒体信息?

MPV:如何通过命令行获取正在播放的媒体信息?

我想要获取包含当前正在播放的媒体的标题、状态(播放/暂停)、当前位置、总时间等信息的输出mpv

mocp例如,在播放器中,这很简单:mocp -i提供如下输出:

State: PLAY
File: /home/piotr/muz/09 Svantetic.mp3
Title: 1 Możdżer - Svantetic (Komeda)
Artist: Możdżer
SongTitle: Svantetic
Album: Komeda
TotalTime: 03:35
TimeLeft: 03:22
TotalSec: 215
CurrentTime: 00:13
CurrentSec: 13
Bitrate: 235kbps
AvgBitrate: 236kbps
Rate: 44kHz

是否可以获取此类信息mpv

更新:

似乎需要一些 lua 脚本。由于我不熟悉这种语言,我将不胜感激任何提示。我对一个脚本感兴趣,该脚本在从命令行调用时将提供上述信息。

更新2

显然,要在 mpv 中获取如此简单的信息,必须启动 mpv 套接字,然后通过解析 JSON 提取数据。现在我以快速而肮脏的解决方案结束(仍然不敢相信没有内置功能......):

mpv <file> --input-ipc-server=/tmp/mpvsocket

和一个 bash 脚本:

POSITION=$(echo '{ "command": ["get_property_string", "time-pos"] }' | socat - /tmp/mpvsocket | jq .data | tr '"' ' ' | cut -d'.' -f 1)

REMAINING=$(echo '{ "command": ["get_property_string", "time-remaining"] }' | socat - /tmp/mpvsocket | jq .data | tr '"' ' ' | cut -d'.' 
-f 1)

METADATA=$(echo '{ "command": ["get_property", "filtered-metadata"] }' | socat - /tmp/mpvsocket | jq ".data.Artist, .data.Album, .data.Title")

echo $METADATA
printf '%d:%02d:%02d' $(($POSITION/3600)) $(($POSITION%3600/60)) $(($POSITION%60))
printf ' %d:%02d:%02d\n' $(($REMAINING/3600)) $(($REMAINING%3600/60)) $(($REMAINING%60))

给出输出:

"Nils Frahm" "Felt" "Keep"
0:01:33 0:01:53

(注意:METADATA 仅适用于带有标签的文件,要从在线流媒体获取信息,必须应用其他命令;我使用jq从 /tmp/mpvsocket 解析 JSON 数据)

答案1

这个mpv脚本统计数据.lua将显示当前播放媒体的信息,按 i,I,1,2,3 将其命名为 stats.lua 放入 ~/.config/mpv/scripts/stats.lua,每次启动 mpv 时都会加载,如果始终加载不希望做

mpv --script=~/.config/mpv/scripts/mynotify.lua /path/to/media.webm

(脚本的完整路径可能需要)

相关内容