如何用MATLAB为小姐姐跳舞视频增添另一个小姐姐跳舞进度条

Posted slandarer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用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:picNum
   fileName=strcat(picPath,files(i).name); 
   [img,~,alp]=imread(fileName);
   imgSet{i}=img;
   alpSet{i}=alp;
end

close all;
fig=figure(1);
fig.NumberTitle='off';

[m,n,~]=size(read(movObj,1));
for k=1:movObj.NumFrames

     frame=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);
     else
         tNSet(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),']'];
end

release(videoFWriter);
end

完整素材包:
链接:https://pan.baidu.com/s/1l5eCW-el4CR_R8worvaP-w
提取码:t9xe

以上是关于如何用MATLAB为小姐姐跳舞视频增添另一个小姐姐跳舞进度条的主要内容,如果未能解决你的问题,请参考以下文章

太刺激了!用python30行代码抓取虎牙上万个小姐姐跳舞视频,不说了,鼻血上来了···

见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频

见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频

见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频

字符串跳舞,保姆级教程,利用python实现小姐姐跳代码舞

看我如何用多线程,帮助运营小姐姐解决数据校对系统变慢!