行空板——视频播放器
【项目背景】最近又看了一遍《红鞋子和七个小矮人》,画面精致、情节有新意。这个项目准备用行空板播放这个视频同时也要播放视频声音。
【准备硬件】
1.行空板
行空板是一款专为Python学习和使用设计的新一代国产开源硬件,采用单板计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和Python环境,还预装了常用的Python库,让广大师生只需两步就能进行Python教学
2.迷你USB外置声卡
这款体积小巧、即插即用的免驱USB声卡可以满足您。声卡采用高性能音频USB DAC芯片,输出音效好;输入为USB接口,可以直接插入行空板、Jetson Nano、raspberry PI 400、电脑等主控或设备,轻松实现音频外置播放功能;输出为3.5MM立体声接口,可直接驱动耳机,或作为后极功放使用。
3.usb音箱
普通USB音箱
【项目设计】
使用Python OpenCV库来播放视频,使用pygame库mixer来同步播放音频。使用unihiker库 GUI制作播放按钮。
【知识准备】
1.OpenCV库
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby,GO的支持。
2.Pygame
Pygame是一个利用SDL库的写就的游戏库, 是一组用来开发游戏软件的 Python 程序模块。SDL,全名Simple DirectMedia Layer,SDL是用C写的,不过它也可以使用C++进行开发,当然还有很多其它的语言,Pygame就是Python中使用它的一个库。它包含Python函数和类,这些类和类允许使用SDL对CDROM、音频和视频输出、键盘、鼠标和操纵杆输入进行支持。
3.unihiker库
unihiker库是专门为了便于行空板的使用而开发的Python库。我们可以借助unihike库中的GUI类来实现屏幕显示和控制【硬件连接】【处理视频】因行空板屏幕为320*240,所以将视频使用格式工厂处理,并将帧频设置成25帧每秒(程序中好处理)。并将视频 中音频导出成MP3。【制作背景】下载视频背景图片,用Fireworks处理图片320*240并旋转图片(行空板横屏),并制作按钮图片,按钮背景透明,生成PNG格式。【程序编写】1、播放视频
导入OpenCV,加载视频,并初始化。
import cv2
vd = cv2.VideoCapture()
vd.open("red.mp4")
screen_rotation = True
vd.set(cv2.CAP_PROP_FRAME_WIDTH, 320)#设置视频图像宽度
vd.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置视频摄像头图像高度
vd.set(cv2.CAP_PROP_BUFFERSIZE, 1) #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。
导入pygame用mixer加载音频,并设置音量。
import pygame
pygame.mixer.init()
pygame.mixer.music.load("red.mp3")
pygame.mixer.music.set_volume(50 / 100)
播放按钮界面设置
from unihiker import GUI
bf=False
bs=True
# 事件回调函数
def button_click1():
global bf
bf=True
u_gui=GUI()
屏幕=u_gui.draw_image(image="back.JPG",x=0,y=0)
按钮=u_gui.draw_image(image="an.png",x=90,y=130)
按钮.config(onclick=button_click1)主程序
currenttime=time.time()
while True:
if bf==True:
if bs==True:
bs=False
cv2.namedWindow('windows',cv2.WND_PROP_FULLSCREEN) #窗口全屏
cv2.setWindowProperty('windows', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) #窗口全屏
pygame.mixer.music.play()
if time.time()-currenttime>=0.039:
currenttime=time.time()
ret, img = vd.read()
if ret:
#img = cv2.resize(img,(320,240))
if screen_rotation:
img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) #旋转屏幕
cv2.imshow('windows', img)
else:
cv2.destroyAllWindows()
vd.set(cv2.CAP_PROP_POS_MSEC, 0)
bf=False
bs=True
if cv2.waitKey(1) & 0xff== 27:
break
全屏播放
cv2.namedWindow('windows',cv2.WND_PROP_FULLSCREEN) #窗口全屏
cv2.setWindowProperty('windows', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) #窗口全屏使用横屏播放img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) #旋转屏幕播放屏幕连续显示,需使用“cv2.waitKey(1)”。
if cv2.waitKey(1) & 0xff== 27:
break
因视频的帧频为25帧每秒,所以0.04秒播放1帧,因“cv2.waitKey(1)”占了0.001秒,所以每0.039秒播放1帧。
if time.time()-currenttime>=0.039:
currenttime=time.time()
ret, img = vd.read()
【完整程序】
import pygame
import time
import cv2
from unihiker import GUI
bf=False
bs=True
# 事件回调函数
def button_click1():
global bf
bf=True
u_gui=GUI()
屏幕=u_gui.draw_image(image="back.JPG",x=0,y=0)
按钮=u_gui.draw_image(image="an.png",x=90,y=130)
按钮.config(onclick=button_click1)
vd = cv2.VideoCapture()
vd.open("red.mp4")
screen_rotation = True
vd.set(cv2.CAP_PROP_FRAME_WIDTH, 320)#设置视频图像宽度
vd.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置视频摄像头图像高度
vd.set(cv2.CAP_PROP_BUFFERSIZE, 1) #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。
pygame.mixer.init()
pygame.mixer.music.load("red.mp3")
pygame.mixer.music.set_volume(50 / 100)
currenttime=time.time()
while True:
if bf==True:
if bs==True:
bs=False
cv2.namedWindow('windows',cv2.WND_PROP_FULLSCREEN) #窗口全屏
cv2.setWindowProperty('windows', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) #窗口全屏
pygame.mixer.music.play()
if time.time()-currenttime>=0.039:
currenttime=time.time()
ret, img = vd.read()
if ret:
#img = cv2.resize(img,(320,240))
if screen_rotation:
img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) #旋转屏幕
cv2.imshow('windows', img)
else:
cv2.destroyAllWindows()
vd.set(cv2.CAP_PROP_POS_MSEC, 0)
bf=False
bs=True
if cv2.waitKey(1) & 0xff== 27:
break
【演示视频】
https://www.bilibili.com/video/BV1MG41137eh?share_source=copy_web
{:6_215:}666666学到了 一边放mp4,一边放mp3 厉害厉害 厉害 播放流畅度很好 我竟无言以对,拍案叫绝,提起荷包,到小黄鱼市场走一走
页:
[1]