I built a Windows 32 bit command line executable, gif2frames.exe. (Go to download)
This tool will take an animated GIF image file and save a separate static image for each frame in PNG, BMP or JPG format.
The reason GIFs are useful is because the files can be optimized to reduce the size on disk. If a frame is visible for 1 or 10 seconds, a single copy of the frame may be stored inside the image file and a frame delay can help the player coordinate the animation.
For this reason, when you say “extract frames from a gif file” you could mean two things; each unique frame could be extracted just once, or each frame could be extracted for each unit of time it is visible. If you want the latter, you must then decide on a rate of frames per second.
Also interesting: the timing is funny business. Minimum frame rates (per second) can be determined by the software displaying the GIF file (more info at the bottom of this page). This makes the number of frames in a film strip style export of frames hard to calculate. I workaround this problem by finding the frame with the shortest display time and divide all the other times by this number. This means animations where all frames are shown for three seconds will only produce one image for each frame. If this is not what you are looking for, try ImageMagick (convert.exe).
Here are a few cmd.exe examples showing basic calls.
Animated GIF to PNG images
Animated GIF to BMP images
gif2frames at.gif -bmp
Animated GIF to JPG images
gif2frames at.gif -jpg
Only unique frames
gif2frames at.gif -png -unique