【发布时间】:2019-12-29 17:27:52
【问题描述】:
我想删除视频的背景。之后我想把它放到另一个视频中,然后将它保存为一个新的 mp4 文件。我使用的是 Windows 10,但遇到以下问题,即在运行代码后无法创建新的 mp4 文件。
想法: 我有一辆车,后面有绿屏。我想把这辆车剪下来,放在街头视频的前面。 结果应该是一辆汽车在街上行驶(视频)。
来自 myScript 的代码:
clear
close all
v = VideoReader(fullfile('videos', 'carWithGreenscreen.mp4'));
s = VideoReader(fullfile('videos','street.mp4'));
video=zeros(v.Height,v.Width,3,floor(v.Duration/(1/v.FrameRate))-2,'uint8');
t=1;
car = 0.6 ;
values=[0;1;0];
while hasFrame(v)
Img = im2double(readFrame(v));
mask = sqrt((values(1)-Img(:, :, 1)).^2+(values(2)-Img(:, :, 2)).^2+(values(3)-Img(:, :, 3)).^2)<car;
video(:,:,:,t) = imoverlay(im2uint8(Img),mask,[0 0 0]);
imshow(video(:,:,:,t));
t=t+1;
end
videoOut = VideoWriter('result.mp4','MPEG-4'); %here I want to create a video%
videoOut.FrameRate=v.FrameRate;
open(videoOut);
moveX=0;
for t=1:1:size(video,4)
im = video(:,:,:,t);
mask = im(:,:,1)+im(:,:,2)+im(:,:,3)==0;
frame=imoverlay(readFrame(s),~mask,[0 0 0]);
frame=frame+im;
writeVideo(videoOut,frame);
imshow(frame);
end
close(videoOut);
运行此代码后出现以下错误:
Error using myScript (line 27)
No more frames available to read from file.
line 27: frame=imoverlay(readFrame(s),~mask,[0 0 0]);
但最后它并没有创建一个 mp4 文件......我已经用 avi 尝试过,但我只创建了一个 0KB 的空 .avi 文件......
【问题讨论】:
-
我已将 for 循环更改为 while hasFrame(s),现在出现此错误:>> myScript 警告:没有视频帧写入此文件。该文件可能无效。 > 在 VideoWriter/close 中(第 282 行)在 myScript 中(第 32 行)
-
第 32 行:关闭(videoOut);
-
两个视频的帧数相同 25 并且两个视频都是 10 秒长。
-
我至少应该制作一个视频......
标签: matlab video output frames