我想要获取包含当前正在播放的媒体的标题、状态(播放/暂停)、当前位置、总时间等信息的输出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
(脚本的完整路径可能需要)