필터 지우기
필터 지우기

How can we merge two separate video files into one?

조회 수: 37 (최근 30일)
Parham Babakhani Dehkordi
Parham Babakhani Dehkordi 2020년 9월 12일
댓글: Sven Beckhuis 2021년 12월 8일
Hello,
I have two separate video .avi files named as 'first' and 'second'. The first video contains 13 frames, and second video includes 18 frames. I need to combine these two video into one single file so that the first video comes first, followed by the second one with frame rate of 0.4.
I use the following code, however, the error said that 'Dimensions of arrays being concatenated are not consistent', which emphasize that two input files do not have the same dimensions, any help would be appreciated.
vid1 = VideoReader('first.avi');
vid2 = VideoReader('second.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);

채택된 답변

Image Analyst
Image Analyst 2020년 9월 12일
Try calling imresize() to make them the same size:
img1 = readFrame(vid1);
[rows1, columns1, numColors1] = size(img1);
img2 = readFrame(vid2);
[rows2, columns2, numColors2] = size(img1);
img2 = imresize(img2, [rows1, rows2]);
imgt = horzcat(img1, img2);
  댓글 수: 9
Walter Roberson
Walter Roberson 2021년 12월 8일
You need the Computer Vision Toolbox in order to write combined audio and video.
You cannot switch audio rates in the middle of a file, so you would need to examine the audio rates of both files in advance and decide which rate you are going to convert the samples to.
You should also be interpolating video frame rates since you cannot change frame rates in the middle of writing. At the moment I am not sure what a good video frame rate conversion method is.
Sven Beckhuis
Sven Beckhuis 2021년 12월 8일
Thank you for your answer Walter! I will give it a try! :)

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2020년 9월 12일
You cannot change the size of the frame in the middle of a video.
You will need to do one of the following:
  • pad the smaller frames to be the same size as the larger
  • crop the larger frames to be the same size as the smaller
  • imresize the smaller frames to be the same size as the larger
  • imresize the larger frames to be the same size as the smaller
  • imresize() all frames to be a fixed size
Note that imresize() distorts proportions unless the scalling factor happens to be the same horizontally and vertically (same aspect ratio).
If you pad you probably want to center the image rather than padding only on one edge. https://www.mathworks.com/help/images/ref/padarray.html

카테고리

Help CenterFile Exchange에서 Audio and Video Data에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by