No BSD License  

Highlights from
avi2gif

from avi2gif by Kedar Patwardhan
Converts avi video files to gif animations

avi_to_gif(aviName, gifName, numLoops, FPS)
function avi_to_gif(aviName, gifName, numLoops, FPS)
% AVI_TO_GIF
%------------------------------------------------------------------
% Simple function to convert *.avi movies to animated *.gif files
% Usage: AVI_TO_GIF(AVINAME, GIFNAME, NUMLOOPS, FPS)
%   NUMLOOPS - has to be between 1 and 65535
%------------------------------------------------------------------

% Author : Kedar Patwardhan
% Date   : 09/25/2008
% Last Modified : 10/28/2008

warning off;

% read-in avi information
avi_inf = aviinfo(aviName);
num_frames = avi_inf.NumFrames;
if(numLoops < 1),
    numLoops = 1;
elseif(numLoops > 65535)
    numLoops = 65535;
end
if(FPS < 1),
    FPS = 1;
elseif(FPS > 100),
    FPS = 100;
end

% check if gif file already exists
writeMode = 'append';
button = 'No';
fid = fopen(gifName);
while(fid>0),
    fclose(fid);
    fid = -1;
    button = questdlg(['File ' gifName ' already exists. Do you want to overwrite?'],'Gif Overwrite?');
    if(numel(strmatch(button,'No'))),
        gifName = inputdlg('Enter new file name:','Save to Gif');
        fid = fopen(gifName);
    end    
end

% read-in one frame at a time
% and write to gif file

write_gray = true; %currently matlab does not support color GIF files.

wait_bar = waitbar(0,'Converting to Gif file...');
for frm=1:num_frames,
    if(frm == 1),
        writeMode = 'overwrite';
    else
        writeMode = 'append';
    end
    
    gif_data = [];
    Frm = aviread(aviName,frm);
    gif_data(:,:,:,1) = Frm(1).cdata;
    % check if user wants a gray-scale gif file
    if(write_gray),
        gif_data = [];
        gif_data(:,:,:,1) = rgb2gray(Frm(1).cdata);
    end
    
    % write (append) one frame at a time, this is especially useful when
    % the avifile is very large and may lead to 'out-of-memory' errors if
    % read at once.
    if(frm == 1),
        imwrite(gif_data, gifName,'LoopCount',numLoops,'WriteMode',writeMode,'DelayTime',1/FPS);
    else
        imwrite(gif_data, gifName,'LoopCount',numLoops,'WriteMode',writeMode,'DelayTime',1/FPS);
    end
    
    waitbar(frm/num_frames, wait_bar);
end
close(wait_bar);

Contact us at files@mathworks.com