Perl系统调用mplayer,视频之间的转换各不相同

Perl系统调用mplayer,视频之间的转换各不相同,perl,ipc,mplayer,Perl,Ipc,Mplayer,我只接触perl几个星期,我正在尝试运行以下代码: sub runVideo { system('mplayer -fs video1.mpeg2 video2.mpeg2'); return; } runVideo(); system('some other processes in background&'); runVideo(); 基本上,我运行video1和video2两次,第一次只是视频,第二次是在后台运行一些应用程序,不管运行什么应用程序,因为我在全屏模

我只接触perl几个星期,我正在尝试运行以下代码:

sub runVideo {
    system('mplayer -fs video1.mpeg2 video2.mpeg2');
    return;
}

runVideo();
system('some other processes in background&');
runVideo();
基本上,我运行video1和video2两次,第一次只是视频,第二次是在后台运行一些应用程序,不管运行什么应用程序,因为我在全屏模式下运行视频

问题:

第一次运行时,从video1到video2的转换大约需要1-2秒。 在第二次运行时,从video1到video2的转换不到一秒钟。

问题:

为什么过渡时间不同?是否视频仍在内存中,因此加载时间更短?


要获得相同的过渡时间,还有哪些替代方案或解决方法?答案可能是缓存效果。视频或播放视频所需的编解码器都不在video2的内存中。当然,当你第二次这么做的时候,他们是

根据延迟问题的确切原因,您可以尝试以下几种方法:

  • 您可以尝试使用mplayer的
    -fixed vo
    选项(如果您使用的是mplayer 1.x;我相信它默认为2.x)。这将防止振动vo Denit/reinit循环
  • 您可以(也可能应该)在
    -slave
    模式下运行mplayer(也可能使用
    -idle
    )。这将给你更多的控制权
  • 您可以预缓存任何需要一段时间的数据。在类Unix系统上执行此操作的方法是
    posix\u fadvise(intfd,off\t offset,off\t len,intadvice)
    带有
    posix\u FADV\u的通知将需要
    。或者,在Linux上,
    readahead(intfd,off64\u t偏移量,size\u t计数)
    。或者最后,通过文件上的
    mmap
    ,然后是
    madvise(void*addr,size\t length,int advice)
    ,通知
    MADV\u将需要
    。不幸的是,
    posix_fadvise
    readahead
    madvise
    都没有被模块导出。因此,您必须找到另一个模块(检查CPAN)或求助于或XS。或者
    open
    /
    sysread
    (效率较低)
  • 您可以将视频组合在一起。这将完全消除过渡时间

是否刷新缓存<代码>人mplayer或尝试使用文件副本
系统('mplayer-fs video3.mpeg2 video4.mpeg2')
这几乎不是一个perl问题。您没有说明您使用的是什么操作系统,但我假设是一个类似Unix的操作系统,因为(a)这是我所知道的;(b) 这通常是mplayer运行的方式。很抱歉造成混淆,我运行的是Meego 1.2