播放随机 mp3 文件

播放随机 mp3 文件

我需要一个命令来播放目录中的随机 mp3。到目前为止,我已经尝试过

ls *.mp3 | shuf -n 1 | omxplayer

每个不同的播放器都表现得好像没有收到文件名并吐出帮助。谢谢帮助!

答案1

首先,我不喜欢 Bash。将路径管道化到进程并不好,如果不“恰到好处”地完成,会导致各种奇怪的情况。话虽如此,你在 Bash 中尝试做的许多工作或操作都不太好的事情可以用(不幸的是)更多的代码来完成,但可以工作以您希望的方式使用其他语言。

因此,由于有点无聊,并且对为此创建一些东西感兴趣,我去编写了一个(非常粗糙的)Python 脚本,它可以完成您想要的功能。它可能看起来很复杂,但效果很好,我已经在任何地方添加了注释或在下面进行了解释。

笔记:我仅使用系统上的 VLC 播放器和 Rhythmbox 对此进行了测试,并使用xdg-open它们打开 GUI 中给定文件的默认处理程序。就我而言,VLC 是默认调用的xdg-open。如果您使用的是 GUI,并且只想使用默认的媒体播放器播放 MP3 文件,请使用xdg-open“播放器”。

系统上的软件包要求:

  • python(Python 2.6 或更高版本,但不是Python 3)
  • python-dev(重要的 Python 库)

脚本安装过程:

这里其实不需要做太多工作。但为了简单起见,请按照以下步骤操作:

  1. bin在您的主目录中 创建一个文件夹:mkdir /home/$USER/bin
  2. 将目录更改为新的“bin”文件夹:cd /home/$USER/bin
  3. 创建一个名为 的文件randommp3。使用文本编辑器将下面“代码/脚本”部分的代码复制并粘贴到此文件中。保存该文件。
  4. 使文件可执行:chmod +x /home/$USER/bin/randommp3
  5. 玩得开心,但请注意以下使用要点:
    • 您别无选择,只能指定要使用的媒体播放器。 将是您在执行文件时oxmplayer所要放置的内容。player
    • 如果你的音乐不是/home/$USER/Music(其中是$USER当前登录的用户),则还必须使用参数指定完整目录路径--dir(或其别名之一,如下面的“用法”部分所述)。如果文件夹路径包含任何如果没有任何空格,则必须将其括在单引号中(例如,对于给定路径中的“我的音乐”目录,您可以将其作为参数输入/path/to/My Music--dir

示例执行

在 GUI VLC 播放器中,从用户主目录中的音乐文件夹中打开一个随机 MP3 文件

randommp3 vlc-wrapper

Music Drive打开位于文件夹中的外部驱动器“MusicDrive”中的随机 MP3 文件/media,在媒体播放器中oxmplayer

randommp3 --dir '/media/Music Drive' oxmplayer

用法

randommp3 [-h] [--dir DIRPATH] player

Open a random MP3 in the player of choice, or the default player

positional arguments:
  player                The executable name of the media player to open the
                        MP3 with. If none specified, uses the system default
                        player.

optional arguments:
  -h, --help            show this help message and exit
  --dir DIRPATH, --directory DIRPATH, --music-dir DIRPATH
                        The path to the directory where your music is stored.
                        If the path has spaces, wrap the entire path in
                        single-quotes ('/home/ubuntu/My Music/' for example).
                        If not specified, the current user's Music directory
                        in their /home/ folder is used.

代码:(或如果你真的很懒的话可以保存这个链接

#!/usr/bin/python

import getpass
import subprocess as sp
import os
import glob
import random
import argparse

if __name__ == "__main__":
    # Parse arguments to the script
    argparser = argparse.ArgumentParser(description="Open a random MP3 in the player of choice, or the default player",
                                        add_help=True)
    argparser.add_argument('--dir', '--directory', '--music-dir', dest='dirpath', type=str,
                           default=str('/home/' + getpass.getuser() + '/Music'), required=False,
                           help="The path to the directory where your music is stored. If the path has spaces, wrap the "
                                "entire path in single-quotes ('/home/ubuntu/My Music/' for example). If not specified, "
                                "the current user's Music directory in their /home/ folder is used.")
    argparser.add_argument('player', type=str, help="The executable name of the media player "
                                                    "to open the MP3 with. If none specified, "
                                                    "uses the system default player.")

    # Using the above 'argparser' items, get the arguments for what we're going to be using.
    args = argparser.parse_args()

    # Gp to the directory your music is in.
    os.chdir(args.dirpath)
    mp3s = glob.glob('*.mp3')

    # Modify the directory path to make sure we have the trailing slash
    dirpath = args.dirpath
    if dirpath[-1] not in '/\\':
        dirpath += '/'

    # Actually open the MP3 file, and /dev/null to suppress output messages from the process.
    DEV_NULL = open(os.devnull, 'w')
    execpath = [args.player, '%s%s' % (dirpath, str(random.choice(mp3s)))]
    sp.Popen(execpath, stdout=DEV_NULL, stderr=DEV_NULL)

答案2

此命令应在 bash 中运行。您可能希望从 MP3 文件所在的父文件夹中运行它。

find . -type f -name '*.mp3' | shuf -n 1 | xargs -d "\n" omxplayer

omxplayer用您最喜欢的媒体播放器替换。

或者另一个有效的命令是使用xdg-open你的默认播放器,就像@muru 所评论的那样:

xdg-open "$(find . -type f -name '*.mp3' | shuf -n 1)"

笔记:-n 1如果从 中 删除shuf,则它将按随机顺序播放所有 MP3 文件。但这需要使用实际的播放器而不是xdg-open。并且它只在此处的第一个命令中有效。刚刚测试过。

答案3

Debian linux 有一个名为的 perl 程序randomplay,可以播放一个或多个指定目录中的 *.mp3 和其他音频格式的文件。我已经用了好几年了。

例如,在我的顶级音乐目录中,以下内容播放来自所有给定目录的随机歌曲列表:

randomplay artist1 artist2 artist3

由于它是 perl,我推测只要安装了依赖项,它就可以在任何 Linux 系统上运行。不知道它是否能在其他操作系统上运行。

编辑重新阅读一下这个问题,听起来这个人可能只想播放一首随机歌曲。在这种情况下,这个--tracks=n论点很有用:

randomplay --tracks=1 directory

相关内容