我想用简单的bash脚本播放MP3文件。我希望我的bash脚本能够在任何操作系统或发行版上工作,所以我不想将其锁定到任何特定的MP3软件。如何使用任何可用的MP3播放软件轻松播放MP3?
答案 0 :(得分:1)
我写了一个简单的脚本来检查已知MP3工具的大清单,看看是否安装了任何这些工具(使用the POSIX-standard "command -v" tool)。一旦脚本找到它识别的MP3程序,该程序将用于简单地播放文件(如果可能,没有控制台输出),然后退出。 (脚注:cvlc,列表中的最后一个玩家,将打开gui程序VLC播放文件,然后自动关闭它。如果您不接受,我建议从列表中删除cvlc。)
这个脚本几乎可以保证在Ubuntu和Mac OS X(分别附带ffmpeg和afplay)上完美运行,并且极有可能在其他平台上运行。万一没有找到MP3软件,会向stderr打印一条消息(此消息包含BEL character)。
如果您需要绝对100%保证MP3将被播放(或者您需要更多选项,如音量控制),您应该要求您的用户安装ffmpeg或其他东西。但是对于相对简单的脚本中的快速和肮脏的声音效果,这可能是完美的快速解决方法!
无论如何,足够漫无边际,这是剧本:
#!/usr/bin/env bash
#
# playmp3 by Hayden Schiff (oxguy3)
#
# Play an MP3 with whatever MP3 software is already installed.
# Do whatever you want with this; the license is WTFPL.
#
# Usage: playmp3 filename.mp3
# or: playmp3 /path/to/file.mp3
player=""
declare -a players=(
"afplay" # OS X built-in
"ffplay -nodisp" # ffmpeg
"mpg123 --quiet"
"maplay"
"mplayer -really-quiet -noconsolecontrols"
"play -V1" # SoX
"cvlc --play-and-exit" # VLC curses interface
)
for p in "${players[@]}"; do
pBase=$(echo $p | cut -d' ' -f1)
if command -v $pBase >/dev/null; then
player="$p"
break
fi
done
if [ -n "$player" ]; then
$player $@
else
>&2 echo -e "\aCould not find an MP3 player"
fi
如果您不想将“playmp3”包含为单独的文件,可以通过删除hashbang(脚本的第一行)并使用{包围脚本的其余部分来将其嵌入到bash脚本中分别为{1}}和function playmp3() {
。
如果对此脚本进行了更新,它们将显示为in my GitHub repo(尽管我会尽量记住将此帖子保持在StackOverflow的最新状态。)