如何用MATLAB为小姐姐跳舞视频增添另一个小姐姐跳舞进度条
注: 本人非常清楚这项任务使用pr会简单很多,此篇文章只是为了探究matlab能干啥的边界。并作为一个熟悉matlab矩阵操作和视频音频操作的例子。
效果如下:
(怕侵权就只放个动图)
可以看到小姐姐的舞蹈非常让人上头哈!!!!

材料准备:
1首先需要准备一个小姐姐的视频:
(完整素材包放在文章最后)

2需要准备一系列小姐姐跳舞的png图片,放在pic文件夹里:

完整代码:
其实原理很简单,就只是计算图片应该到的位置,把图片放到该放的地方,至于怎么样让声音和视频和在一起可以看这一篇:
MATLAB 如何将视频和音频写入同一个文件?以视频上下颠倒为例,附带详细注释
function moveAddWaitBar2
videoPath='test.mp4';
picPath='.\pic\';%图片素材路径movObj=VideoReader(videoPath);
[AUDIO,Fs]=audioread(videoPath);
audioLen=round(size(AUDIO,1)./movObj.NumFrames);videoFWriter=vision.VideoFileWriter('result.avi','FrameRate',movObj.FrameRate);
videoFWriter.AudioInputPort=true;files=dir(fullfile(picPath,'*.png')); %图片格式png
picNum=size(files,1);% 导入图片素材
for i=1:picNumfileName=strcat(picPath,files(i).name); [img,~,alp]=imread(fileName);imgSet{i}=img;alpSet{i}=alp;
endclose all;
fig=figure(1);
fig.NumberTitle='off';[m,n,~]=size(read(movObj,1));
for k=1:movObj.NumFramesframe=read(movObj,k);tImg=imgSet{mod(k-1,picNum)+1};tAlp=alpSet{mod(k-1,picNum)+1};[M,N,~]=size(tImg);% 动图定位tN=round(k/movObj.NumFrames*n);tNSet=tN+1-floor(N/2):tN+ceil(N/2);if any(tNSet<=0)tNSet(tNSet<=0)=[];tNSet2=tNSet+N-tNSet(end);elsetNSet(tNSet>n)=[];tNSet2=tNSet-tNSet(1)+1;end% 动图像素写入每一帧图像tPart=frame(end-M+1:end,tNSet,:);tPart2=tImg(:,tNSet2,:);tPart3=tAlp(:,tNSet2);tPart_R=tPart(:,:,1);tPart_G=tPart(:,:,2);tPart_B=tPart(:,:,3);tPart2_R=tPart2(:,:,1);tPart2_G=tPart2(:,:,2);tPart2_B=tPart2(:,:,3);tPart_R(tPart3~=0)=tPart2_R(tPart3~=0);tPart_G(tPart3~=0)=tPart2_G(tPart3~=0);tPart_B(tPart3~=0)=tPart2_B(tPart3~=0);tPart(:,:,1)=tPart_R;tPart(:,:,2)=tPart_G;tPart(:,:,3)=tPart_B;changeFrame=frame;changeFrame(end-M+1:end,tNSet,:)=tPart;changeFrame=uint8(changeFrame);% 音频视频写入videoFWriter(changeFrame,AUDIO((k-1)*audioLen+1:k*audioLen,:));imshow(changeFrame)fig.Name=['Frame:[',num2str(k),'/',num2str(movObj.NumFrames),']'];
endrelease(videoFWriter);
end
完整素材包:
链接:https://pan.baidu.com/s/1l5eCW-el4CR_R8worvaP-w
提取码:t9xe
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
