2

分割画面で並べて再生したい 2 つのビデオがあります。それらは同じ期間と次元です。仕事をするために数年前に開発されたコードを見つけました。問題は、おそらく新しいバージョンの Matlab (2014a) を使用していることが原因で、エラーがいっぱいになることです。エラーは (%name of the new avi file) 以降から始まります。

誰でも試して修正してください:

% select two files:
[filename1,pathname1] = uigetfile('.avi','pick first AVI file');
[filename2,pathname2] = uigetfile('.avi','pick second AVI file');
file1 = fullfile(pathname1,filename1);
file2 = fullfile(pathname2,filename2);  
pdMovie1 = aviread(file1);
pdMovie2 = aviread(file2);
fileinfo1 = aviinfo(file1);
fileinfo2 = aviinfo(file2);

% check if AVI files have the same length and height:
if fileinfo1.NumFrames~=fileinfo2.NumFrames || ...
    fileinfo1.Height~=fileinfo2.Height
errordlg('files are not compatible!')
else
% inspired by Herbert Ramoser in Message-ID:
% <art0c0$l9fip$1@ID-148798.news.dfncis.de>
for i=1:size(pdMovie1,2)
  output(i).cdata = [pdMovie1(i).cdata, pdMovie2(i).cdata];
  output(i).colormap = pdMovie1(i).colormap;
end;

% name of the new avi file:
[pathstr,name,ext,versn] = fileparts(filename1);
newmoviename = [pathname1,name,'_combined', ...
                num2str(fileinfo1.FramesPerSecond;),ext];

% create the avi file:
movie2avi(output, newmoviename, ...
          'fps', fileinfo1.FramesPerSecond;, ...
          'compression', 'none');
close
end
4

2 に答える 2

5

ビデオを並べて再生するだけの場合は、この単純なコードが機能します。

close all
clc
clear

vid1 = vision.VideoFileReader('video1.avi');
vid2 = vision.VideoFileReader('video2.avi');
vidP = vision.VideoPlayer;

while ~isDone(vid1)
   frame1 = step(vid1);
   frame2 = step(vid2);

   frame = horzcat(frame1, frame2);

   step(vidP,frame);
end

release(vid1);
release(vid2);
release(vidP);

更新: 両方の入力ビデオの長さとフレームの寸法が同じであると想定しています。

さて、最初の 2 つのビデオから新しいビデオを録画したい場合は、以前と同じフレーム レートで、次のコードを使用することをお勧めします。

close all
clc
clear

vid1 = VideoReader('video1.avi');
vid2 = VideoReader('video2.avi');

videoPlayer = vision.VideoPlayer;

% new video
outputVideo = VideoWriter('newvideo.avi');
outputVideo.FrameRate = vid1.FrameRate;
open(outputVideo);

while hasFrame(vid1) && hasFrame(vid2)
    img1 = readFrame(vid1);
    img2 = readFrame(vid2);

    imgt = horzcat(img1, img2);

    % play video
    step(videoPlayer, imgt);

    % record new video
    writeVideo(outputVideo, imgt);
end

release(videoPlayer);
close(outputVideo);
于 2015-06-11T16:55:01.213 に答える