Matlab程序实现mp4/avi视频转gif动图(CSDN_20240121)

在很多场合下,需要将mp4或者avi格式的时频转换成gif格式的动图,如制作PPT,网上提供有好多方法,包括线上的,但是这些工具使用起来可能并不方便,比如需要付费、注册等。

运行下面的matlab程序,可以直接实现视频到动图的转换。

close all
clear all


%% 
[filename1, pathname1] = uigetfile({'*.mp4';'*.avi';'*.*'},'File Selector'); % 获取MP4或者Avi格式的视频文件路径以及名称
video=VideoReader([pathname1,filename1]); % 读取视频

numFrames = video.NumFrames; % 获取视频帧的总数
Framerate=video.FrameRate; % 获取视频帧率

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);

具体的操作步骤如下:

  1. 选择要转换的视频文件(支持mp4格式和avi格式),如test.mp4;
  2. 运行结束后,在当前工作路径下输出test0.gif文件

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值