使用mpylayer考虑以下最小工作示例:
import mpylayer
mp = mpylayer.MPlayerControl()
files = ['/tmp/video1.mp4','/tmp/video2.mp4']
for i in range (0,2):
mp.loadfile(files[i])
这应该播放所有video1.mp4
,之后应该打开video2.mp4
并播放。但是有两个问题:
video1.mp4
只打开它一秒钟然后关闭它。video2.mp4
后,延迟几秒钟,直到开始播放video2.mp4
那么如何解决这两个问题呢?
修改
要解决第一个问题,我尝试使用time.sleep(mp.length)
,即
import mpylayer
import time
mp = mpylayer.MPlayerControl()
files = ['/tmp/video1.mp4','/tmp/video2.mp4']
for i in range (0,2):
mp.loadfile(files[i])
time.sleep(mp.length)
这适用于我不暂停视频,向前或向后搜索或关闭视频的情况。所以必须有一个更好的解决方案。
答案 0 :(得分:1)
我猜测mp.loadfile()是asynchronous,这意味着您的程序不会停止并等待您的视频完成播放,然后再继续执行。这可能解释了为什么在第二个视频加载之前,您的第一个视频会短暂打开。
答案 1 :(得分:0)
我不知道这是否是一个聪明的解决方案,但它似乎至少在第一眼就解决了这两个问题:
import mpylayer
import time
mp = mpylayer.MPlayerControl()
files = ['/tmp/video1.mp4','/tmp/video2.mp4']
for i in range (0,2):
mp.loadfile(files[i])
l = mp.length
while(mp.time_pos < l -1):
time.sleep(1)
修改强>
import mpylayer
import time
mp = mpylayer.MPlayerControl()
files = ['/tmp/test1.mp4','/tmp/test2.mp4']
for i in range (0,len(files)):
mp.loadfile(files[i])
#mp.fullscreen=1
while(mp.length == None):{} #Prevents that mp.length is None
l = mp.length
while(mp.time_pos != None and mp.time_pos < l):
pos = mp.time_pos
这是延迟较小的,但是在寻求前进时会遇到问题。然后mp.time_pos
变为None
并退出循环。
如果有人建议改善它,请告诉我。
答案 2 :(得分:0)
为什么不添加虚拟输入线。程序将不会继续,直到您按Enter键(我没有编写Python一段时间),但
import mpylayer
import time
mp = mpylayer.MPlayerControl()
files = ['/tmp/video1.mp4','/tmp/video2.mp4']
for i in range (0,2):
mp.loadfile(files[i])
dummy = input() // When user presses any button, you continue
答案 3 :(得分:0)
您可以使用mfind一个简单的播放列表制作工具来获得mplayer
播放“locate”或“find”输出和/或所有媒体文件中的所有文件 在mplayer的文件夹中。灵感来自“播放文件夹中的所有文件” “KMPlayer”和“Everything”快速搜索并合并此功能。