使用mpylayer顺序播放视频文件

时间:2012-05-30 19:40:34

标签: python mplayer

使用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
  3. 那么如何解决这两个问题呢?

    修改

    要解决第一个问题,我尝试使用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 个答案:

答案 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”快速搜索并合并此功能。