现在网上的录屏软件可谓是五花八门,各有特色,收费免费的都有。可聪明的你,有没有想过用matlab打造一款属于自己的录屏工具呢?是的,没有看错,用matlab打造。网上介绍采用录制屏幕的资料很多,大部分都是录制GIF动画(见:如何用matlab制作演示动画并存储)、录制无声视频等。采用今天介绍的方法将能同时录制声音和屏幕画面并保存。
下面来简单介绍一下实现原理,即在录制声音的同时录制屏幕,声音录制使用matlab内置的函数,录屏则是通过屏幕截图来实现的。将同步录制的声音和图片分别保存成音频和视频文件,在使用Micah Richert编写的mmread函数读取音频和视频,mmwrite函数来合并音频视频文件,最终完成屏幕录制。
经测试,录制两分钟的视频大约占用21MB左右存储空间,以下视频就是采用所编写的程序录制的,请大家欣赏!!!
clc;clear;
% 创建用于录制音频的对象R
R = audiorecorder(22050,16,1);
% 定义录制长度,注意这里不是录制时长,是截屏的张数
len = 1000;
vd = cell(len,1);
tic;
% 开始声音录制
record(R);
for k = 1:len
% screensnap采用C语言编写,需要VC编译
% 下载地址:https://ww2.mathworks.cn/matlabcentral/fileexchange?q=screensnap
imwrite(screensnap(0),[num2str(k),'.jpg']);
end
% 截屏结束时停止声音录制
stop(R);
disp('录制完成');
fR = toc;
signal = getaudiodata(R);
% 保存音频
audiowrite('myspeech.wav',signal,22050,'BitsPerSample',16);
ved = VideoWriter('myspeech.avi');
ved.FrameRate = floor(len/fR);
open(ved);
% 截图生成视频文件
for k = 1:len
writeVideo(ved,imread([num2str(k),'.jpg']));
end
close(ved);
% 音视频合并需要用到Micah Richert编写mmread和mmwrite函数
% https://ww2.mathworks.cn/matlabcentral/fileexchange/8028-mmread
% https://ww2.mathworks.cn/matlabcentral/fileexchange/15881-mmwrite
[~, audio] = mmread('myspeech.wav');
[video, ~] = mmread('myspeech.avi');
mmwrite('myspeech.wmv',audio,video);
disp('处理完成');
delete('myspeech.wav');
delete('myspeech.avi');
for k = 1:len
delete([num2str(k),'.jpg']);
end
disp('清理完成');
视频中所有相关文件都已打包整理,需要的小伙伴请在公众号中回复“屏幕”或者“录像”即可获取下载链接。