前言
MaixII-Dock可以通过ffmpeg + pyav来播放视频,但是v831性能一般,可能最高就播放到软解 h264 30fps 了,可以硬解,但是硬解资源不被 FFmpeg 所提供。目前通过测试的视频格式有有 mp4 和 avi,其他格式还没有进行测试,
转换视频格式
可以通过ffmpeg 转换命令来转换视频格式,为了节约时间,在线转换也可以。点击这里转换视频格式。
上传自己的视频,选择格式为MP4或者AVI
在设置里将编码器改为H.264,调整视频大小为240×240,帧率为30帧,转换完成后下载视频即可。
播放视频
将下载好的视频放到 Linux 系统的 root 目录中,将 path_to_video 的参数修改成所存放视频路径,如:‘/root/output_240_240.mp4’,其他视频同理,需要注意的是 v831 的性能很弱,可能最高就播放到软解 h264 30fps 了。注意,经过本人测试,在ide上播放视频,因为会占用一部分的资源,所以会导致很卡,用ssh连接播放的效果会好很多。
import pyaudio, av, os
from maix import display, camera, image
path_to_video = '/root/output_240_240.mp4'
if os.path.exists(path_to_video):
try:
container = av.open(path_to_video)
ai_stream = container.streams.audio[0]
vi_stream = container.streams.video[0]
fifo = av.AudioFifo()
p = pyaudio.PyAudio()
ao = p.open(format=pyaudio.paFloat32, channels=1, rate=44100, output=True)
for frame in container.decode(video=0, audio=0):
if 'Audio' in repr(frame):
frame.pts = None
fifo.write(frame)
for frame in fifo.read_many(4096):
ao.write(frame.planes[0].to_bytes())
if 'Video' in repr(frame):
img = image.load(bytes(frame.to_rgb().planes[0]), (vi_stream.width, vi_stream.height))
display.show(img)
finally:
ao.stop_stream()
ao.close()
p.terminate()
调整视频的音量
因为MaixII-Dock(v831)板载的扬声器功率很小,所以播放视频有时候可能听不到声音,可以通过ffmpeg命令来修改音量
查看视频音量
ffmpeg -i output_240_240.mp4 -filter_complex volumedetect -c:v copy -f null /dev/null
mean_volume为当前视频音量,max_volume为最大音量
增大音量
ffmpeg -i xiaoke.mp4 -af volume=30dB -y xiaoke.mp4
音量最多增大到0db。