Играйте случайный mp3 файл

Мне нужна команда, которая играет случайный mp3 из каталога. До сих пор я попробовал

ls *.mp3 | shuf -n 1 | omxplayer

Каждый различный плеер просто действует как он, не получил имя файла и выкладывает справку. Спасибо за справку!

3
задан 3 March 2017 в 04:33

2 ответа

Эта команда должна работать в ударе. Вы могли бы хотеть выполнить его от того, чтобы быть в родительской папке того, где Ваши файлы 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
ответ дан 1 December 2019 в 15:22

Во-первых, мне не нравится 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. Создайте a bin папка в Вашем корневом каталоге: mkdir /home/$USER/bin
  2. Каталог изменения к новой папке 'мусорного ведра': cd /home/$USER/bin
  3. Создайте названный файл randommp3. Копия-и-вставка код от раздела "Code/Script" ниже в этот файл с текстовым редактором. Сохраните сказал файл.
  4. Сделайте исполняемый файл файла: chmod +x /home/$USER/bin/randommp3
  5. Весело проведите время, но отметьте следующие лакомые кусочки использования:
    • У Вас нет выбора, кроме как указывать что медиаплеер использовать. oxmplayer был бы тем, вместо чего Вы поместите player когда Вы выполняете файл.
    • Если Ваша музыка не находится в /home/$USER/Music (где $USER в настоящее время входил в систему пользователь), затем также необходимо указать полный путь к каталогу с --dir аргумент (или один из его псевдонимов, как объяснено в "использовании" разделяют ниже). Если путь к папке содержит какие-либо пробелы вообще, необходимо перенести его в одинарные кавычки (например, для каталога "My Music" в данном пути, Вы ввели бы его как /path/to/My Music к --dir аргумент).

Выполнение в качестве примера:

Откройте случайный файл MP3 от папки Music пользователя в их Корневом каталоге в Плеере VLC GUI

randommp3 vlc-wrapper

Откройте случайный файл MP3 от внешнего диска под названием "MusicDrive", смонтированный в Music Drive в /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)
3
ответ дан 1 December 2019 в 15:22

Другие вопросы по тегам:

Похожие вопросы: