Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
This script takes one or more animated GIF files as input and calculates their total durations.
Python
Branch: master
Failed to load latest commit information.
README.md Move from PIL to Pillow.
gifduration.py Single quotes.
requirements.txt Update Pillow.

README.md

gifduration.py

This script takes one or more animated GIF files as input and calculates their total durations, returning zero for non-animated GIF files.

Requirements

Just run pip install -r requirements.txt, preferably outside a virtual environment if you want this script available system-wide.

Installation

Clone the repository to some appropriate folder and symlink gifduration.py into your PATH, for example:

ln -s ~/Code/gifduration/gifduration.py /usr/local/bin/gifduration

You may also have to make it executable:

chmod +x /usr/local/bin/gifduration

Usage

To get the duration of an animated GIF file, supply it as an argument:

gifduration atom-heart-mother.gif

This will return something like:

atom-heart-mother.gif:
Total duration: 2000 ms (2.00 seconds)
---

To also get the duration of each frame, use the --verbose (or -v) flag:

gifduration --verbose atom-heart-mother.gif

This will return something like:

atom-heart-mother.gif:
Frame 1: 30 ms (0.03 seconds)
Frame 2: 80 ms (0.08 seconds)
Frame 3: 30 ms (0.03 seconds)
[…]
Total duration: 2000 ms (2.00 seconds)
---

You can get the durations of several animated GIF files at once just by supplying all of them as arguments, for example:

gifduration atom-heart-mother.gif meddle.gif a-saucerful-of-secrets.gif

This will return something like:

atom-heart-mother.gif:
Total duration: 2000 ms (2.00 seconds)
---
meddle.gif:
Total duration: 100 ms (0.10 seconds)
---
a-saucerful-of-secrets.gif:
Total duration: 0 ms (0.00 seconds)
---

GIF files that are not animated will return a duration of zero. All other file types will return the message Not a GIF image.

Website

Go here for a simple web service carrying out pretty much the same thing.

Something went wrong with that request. Please try again.