Juergen's Video Toolbox




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.

dmconvert -v -f mpeg1s -p audio -p video,engine=sw,cropl=32,cropr=32,cropt=24,cropb=24 inputfile.mv outputfile.mpg

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




Es folgen meine eigenen Werkzeuge, die der Bearbeutung diverser AVI- und JPEG-Formate dienen.
(Quellen dazu)


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

avicheck < truevisionfile.avi

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.

Speedup und Reverse

Mit den Kommandozeilenoptionen -r oder -s n kann beispielsweise ein avi rueckwaerts oder in n-facher Geschwindigkeit zusammengebaut werden. Diese Operationen sind völlig ohne Qualitätsverlust möglich, solange mit -s eine ungerade Zahl verwendet wird. Bei geraden Zahlen tritt Zeilenflattern auf, welches aber schwächer ist, als beim gleichen Effekt direkt in MCXpress.

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??

Filterprogramme

ppmalpha

von Michael Schroeder dient dazu Farben auszutauschen, wobei die Raender weich uebergeblendet werden.

ppmdeinter

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


Audio Tools

Dieses Dokument soll insbesondere die Arbeit mit digitalen Schnittsystemen erleichtern. Dazu gehört natürlich auch die Arbeit mit von Tonspuren. Daher hier noch ein Abschnitt über Audio Werkzeuge.

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.