cvtmovie is a Windows command-line program that extracts an image sequence from an Amiga ANIM-J movie. I wrote it for a friend who was looking for a way to unpack his old animations without an Amiga emulator and video capture software. To use it,

  1. Download
  2. Extract cvtmovie.exe from the .zip and put it anywhere you like; it doesn't require any kind of installation. The .exe will work in both 32-bit and 64-bit Windows.
  3. Run it from a Command Prompt.

cvtmovie writes each frame of the animation as a separate, numbered Windows BMP image file. You can then recompile the images into a more modern format (MPEG-4, Quicktime, or Windows media, for example).

Kahnankas animation by Ken Offer
Kahnankas, by Ken Offer
Rocker animation by Eric Graham
Rocker, by Eric Graham
F-15 animation by Eric Graham
F-15, by Eric Graham

ANIM-J was an Amiga animation format that used Eric Graham's J delta compression. The files were built using Eric's dilbm and pilbm programs, and they were played with a program called movie. The three animations here, along with the builder and player software, were distributed on Fred Fish Disk #116. (Despite the J and the association with the programmer, ANIM-J is not the format used to encode Eric's well-known Juggler animation.)

There are at least three other programs that claim to decode ANIM-J. The oldest is Steven Den Beste's unmovie, written in 1992 for the Amiga and still available, as both source and executable, on Aminet. Werner Randelshofer's Java-based MultiShow / ANIMApplet can play Amiga animations in a browser window. Mark Podlipec's XAnim is a video player for Unix/Linux.

But unmovie only runs on an Amiga, while MultiShow and XAnim are players; they don't extract and save movie frames.

Moreover, unmovie and MultiShow ignore ANIM-J's ANSQ (animation sequence) chunk. Unlike other varieties of the ANIM format, ANIM-J allows movie frames to be played out of order. The intended order is stored in the ANSQ chunk as an array of frame indexes. Decoders that simply run through the frames in the order in which they're stored in the file will fail on many ANIM-Js. I haven't tried XAnim, but it appears from a glance at the source code that it may handle ANSQ correctly.

ANSQ also stores the duration of each frame. The duration in ANHD isn't relevant, since each DLTA can be played multiple times, each with a different duration. In addition to the frames, cvtmovie writes a text file listing the duration of each frame. This may be helpful for recreating the timing of the frames when compiling them into a different animation format.

I can't promise that this works on all ANIM-J files, and I probably won't update it. But I figured I'd share it in case someone finds it useful.