【问题标题】:Simultaneous playback of multiple videos with MATLAB使用 MATLAB 同时播放多个视频
【发布时间】:2011-10-17 18:14:52
【问题描述】:

我搜索了互联网和堆栈溢出,但找不到解决方案,甚至找不到对我的问题有用的提示。

我需要在 MATLAB 中编写一个专门的视频注释软件,它必须能够在 GUI 上同时播放多个视频(至少 2 个)。视频文件采用 XVID 编码。到目前为止,我基本上只是调整了mathworks.com 的视频播放示例(xylophon.avi,参见movie() 描述)。

我熟悉 mmreader、VideoReader、movie 和 implay 功能,但我仍然面临两个问题:

  1. 即使我只读取少量帧(如 xylophon.avi 示例),我的程序很快就会超出可用内存。此外,即使在相对较少的帧(比如 100 帧)中读取也需要很长时间。

  2. movie() 函数是同步的,所以在第一个视频完成之前,第二个视频不会开始。如何同时调用两个电影()函数?还是有其他方法可以同时显示两个(或更多)视频?

有什么建议吗?谢谢!

【问题讨论】:

    标签: matlab video video-processing


    【解决方案1】:

    首先,MATLAB 不是多线程的。同时做两件事会很困难。尝试突破到 Java。 Matlab 使用 JIDE 作为基于 Swing 构建的图形前端。使用MATLAB Builder JA 将您的 MATLAB 代码编译为 Java,或者将您自己的“面板”添加到 IDE,如this question 所示。

    【讨论】:

    • 我在考虑是否可以使用并行工具箱完成多线程。然而,我决定用另一种语言来实现这个工具。还是谢谢!
    【解决方案2】:

    您可以在两个不同的窗口中显示视频,并通过给视频一个句柄并调用其未记录的播放函数来同时开始播放。这也消除了您对长度不等的视频可能遇到的任何困难。

    handle1 = implay('file1.mp4');
    handle2 = implay('file2.mp4');
    
    handle1.Parent.Position = [100 100 640 480];
    handle2.Parent.Position = [740 100 640 480];
    
    play(handle1.DataSource.Controls)
    play(handle2.DataSource.Controls)
    

    【讨论】:

      【解决方案3】:

      原则上,您可以将每个视频帧显示为图像并交替更新每个视频,但要使其以完全正确的帧速率播放可能会很困难。

      尝试以下方法。这可能无法按原样工作,但您应该能够对其进行更新。

      v1 = VideoReader(firstVideo)
      v2 = VideoReader(secondVideo)
      
      i1 = 0;
      i2 = 0;
      while i1 < v1.NumberOfFrames && i2 < v2.NumberOfFrames
          if i1 < v1.NumberOfFrames
              i1 = i1+1;
              subplot(1,2,1)
              image(v1.read(i1))
          end
      
          if i2 < v2.NumberOfFrames
              i2 = i2+1;
              subplot(1,2,2)
              image(v2.read(i2))
          end
      
          drawnow
      end
      

      【讨论】:

        猜你喜欢
        • 2015-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        • 2023-03-11
        • 1970-01-01
        相关资源
        最近更新 更多