WSL Bash VLC Musik Zufallswiedergabe Musikplayer

Musik zufällig mit VLC in WSL Bash abspielen

Ich habe ein Musikplayer-ähnliches Programm geschrieben, das Musik zufällig mit VLC in WSL Linux Bash unter Windows 10 abspielt, und teile es hier. Es funktioniert auch wahrscheinlich mit anderen Playern außer VLC. Aber ich benutze sowieso nur VLC.

Shou Arisaka
6 Min. Lesezeit
7. Okt. 2025

Ich habe ein Musikplayer-ähnliches Programm geschrieben, das Musik zufällig mit VLC in WSL Linux Bash unter Windows 10 abspielt, und teile es hier.

Es ist zufällig entstanden. Es funktioniert auch wahrscheinlich mit anderen Playern außer VLC. Aber ich benutze sowieso nur VLC.

Werkzeug zum zufälligen Abspielen von Musikdateien mit VLC

Dieses Skript dient dazu, Musikdateien in einem angegebenen Verzeichnis zufällig abzuspielen, und funktioniert in der WSL (Windows Subsystem for Linux) Bash-Umgebung. Im Folgenden erkläre ich die Hauptteile des Skripts und seine Funktionsweise Schritt für Schritt.

shufmusic(){

    : Play randomized music on current directory with vlc.exe. compatible with wsl bash.
    : e.g. shufmusic
    : e.g. shufmusic mp4

    # Erstelle eine Liste von Musikdateien und speichere sie in list.txt
    # Liste Dateien mit den Erweiterungen wav, mp3, flac, wave auf
    [[ "${1}" =~ mp4|video ]] && find -L -regextype posix-extended -regex '.*\.(wav|mp3|flac|wave|mp4|avi)' > shufmusic_list.tmp.txt || find -L -regextype posix-extended -regex '.*\.(wav|mp3|flac|wave)' > shufmusic_list.tmp.txt

    # Überprüfe, ob die Listendatei nicht leer ist
    [ -s shufmusic_list.tmp.txt ] || { printf "\n\n${red}E: The list file empty. It's seems something worng.${end}\nINFO: You may have to use ${cyn}shufmusic mp4${end}.\n\n" ; return 1 ; }

    printf "INFO: $(wc -l shufmusic_list.tmp.txt | awk '{print $1}') files found.\n"

    # Hauptschleife
    while [ true ];
    do
        sleep 1

        # Wenn die Listendatei nicht leer ist, wähle zufällig einen Song
        [ -s shufmusic_list.tmp.txt ] && currentMusic="$(cat shufmusic_list.tmp.txt | shuf | head -n 1)" || { printf "\n\n${red}E: The list file is being empty.${end}\n\n" ; return 1 ; }

        # Überprüfe, ob currentMusic nicht leer ist
        [ -z "${currentMusic}" ] && { printf "\n\n${red}E: \$currentMusic is empty.${end}\n\n" ; return 1 ; }

        # Entferne den ausgewählten Song aus der Liste
        perl -i -pe "BEGIN{undef $/;} s/$(printf "%q" "$currentMusic" | sed -Ee 's/\//\\\//g')\n//smg" shufmusic_list.tmp.txt

        # Spiele den Song mit vlc.exe ab
        vlc.exe "$(wslpath -w "$(realpath "${currentMusic}")")" &

        # Warte entsprechend der Songlänge
        [[ "${currentMusic##*.}" =~ mp4|avi ]] && sleep "$(ffprobe -i "${currentMusic}" -show_entries format=duration -v quiet -of csv="p=0")" || sleep "$(sox --info -D "${currentMusic}")"

        sleep 1
    done

}

Dieses Skript dient zum Abspielen von Musikdateien in einem angegebenen Verzeichnis und wird in folgenden Schritten erklärt:

  1. Der find-Befehl wird verwendet, um eine Liste von Musikdateien (.wav, .mp3, .flac, .wave) zu generieren und in shufmusic_list.tmp.txt zu speichern. Diese Liste wird für die Zufallswiedergabe verwendet. Wenn $1 (das erste an das Skript übergebene Argument) mp4 oder video ist, werden auch mp4- und avi-Dateien zur Liste hinzugefügt.

  2. Es wird überprüft, ob die Listendatei nicht leer ist, und wenn sie leer ist, wird eine Fehlermeldung ausgegeben und das Skript beendet.

  3. Die Hauptschleife beginnt und ist als Endlosschleife eingerichtet.

  4. Innerhalb der Schleife gibt es eine Pause von 1 Sekunde.

  5. Wenn die Listendatei nicht leer ist, wird zufällig ein Song ausgewählt und in currentMusic gespeichert.

  6. Es wird überprüft, ob currentMusic nicht leer ist, und wenn es leer ist, wird eine Fehlermeldung ausgegeben und das Skript beendet.

  7. Der in currentMusic enthaltene Dateiname wird aus der Listendatei entfernt und der Song abgespielt.

  8. Je nach Dateiformat wird die Wiedergabedauer mit ffprobe (für mp4 oder avi) oder sox (für andere Formate) ermittelt und entsprechend gewartet.

  9. Am Ende gibt es eine Pause von 1 Sekunde, bevor zum nächsten Song gewechselt wird.

