Copyright © 2006 Gene Michael Stover. All rights reserved. Permission to copy, store, & view this document unmodified & in its entirety is granted.
I wanted a command line program which would assemble frame files into a movie file format. Specifically...
So I wrote one & called it avi-ar.exe. This document contains the user manual for that program & for a related utility program. It also contains the source code for both programs.
Before writing my own program, I surveyed movie maker programs which were already available. I found few which were command line programs. None of those read the frame filenames from standard input. So I wrote my own, thereby achieving all of my requirements including ``learn more about movie files''.
One file, getopt.c, is in the public domain. I downloaded it from the TEX User's Group web site.
All other files, both source & executable, are copyrighted by Gene Michael Stover & released under the terms of the GNU Lesser General Public License [1]. Here's a copy of the copyright notice & license agreement at the beginning of each source file:
Copyright (c) 2006 Gene Michael Stover. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
This documentation, the document you are reading now, has its own copyright & is not released under the terms of the GNU Lesser General Public License.
enum-icinfo [-cchar]
enum-icinfo.exe prints to standard output a list of codecs installed on the computer. By default, the output format could be parsed by Common Lisp, but with the -c command line option, the output is in Delimeter Seperated Values (DSV) format.
Here is example output:
C:\temp>enum-icinfo
(ICINFO (n 0)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x64697663 "cvid")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "i"))
(ICINFO (n 1)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x30323469 "i420")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 2)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x31337669 "iv31")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "i"))
(ICINFO (n 3)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x32337669 "iv32")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "i"))
(ICINFO (n 4)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x31347669 "iv41")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "i"))
(ICINFO (n 5)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x76757969 "iyuv")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "i"))
(ICINFO (n 6)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x656C726D "mrle")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 7)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x6376736D "msvc")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 8)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x79767975 "uyvy")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 9)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x32797579 "yuy2")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 10)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x39757679 "yvu9")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "t"))
(ICINFO (n 11)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x75797679 "yvyu")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 12)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x3336326D "m263")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 13)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x3136326D "m261")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "m"))
(ICINFO (n 14)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x30357669 "iv50")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "i"))
(ICINFO (n 15)
(dwSize . 568)
(fccType #x63646976 "vidc")
(fccHandler #x33766D77 "wmv3")
(dwFlags 0)
(dwVersion . 0)
(dwVersionICM . 260)
(szName . "")
(szDescription . "")
(szDriver . "w"))
Copy enum-icinfo.exe into a directory that's in your path. Voilá! It's installed.!
Written by Gene Michael Stover.
Only available for Microsloth Winders.
Does not give the human-readable name for each codec. I had hoped that the Description field of the ICINFO would contain the human-readable name. There is a list of codec Four-CC codes & their names at fourcc.org.
The executable, full documentation, & source code are available at http://cybertiggyr.com/gene/vwu/.
enum-icinfo does most of its work with the Microsloth Winders ICInfo system call.
avi-ar
[-E] [-ccodec] [-ffps] [-qquality] avifile
avi-ar.exe is a command line program which consumes frames from BMP files & produces an AVI movie file. Each BMP files contains one frame in the form of a Microsoft Windows's Device Independant Bitmap (DIB).
The resulting movie file does not have a sound track.
avi-ar has two modes of operation: stdin mode & directory scan mode.
In stdin mode, avi-ar reads the names of the frame files from standard intput. Each each line from standard input has one pathname. The pathnames may refer to any file, anywhere, except that they cannot contain newline characters. avi-ar will use stdin mode if you do not use the ``-d'' command line option.
In directory scan mode, avi-ar looks for frame files in the current directory. It assumes the frame files are in order (0, 1, 2, 3, ...). It assumes that each frame file's name is the frame number in decimal, with no leading zero, followed by ``.bmp''. In other words, the first frame's name is ``0.bmp''. The second is ``1.bmp''. The eleventh is ``10.bmp''. avi-ar will scan & read frame files until the next frame file does not exist and the done file does exist. It will delete the done file. avi-ar will be in directory scan mode if you use the ``-d'' command line option. The argument to the ``-d'' option is the name of the done file.
For example, if you use ``-ddone.stop'', then avi-ar will be in directory scan mode, & it will stop when there are no more frame files & there is a file called ``done.stop''.
The reason avi-ar needs a done file is that it does not assume all the frame file exist before avi-ar starts. So it will scan the directory repeatedly, consuming frame files in order (0.bmp, 1.bmp, 2.bmp, ..., 10.bmp, 11.bmp, ...99.bmp, 100.bmp, ...) until the next expected frame file doesn't exist and the done file does exist. So you can start avi-ar, then start your frame-generating program.
The reason I created directory scan mode at all is that, on Microsloth Winders, the program I use to generate frames has difficulty running avi-ar in a way that the frame-generator can write the frame file names to avi-ar's stdin. On unix-like systems, I rely on stdin mode.
The -E is case-sensitive for your protection.
This option is for environments in which the frames are generated by another program, so no frame is sacred & it's safe to save space by removing them after writing them to the AVI file.
To get a list of CODECs on your computer, use enum-icinfo.exe 3.
Copy avi-ar.exe into a directory that's in your path. Voilá! It's installed.!
Written by Gene Michael Stover.
Only available for Microsloth Winders.
The executable, full documentation, & source code are available at http://cybertiggyr.com/gene/vwu/.
If you just want the executables, download them from the links in the bin directory, below.
If you want the source code so you can compile it yourself, create a subdirectory tree like the one below & download all of the files into it.
After downloading all of the source code files & creating the directories (even the ones which are empty before you compile), you can build all of the programs from the command line by CDing into the same directory with Makefile.w32 & then running build.bat.
You will probably have to edit the pathname in build.bat for your system.
These are links to some of the documentation I used while writing avi-ar.exe.
Radius Cinepak for portability?
Gene Michael Stover 2008-04-20