【发布时间】:2019-07-31 08:45:09
【问题描述】:
我正在从一个目录设置一个混合图像和视频的幻灯片系统。 我正在使用 Raspberry Pi B、pygame 和 vlc。 我没有安装 X,所以一切都发生在帧缓冲区中。
我的实际代码正在运行,但是:
- 不遵守 4 秒延迟。图像显示 +- 11 秒。
- 其中一张图像没有什么特别之处,显示时间更长,+- 1m30。 (我真正的问题)
我尝试了一个带有 fbi、fim、vlc 的 bash 脚本,但没有合适的结果。最接近的是 vlc,但在帧缓冲区中渲染图像需要很长时间。
我对 pygame 很陌生。代码如下:
import pygame
import sys
import time
import vlc
import os
filesdir = '/home/pi/SMBmount/'
pygame.init()
size = (pygame.display.Info().current_w, pygame.display.Info().current_h)
black = 0, 0, 0
screen = pygame.display.set_mode(size)
while True:
# For every file in filesdir :
for filename in os.listdir(filesdir):
filenamelower = filename.lower()
# If image:
if filenamelower.endswith('.png') or filenamelower.endswith('.jpg') or filenamelower.endswith('.jpeg'):
fullname = filesdir + filename
img = pygame.image.load(fullname)
img = pygame.transform.scale(img, size)
imgrect = img.get_rect()
screen.fill(black)
screen.blit(img, imgrect)
pygame.mouse.set_visible(False)
pygame.display.flip()
time.sleep(4)
# Elif video:
elif filenamelower.endswith('.mp4') or filenamelower.endswith('.mkv') or filenamelower.endswith('.avi'):
fullname = filesdir + filename
# Create instane of VLC and create reference to movie.
vlcInstance = vlc.Instance("--aout=adummy")
media = vlcInstance.media_new(fullname)
# Create new instance of vlc player
player = vlcInstance.media_player_new()
# Load movie into vlc player instance
player.set_media(media)
# Start movie playback
player.play()
# Do not continue if video not finished
while player.get_state() != vlc.State.Ended:
# Quit if keyboard pressed during video
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
pygame.display.quit()
pygame.quit()
sys.exit()
player.stop()
# Quit if keyboard pressed during video
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
pygame.display.quit()
pygame.quit()
sys.exit()
我愿意接受任何能够处理图片和视频的替代方案。
编辑:终于到了 pygame 用pygame.transform.scale() 调整(下一个)图像大小的时候了。
有什么办法可以优化吗?例如,在不调整大图像大小的情况下全屏打印?
【问题讨论】:
-
关于这个
One of the images witch has nothing particular, is displayed much longer:肯定有什么特别的,不然很长的时间就没法解释了。总是相同的图像停留时间更长吗?您的幻灯片中有很大的图片吗? -
这是一个PNG,和其他几个一样。它实际上是最小的图像:35k。尺寸为 1451x816。你认为这可能是下一张图像(3,3M,3000x1687)的缩放,
pygame.transform.scale()需要很长时间吗? -
确实是这个原因。
-
是的。缩放大图片需要时间。
标签: python pygame framebuffer libvlc pygame-surface