Installation zusätzlicher Pakete usw.

Um dieses Bash-Skript auszuführen, sind einige externe Pakete und Werkzeuge erforderlich. Hier ist eine Erklärung dieser Pakete:

  1. vlc.exe:

    • VLC Media Player ist eine bekannte Mediaplayer-Anwendung zum Abspielen von Musik- und Videodateien. In diesem Skript wird vlc.exe verwendet, um Musikdateien abzuspielen. vlc.exe ist normalerweise die Windows-Version von VLC Media Player. Sie müssen diese Anwendung installieren und den Pfad setzen.
  2. find:

    • Der find-Befehl wird verwendet, um Dateien in einem angegebenen Verzeichnis zu suchen. In diesem Skript wird er verwendet, um Musikdateien mit bestimmten Erweiterungen zu finden. Normalerweise können Sie den find-Befehl über Linux-Distributionen (oder den in WSL bereitgestellten Paketmanager) installieren. Unter Ubuntu zum Beispiel mit dem Befehl sudo apt-get install findutils.
  3. shuf:

    • Der shuf-Befehl wird verwendet, um Zeilen in einer Textdatei zufällig anzuordnen. In diesem Skript wird shuf verwendet, um zufällig Songs aus der Musikdateien-Liste auszuwählen. shuf ist normalerweise in Linux-Distributionen enthalten, keine zusätzliche Installation erforderlich.
  4. wslpath:

    • Der wslpath-Befehl wird verwendet, um Windows-Pfade und Linux-Pfade zu konvertieren. In diesem Skript wird wslpath verwendet, um Windows-Pfade in Linux-Pfade zu konvertieren und an vlc.exe zu übergeben. wslpath ist ein in WSL bereitgestelltes Dienstprogramm und ist normalerweise automatisch verfügbar, wenn Sie WSL installieren.
  5. realpath:

    • Der realpath-Befehl wird verwendet, um den absoluten Pfad einer angegebenen Datei zu erhalten. In diesem Skript wird realpath verwendet, um den absoluten Pfad von currentMusic zu erhalten. realpath ist normalerweise in Linux-Distributionen enthalten, keine zusätzliche Installation erforderlich.
  6. ffprobe:

    • ffprobe ist Teil des FFmpeg-Projekts, ein Befehl zum Abrufen von Eigenschaften und Metadateninformationen von Video- und Audiodateien. In diesem Skript wird ffprobe verwendet, um die Wiedergabedauer von mp4- oder avi-Dateien zu erhalten. ffprobe ist normalerweise ein mit FFmpeg bereitgestelltes Werkzeug. Wenn Sie FFmpeg installieren, ist auch ffprobe verfügbar.
  7. sox:

    • sox ist ein Kommandozeilen-Werkzeug zur Verarbeitung und Manipulation von Audiodateien. In diesem Skript wird sox verwendet, um die Wiedergabedauer von Musikdateien zu erhalten. sox kann über Linux-Distributionen installiert werden. Unter Ubuntu zum Beispiel mit dem Befehl sudo apt-get install sox.

Durch die Installation dieser Werkzeuge und Pakete und das Setzen der Pfade sollte dieses Skript normal ausgeführt werden können. Stellen Sie insbesondere sicher, dass vlc.exe, find, shuf, wslpath zur Umgebungsvariable PATH hinzugefügt sind.

Zusammenfassung

Es ist ganz praktisch, sage ich als jemand, der es selbst erstellt hat. Wenn ich einen guten Song entdecke, cd ich einfach in den Ordner mit dieser Datei und führe dies aus, und schon kann ich die Zufallswiedergabe starten, was perfekt für den Bedarf ist, einfach Musik laufen zu lassen. VLC hat auch Playlist-Funktionen, aber Drag & Drop ist lästig, und bei FLAC ist es schwer. Mit diesem Befehl, wenn Sie ihn in einem Verzeichnis mit symbolischen Links ausführen, können Sie problemlos zehntausende von High-Resolution-Dateien zufällig abspielen. Schön.

Der Code wird auf GitHub oder .bashrc aktualisiert, wenn es Updates gibt.

Diesen Artikel teilen

Shou Arisaka 7. Okt. 2025

🔗 Links kopieren