python - 如何在 omxplayer 中播放随机播放的视频列表
问题描述
首先:我是 Python 和 bash 的新手——我多年前做过一些 bashscripting,而我只涉足 Python。而且我认为我有点超出我的深度。
我有的
- 91 个 mp4 视频文件(更多关于它们的信息)
- Raspberry Pi 3 B,运行 Raspbian Stretch(据我所知)
- Western Digital My Passport USB3 外置硬盘-
我想要的是
我正在尝试为我的祖母设置一些东西 - 她插入 Pi,它启动,并开始以随机顺序循环播放外部驱动器上的文件夹中的视频。我希望它尽可能简单,因为她已经 80 多岁了,不是很技术,而且住在离我 9,211 公里的地方。结果,任何更改都必须由那里的技术含量更高的家庭成员进行,他们根本不熟悉 Linux 或 Python。
我有什么
我已经设置了 fstab:
UUID="XXXXXXX" /media/videoDrive auto nosuid,nodev,nofail 0 0
这很有效。
我尝试通过 VLC 中的命令行播放视频,因为它支持在循环中播放目录中的文件。它起作用了……有点。视频播放器越大,视频越断断续续,基本上不能全屏播放。我发现 omxplayer 可以很好地播放 mp4 - 但有些视频是 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 脚本会一直运行到每个视频都播放完(我只是意识到它甚至不会循环 - dang)。这意味着关闭 Pi 变得非常困难 - 您需要终止 Python 进程,然后终止所有 omxplayer 进程,并且只能在视频不是全屏时才这样做,其中一些会发生这种情况(我有当我第一次注意到这个问题时修复了它,但后来我不得不拔掉 Pi 上的插头,这可能与外部不一致)。
我想有一些方法来运行播放器,永远随机播放视频,直到发生某种输入,这会杀死循环和 omxplayer。或者,如果有人能弄清楚如何让 VLC 毫无问题地播放这些视频,那将是完美的。
解决方案
我使用 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
停止播放。
推荐阅读
- json - 使用 Play json 解析具有不同模式的 json
- ruby-on-rails - Solidus Paypal Braintree 集成不起作用?
- javascript - 如何在 VisJS 中创建自定义节点
- python - 深度图显示一切都是灰色的!OpenCV-Python
- python - Matplotlib:双轴图表没有按方面工作
- javascript - 在表中添加动态行,但它正在清空行中的数据
- sql - Oracle 到 T-SQL 的转换。我怎样才能使这项工作?
- dart - 从 Cloud Firestore 查询生成颤振列表
- tensorflow - TensorFlow - 如何导入具有多个标签的数据
- python - model.evaluate() 中 batch_size 的含义