it-swarm.com.de

Spielen Sie eine zufällige MP3-Datei ab

Ich benötige einen Befehl, der eine zufällige MP3-Datei aus einem Verzeichnis abspielt. Bisher habe ich versucht

ls *.mp3 | shuf -n 1 | omxplayer

Jeder andere Spieler tut einfach so, als hätte er keinen Dateinamen erhalten und spuckt die Hilfe aus. Danke für die Hilfe!

3
aramsichord

Erstens mag ich Bash nicht. Das Leiten von Pfaden zu Prozessen ist nicht so nett und verursacht alle Arten von Verrücktheit, wenn dies nicht einfach so getan wird. Davon abgesehen können viele der Dinge, die Sie in Bash versuchen, die nicht mit Arbeiten oder Bedienen zu tun haben, mit (leider) mehr Code erledigt werden, aber mit wie Sie es wollen, in anderen Sprachen.

Da ich etwas gelangweilt war und daran interessiert war, etwas dafür zu erstellen, schrieb ich ein (sehr raues) Python Skript, das tun kann, wonach Sie suchen. Es mag komplex aussehen, aber es funktioniert ziemlich gut, und ich habe Kommentare abgegeben, wo auch immer dies erklärt wird.

ANMERKUNG: Ich habe dies nur mit VLC-Player und Rhythmbox auf meinem System und mit xdg-open getestet, wodurch der Standard-Handler der GUI für die angegebene Anwendung geöffnet wird Datei. In meinem Fall ist VLC die Standardeinstellung, die xdg-open aufruft. Wenn Sie sich in einer grafischen Benutzeroberfläche befinden und nur den Standard-Media-Player für die MP3-Datei verwenden möchten, verwenden Sie xdg-open für "Player".

Paketanforderungen auf Ihrem System:

  • python (Python 2.6 oder höher, aber nicht Python 3)
  • python-dev (wichtige Python-Bibliotheken)

Skript-Installationsvorgang:

Nicht wirklich viel Arbeit hier. Aber um es einfacher zu machen, folge diesen Schritten:

  1. Erstellen Sie einen bin -Ordner in Ihrem Ausgangsverzeichnis: mkdir /home/$USER/bin
  2. Wechseln Sie in den neuen Ordner 'bin': cd /home/$USER/bin
  3. Erstellen Sie eine Datei mit dem Namen randommp3. Kopieren Sie den Code aus dem folgenden Abschnitt "Code/Skript" und fügen Sie ihn mit einem Texteditor in diese Datei ein. Speichern Sie die Datei.
  4. Machen Sie die Datei ausführbar: chmod +x /home/$USER/bin/randommp3
  5. Viel Spaß, aber beachten Sie die folgenden Hinweise zur Verwendung:
    • Sie müssen lediglich angeben, welcher Media Player verwendet werden soll. oxmplayer wäre das, was Sie anstelle von player einfügen würden, wenn Sie die Datei ausführen.
    • Wenn Ihre Musik ist nicht in /home/$USER/Music (wobei $USER ist Derzeit angemeldeter Benutzer), müssen Sie außerdem den vollständigen Verzeichnispfad mit dem Argument --dir (oder einem seiner Aliase, wie im Abschnitt "Verwendung" unten erläutert) angeben. Wenn der Ordnerpfad Leerzeichen enthält, müssen Sie ihn in einfache Anführungszeichen setzen (z. B.) Geben Sie für das Verzeichnis "My Music" in einem bestimmten Pfad als /path/to/My Music für das Argument --dir ein.

Beispielausführung :

Öffnen Sie eine zufällige MP3-Datei aus dem Musikordner des Benutzers in dessen Ausgangsverzeichnis im GUI VLC-Player .

randommp3 vlc-wrapper

Öffnen Sie eine zufällige MP3-Datei von einem externen Laufwerk namens "MusicDrive", das unter Music Drive im Ordner /media im Media Player oxmplayer abgelegt ist

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

Verwendung

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.

Code: (oder ein Link, den Sie speichern können, wenn Sie wirklich so faul sind )

#!/usr/bin/python

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

if __== "__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)
3
Thomas Ward

Dieser Befehl sollte in bash funktionieren. Möglicherweise möchten Sie es im übergeordneten Ordner ausführen, in dem sich Ihre MP3-Dateien befinden.

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

oder ersetzen Sie omxplayer durch Ihren bevorzugten Media Player.

Oder ein anderer Befehl, der funktioniert, verwendet den xdg-open, um Ihren Standardplayer zu verwenden, wie @muru es kommentiert hat:

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

HINWEIS: Wenn Sie den -n 1 aus dem shuf entfernen, werden alle MP3-Dateien in einer gemischten Reihenfolge wiedergegeben. Dies erfordert jedoch die Verwendung des tatsächlichen Players und nicht xdg-open. Und das funktioniert hier nur im ersten Befehl. Einfach mal getestet.

3
Terrance