0

考虑以下使用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并播放这个。但是有两个问题:

  1. 它不会播放所有video1.mp4只是打开它一秒钟然后关闭它
  2. 关闭后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)

这适用于我不暂停视频、向前或向后搜索或关闭它的情况。所以必须有更好的解决方案。

4

4 回答 4

1

我猜 mp.loadfile() 是异步的,这意味着您的程序不会停止并等待您的视频完成播放,然后再继续执行。这可能会解释为什么您的第一个视频在第二个视频加载之前会短暂打开。

于 2012-05-31T18:57:44.627 回答
0

您可以使用mfind一个简单的 mplayer 播放列表制作工具

使用 mplayer 播放“定位”或“查找”输出中的所有文件和/或文件夹中的所有媒体文件。启发形式“播放文件夹中的所有文件”在“KMPlayer”和“Everything”快速搜索和合并此功能。

于 2013-11-15T07:52:55.870 回答
0

为什么不添加一个虚拟输入行。在你按下回车之前程序不会继续(我有一段时间没有编写 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
于 2013-07-05T08:23:24.970 回答
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并且循环退出。

如果有人有更好的建议,请告诉我。

于 2012-06-01T06:36:42.873 回答