使用MATLAB同时播放多个视频

时间:2011-10-17 18:14:52

标签: matlab video video-processing

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

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

我熟悉mmreader,VideoReader,电影和implay功能,但我仍面临两个问题:

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

  2. movie()函数是sycnhronous,因此第二个视频在第一个视频完成后才会启动。如何同时调用两个movie() - 函数?或者是否有其他方式同时显示两个(或更多)视频?

  3. 有什么建议吗?谢谢!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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)

答案 2 :(得分:0)

原则上,您可以将每个视频帧显示为图像并交替更新每个视频,但让它以恰当的帧速率播放可能会很困难。

尝试以下内容。这可能不会按原样运行,但您应该能够更新它。

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