Как воспроизвести перемешанный список видео в omxplayer - PullRequest
0 голосов
/ 16 января 2019

Для начала: я новичок в Python и bash - я сделал несколько сценариев bashscripting много лет назад, и я только когда-либо баловался с Python. И я думаю, что я немного не в себе.

Что у меня есть

  • 91 MP4 видеофайлов (больше о них скоро)
  • A Raspberry Pi 3 B, работает Raspbian Stretch (насколько я знаю)
  • Western Digital Мой паспорт Внешний жесткий диск USB3-

Что я хочу

Я пытаюсь что-то настроить для своей бабушки - она ​​подключает Pi, он загружается и начинает проигрывать видео в папке на внешнем диске в случайном порядке в цикле. Я хочу, чтобы это было настолько просто, насколько это возможно, так как ей за 80, она не очень техническая и живет в 9 211 км от меня. В результате любые изменения должны быть сделаны более опытными членами семьи, которые совсем не знакомы с Linux или Python.

Что у меня есть

У меня настроен fstab:

UUID="XXXXXXX" /media/videoDrive auto nosuid,nodev,nofail 0 0

Это прекрасно работает.

Я попытался воспроизвести видео через командную строку в VLC, поскольку он поддерживает воспроизведение файлов в каталоге, перетасованном в цикле. И это сработало ... вроде. Видео было невероятно изменчивым, чем больше был проигрыватель, и в основном не воспроизводилось в полноэкранном режиме. Я обнаружил, что omxplayer будет хорошо проигрывать mp4s - но некоторые видео были webm, которые он отказывался воспроизводить. Я конвертировал их, так что все в порядке.

Я нашел bashscript онлайн, который был следующим:

#!/bin/bash

setterm -cursor off
setterm -clear

for file in $1/*
do
 omxplayer "$file" > /dev/null
done

setterm -cursor on

Используя это, я написал следующий скрипт на Python:

#Autoplay Script
import os, random

#playlist path
path = "/media/videoDrive/vids"

videoList = os.listdir(path)
random.shuffle(videoList)
for video in videoList:
    target = os.path.join(path, video)
    os.system('omxplayer "{}" > /dev/null'.format(target))

Все, что мне нужно сделать, это посмотреть, к какому файлу добавить вызов скрипта (я думаю, что это initrc), затем написать инструкции, упаковать его и передать его родителям, чтобы они там занялись.

... Как только у меня возникла проблема с воспроизведением.

В чем проблема

Любой, кто имеет какие-либо знания Python, мог понять, что скрипт Python будет запускаться до тех пор, пока не будет воспроизведено каждое видео (я только что понял, что он даже не зацикливается). Это означает, что выключение Pi становится довольно трудным - вам нужно убить процесс Python, затем убить все процессы omxplayer, и это можно сделать только тогда, когда видео не полноэкранное, что случается с некоторыми из них (я бы исправил это, когда я впервые заметил проблему, но тогда мне пришлось бы тянуть вилку на Pi, что может не совпадать с внешним).

Мне бы хотелось иметь какой-нибудь способ запустить проигрыватель, проигрывая видео случайным образом вечность до тех пор, пока не произойдет какой-то ввод, который убивает цикл и omxplayer. В качестве альтернативы, если кто-нибудь сможет выяснить, как заставить VLC воспроизводить эти видео без проблем, это будет прекрасно.

1 Ответ

0 голосов
/ 06 июля 2019

Я создал скрипт «play all random» для моей дочери, используя R:

#!/usr/bin/Rscript
setwd("/home/pi/Desktop/MyDir")

fl <- list.files(".")
fl <- sample(x = fl, size = length(fl))
len <- length(fl)
i <- 1L
while(i <= len) {
  tmpCMD <- paste("omxplayer -b \"", fl[i], "\"", sep = "")
  cat(tmpCMD,"\n")
  tmpLog <- system(command = tmpCMD)
  if (tmpLog == 2)
    break
  i <- i + 1L
}

И, используя сценарий, я также создал файл .desktop со значком, чтобы сделать его кликабельным в панели запуска приложения:

[Desktop Entry]
Name=PlayAll
GenericName=Play All
Exec=/home/pi/bin/PlayAll.R
Icon=/home/pi/Pictures/PlayAll.png
Terminal=true
Type=Application
Categories=AudioVideo;Video;Audio;Music;
Comment=Video Playlist

Как и OMXPlayer, вы можете нажать q для воспроизведения следующего видео и CTRL+c, чтобы остановить воспроизведение.

...