Still Image Tools
Anthony Dekker published an image quantisation algorithm called
NEUQUANT.
This algorithm uses a Kohonen neural network for calculating a representative set of colors.
Results are by far superior to the ppmquant utility (which uses Heckbert's "median cut").
See also NetPbm.
I wrapped the NEUQUANT algorithm into a utility I call ppmquantneural. It is not a full replacement to ppmquant, as it only generates color-maps. It does not apply maps. Thus you need to combine both tools. Example usage:
ppmquantneural < input.ppm 32 > map.ppm;
ppmquant < input.ppm -map map.ppm | ppmtogif > output.gif
or
pnmremap < input.ppm -map=map.ppm | ppmtogif > output.gif
The package ppmquantneural-1.5.tar.gz (or .zip) compiles with bcc55 and gcc2. A DOS-binary is included.
Version 1.4 apparently contained an off-by-one-error, making images slightly darker than they should be.
Video Tools
This is a chapter on video tools that are available in source code and run
under unix. Further info on tools for other platforms is presented by John McGowan in the Wotsit file format library.
For disassembling .avi files, I have a tiny
patch for xanim-2.70.64 that allows you to
dump a series of raw PPM images (and audio tracks) to disk. As xanim understands many .avi
dialects (including indeo and cinepak) as well as a number of other file
formats, this is very useful. Be warned: when reading mpeg files, xanim handles
only I-frames.
For converting your favourite .avi into our AVIDs .omf format, I use my patched xanim with the following command:
xanim +V10 +v '+ZF|pnmtosgi -rle > out/favourite.%03d.rgb' +Ze favourite.avi
AVID Media Suite can import the generated SGI image series under "Import->Image_file" by entering the filename "favourite.rgb"; it is funny, but it interpolates the numbers.
This page continues in German. Sorry, folks!
Silicon Graphics Indigo 2, mit Cosmo Compress hardware jpeg encoder (Z.B.
Alien oder Galileo) haben folgende Tools:
capture
digitalisiert sgi movie files mit 768x576, 25 frames pro Sekunde. Mehr dazu auf meiner alten mpeg-Seite.
konvertiert ein sgi movie file nach mpeg1. Das dauert etwa die 80-fache Spielzeit des Filmes.
dmconvert -v -f mpeg1v -p video,engine=sw,kdist=3,rdist=1,size=320x240,inrate=8,rate=24 infiles*.jpg outfile.mpg
erzeugt ein MPEG Video aus einer Serie von JPEG Files. Jedes JPEG File wird zu einem I-Frame, darauf folgen zwei leere P-Frames, sodass bei nominell 24fps die JPEGs mit 8fps abgespielt werden.
Mit kdist=1,rdist=1 kann I-Frame-only codiert werden.
Das Schnittsystem Avid MediaSuite kann keine Filme digital exportieren (um beispielsweise anschliessend mpegs zu generieren). /local/multimedia/bin/omf2sgi loest diese Problem. Dazu muss im Schnittsystem ein Streamline gemacht werden, der eine Audio und eine Bildspur enthaelt.
omf2sgi 123456789_A1.omf < 123456789_V1.omf > sgifile.mv
Das Schnittsystem Avid MCXpress auf NT berechnet Effekte nur mit 25 Hz
zeilenverdoppelten Vollbildern aus den Odd-Fields. Die Even-Fields werden
verworfen. Die Folge ist ein deutlich sichtbares Zeilenflackern. Bessere
Qualitaet erzielt man, wenn man von MCXpress TrueVisionAVI exportiert, den
Effekt mit eigenen Tools durchfuehrt, und dann wieder TrueVisionAVI importiert.
Diese Import und Export funktionen gehen sehr schnell und sind verlustfrei, da
nur Headerinformation in den jpeg codierten Datenstroemen veraendert wird.
Die folgenden Tools liegen ebenfalls in /local/multimedia/bin
gibt die Container Struktur eines (beliebigen !) AVI files aus. Sollten dabei hinweise auf Audio Spuren auftauchen, darf man bei aviTV2sgi keine Endung erzwingen, da sich sonst Audio und Video Dateien gegenseitig ueberschreiben!
aviTV2sgi < truevisionfile.avi > sgifile.mv
erzeugt ein sgi movie file, welches mit dmconvert zum mpeg gewandelt werden kann.
aviTV2sgi -dump_only -o avi_%04d.jpg < truevisionfile.avi
legt im Unterverzeichnis out00 (usw...) die Fields (=Halbbilder) als einzelne
JPEG Dateien ab. Die Aufloesung ist 720x288, das jpeg-format ist 211. Diese
jpeg Bilder koennen beispielsweise mit gimp und dem gap-plugin effizient
bearbeitet werden, da die Dateinamen durch den '-o' Parameter ins Format
name_0000.jpg gezwungen sind.
Von diesen jpeg Bildern kommt man direkt wieder zurueck ins TrueVisionAVI
Format:
jpeg2aviTV out??/*.jpg > truevisionfile.avi
Falls es sehr viele Dateien sind, besteht die Gefahr, dass die Kommandozeile
bei der '*'-Expansion an ihre Laengenbegrenzung stoesst. Dann sind Konstrukte
wie
find out?? -name \*.jpg -print | sort | jpeg2aviTV -
empfehlenswert.
Das folgende Beispiel beschleunigt die TrueVisionAVI Datei demo.avi auf
Faktor drei und schaltet in den Rückwärtsgang:
aviTV2sgi -dump_only < demo.avi
find out?? -type f -print | sort | jpeg2aviTV -r -s 3 - > demo_rev3.avi
rm -rf out??
von Michael Schroeder dient dazu Farben auszutauschen, wobei die Raender weich uebergeblendet werden.
von Michael Schroeder macht aus zwei Halbbildern ein Vollbild. Der source code ist ppmdeinter.c. Man verwendet es am besten mit dem Shellskript avi2tif.
denoise [options ...] -|*.{ppm|jpg}
kann verwendet werden um Rauschen aus Videoaufnamen zu entfernen, oder/und um 'Motion blur' einzufuegen. Das Programm arbeitet auf PPM files, die - falls es sehr viele sind - auch ueber stdin eingegeben werden koennen. Es werden keine Nachbarpixel verwendet. Einzig die jeweils entsprechenden Pixel in den nachfolgenden Dateien (Anzahl mit -range einstellbar) werden zur Glaettung benutzt. Sind die Dateien eine Serie von Vollbildern, so ist die Option -mix 1.0 sinnvoll. Handelt es sich um eine Serie von Halbbilder, so sollten mit -mix nur Werte knapp ueber Null verwendet werden. Das Programm kann djpeg und cjpeg> benutzen, um anstelle von PPM direkt mit JPEG Dateien zu arbeiten.
Folgendes Beispiel zeigt eine Manipulation in einem TrueVision AVI:
aviTV2sgi -dump_only -o xx_%04d.jpg < demo.avi
find out* -name xx_\* | sort | denoise -o '|cjpeg -sa 2x1 > out%02d/nn_%04d.jpg' -
find out* -name nn_\* | sort | jpeg2aviTV - > demo_smooth.avi
TIFF Export in hoher Qualitaet
aviTV2sgi -dump_only < demo.avi
djpeg out00/avi_0000.tvmj > a.ppm
djpeg out00/avi_0001.tvmj > b.ppm
/home/inf4/mlschroe/ppmdeinter a.ppm b.ppm | /home/inf4/aherrman/pnmsmoothy2 | /home/inf4/mlschroe/ppmcolexp | pnmscale -width 720 -height 540 | pnmtotiff -none -dpi 200 > demo.tif
rm -rf out00 a.ppm b.ppm
playtrack -f /dev/rmt/0cn -wav > dattrack001.wav
Playtrack stammt urpsrünglich aus der Paket DATlib von Marcus Meissner. (ftp://ftp.informatik.uni-erlangen.de/pub/DATlib). Die Originalversion in DATlib-0.81 unterstützt nur den Export im SUN AU Format, was für die Anwendung in Schnittsystemen einen Konvertierungschritt nach WAVE Format (z.B. mittels sox) erforderlich macht. Triviale Konvertierungen wie diese (nur Header und Byteorder) auf grossen Datenmengen ineffizient. Der Patch DATlib-0.81.diff ermöglicht den direkten Export eines .wav files, wie oben gezeigt. Die Angabe '-f /dev/rmt/0cn' wurde hier nur zur Dokumentation des "DefaultAudioDrives unter Solaris" niedergeschrieben, und kann weggelasen werden. Das gepatchte Programm ist unter /local/dat/bin/playtrack installiert; Ein geeignetetes DAT-Laufwerk (Archive Python 4326, mit Audio Firmware 01931-XXX5AC) ist im Multimedia-Labor an faui09e angeschlossen. Installation und Pflege des DAT-Audio-Treibers sowie einige andere Tools zum Umgang mit Audio-DATs werden in README.datlib beschrieben.
mpeg_play -audio %b.au -dither ppm -ppmname %b_%05d.ppm
mpeg_play Version 2.5 wurde von mir um die obigen Optionen erweitert.
(mpeg_play-2.5-audio.diff)
Damit ist es moeglich, Tonspuren im SUN-AU Format aus einem Mpeg1/System-stream
herauszuloesen. Damit ist insbesondere auch durch die Moeglichkeit Einzelbilder
im .ppm format auszugeben, ist es dadurch moeglich, MPEG-codiertes Material weiterzuverarbeiten.