如何抑制 mpg123 中的欢迎信息,但保留歌曲?

如何抑制 mpg123 中的欢迎信息,但保留歌曲?

我已经为此绞尽脑汁有一段时间了。

答案1

事实证明,管道缓冲导致 mpg123 的-C选项出现问题。这可以通过使用--line-bufferedgrep 或 sed 中的选项来解决-u

最后,我最终使用的标志集是:

mpg123 -Z -C --title */* 2>&1 | grep --line-buffered -Ev "High Performance|written and copyright by|without any warranty but with best wishes|Terminal control enabled|MPEG 1.0|Decoding of" | sed -uE 's/Playing MPEG stream [0-9]+ of [0-9]+: //' | sed -uE "s/Directory: //" | sed -uE "s/\.\.\.//" | sed -uE '/^\s*$/d'

我正在一步一步地浏览这些选项。其中一些回答了更广泛的问题,即拥有方便的 mpg123 设置。

  • -Z是永恒的随机洗牌
  • -C允许控制命令
  • --title将终端的标题更改为当前歌曲的标题
  • */*在当前子目录中查找文件。如果文件位于给定目录中,则“*”就足够了。
  • 2>&1从标准错误(mpg123 打印到的)重定向到标准输出,可以使用管道进行操作
  • --line-buffered在 grep 和-used 上的标志避免缓冲,这就是给我带来问题的原因。
  • 其他标志只是正则表达式切换,并不是问题的核心。

然后我为该命令起了别名以方便使用。 alias pmr="clear; mpg123 -Z -C --title */* 2>&1 | grep --line-buffered -Ev 'High Performance|written and copyright by|without any warranty but with best wishes|Terminal control enabled|MPEG 1.0|Decoding of' | sed -uE 's/Playing MPEG stream [0-9]+ of [0-9]+: //' | sed -uE 's/Directory: //' | sed -uE 's/\.\.\.//' | sed -uE '/^\s*$/d'" ## pmr := play music recursively

tail 有-f一个标志来避免缓冲,但它一直给我带来问题。

相关内容