如何查询mplayer当前正在播放的歌曲?

Gep*_*nzo 5 sound command-line music mplayer playlists

我正在使用此命令在后台播放音乐(没有 GUI):

mplayer -shuffle -playlist /home/geppettvs/NAS/Musica/playlist.m3u </dev/null >/dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

这会导致从 NAS 的 Music 文件夹中收集音乐,并在后台播放。

播放列表本身只是一个使用 Rhythmbox 或任何其他具有管理播放列表功能的音乐播放器软件制作的播放列表文件。

因此,mplayer 以随机歌曲开始,之后它将继续不间断地播放音乐。

我需要以某种方式查询 mplayer 并询问它当前正在播放的歌曲名称,以便将其放置在某处,比方说:将其写入文本文件以备后用。(只是没有路径的文件名)

现在,一旦 mplayer 开始播放播放列表中的音乐,一些查询 mplayer 正在播放的内容的努力将导致“playlist.m3u”作为标题名称而不是实际的 mp3 文件名。

备择方案

我愿意接受任何替代方案,只要有更好的方法可以在没有 GUI 的情况下做到这一点。请告诉我,我会尝试的。欢迎任何想法。

Lui*_*ado 5

像这个疯狂的脚本应该工作:

lsof -c mplayer | fgrep ".mp3" | awk -F"/" '{ print $NF; }' | cut -d'.' -f1
Run Code Online (Sandbox Code Playgroud)

基本上它是这样工作的:

  • lsof 部分查找所有因为 mplayer 打开的文件
  • fgrep 抓取 .mp3 假设它是一个 mp3。我使用 fgrep 是因为我还需要考虑点符号。
  • awk 进来并基本上根据文件所在位置的斜杠分隔所有内容,然后 $NF 将最后一次出现。
  • 由于您想要不带 mp3 部分的文件,因此我为它做了一个基本的剪辑,但这也可以用 awk 来完成。

所以现在你有一种从 mplayer 中抓取歌曲的方法。

请注意,由于 lsof 检查打开的文件,因此需要运行 mplayer 才能使其工作。