注: 本人非常清楚这项任务使用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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?