使用MATLAB将视频转为gif


前言

在做工作汇报的时候,经常需要插入一些视频或者图片,但是有时我们想让视频能够自动播放,这时就需要gif格式的图片了,有什么办法能够方便制作呢,最近一直在寻找这样的办法,果然万能的MATLAB很OK,话不多说,上代码。

1、导入视频

首先导入视频,具体可用下面的代码来实现:
[filename1, pathname1] = uigetfile({'*.mp4';'*.avi';'*.*'},'File Selector'); % 获取MP4或者Avi格式的视频文件路径以及名称
V=VideoReader([pathname1,filename1]); % 读取视频

2、分析视频文件

在导入视频后我们就可以在matlab的工作区(Work Space)看到名字为video的一个数据,双击点开后可以看到它有如下图所示的一些属性

在这里插入图片描述

有一些视频的重要信息,如Duration (视频的时长)、FrameRate(帧率,即美妙多少帧)、视频大小以及格式等等。由于版本的原因,其实还有一些其它的数据,比如总帧数NumberOfFrames(其实就相当于总时长乘以帧率),这个里面虽然没有显示出来,但是我们依然可以调用。然后我们就来读取视频的总帧数和帧率。
numFrames = video.NumFrames; % 获取视频帧的总数
Framerate=video.FrameRate; % 获取视频帧率

3.生成gif文件

最后就是来生成gif文件啦,这个我以前的文章中有过类似代码,我这里就直接把生成文章开头的那个gif动画的那段这里的代码发出来。
bar = waitbar(0,'Please wait...'); % 设置进度条

start_time = 0; % 开始时间
end_time = 5; % 结束时间

if end_time>video.Duration
    end_time=video.Duration;
end

start_frame=round(Framerate*start_time)+1; % 开始帧数
end_frame=round(Framerate*end_time); % 结束帧数

for i=start_frame:2:end_frame
    frame=read(video,i); %读取第k帧画面
    % frame=imresize(frame,0.5); % 将图像缩小0.5% im=frame2im(frame); % 从单个影片帧frame返回真彩色 (RGB) 图像
    % 制作gif文件,图像必须是index索引图像,只能用256[I,map]=rgb2ind(frame,256); % 将RGB图像frame转换为索引图像I,map为关联颜色图
    % I=rgb2gray(frame);
    waitbar((i-start_frame)/(end_frame-start_frame),bar,['转换中',num2str(round((i-start_frame)*100/(end_frame-start_frame))),'%']);
    if i==start_frame
        % 第一张直接保存到视频目录下
        imwrite(I,map,strcat(pathname1,filename1(1:end-4),'0.gif'),'gif','Loopcount',inf,'DelayTime',0.067);
    else
        % 剩下的每张图续接上一个图,每张图间隔为与视频中的一致(0.067s,帧率为30)
        imwrite(I,map,strcat(pathname1,filename1(1:end-4),'0.gif'),'gif','WriteMode','Append','DelayTime',0.067);
    end
end

waitbar(1,bar,'finished');
close(bar);

在这里插入图片描述


总结

结束后能在原来视频的目录下面找到和视频名字相同的gif文件。可以通过上面的代码调节每个图像的时间间隔(delaytime)或者写入gif文件中的图像的数量,从而能改变动画显示的速度,或者截取视频中的某一段做成gif文件。理论上delay时间可以设为0,最终的播放速度取决于硬件的好坏。

原文网址:https://kknews.cc/news/yge4pxg.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eron Fee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值