What is transcode?

transcode is a linux text-console utility for video stream processing, running on a platform that supports shared libraries and threads. Decoding and encoding is done by loading modules that are responsible for feeding transcode with raw video/audio streams (import modules) and encoding the frames (export modules). It supports elementary video and audio frame transformations, including de-interlacing or fast resizing of video frames and loading of external filters. A number of modules are included to enable import of DVDs on-the-fly, MPEG elementary (ES) or program streams (VOB), MPEG video, Digital Video (DV), YUV4MPEG streams, NuppelVideo file format and raw or compressed (pass-through) video frames and export modules for writing DivX;-), OpenDivX, DivX 4.xx or uncompressed AVI files with MPEG, AC3 (pass-through) or PCM audio. Additional export modules to write single frames (PPM) or YUV4MPEG streams are available, as well as an interface import module to the avifile library. It's modular concept is intended to provide flexibility and easy user extensibility to include other video/audio codecs or filetypes. A set of tools is included to demux (tcdemux), extract (tcextract) and decode (tcdecode) the sources into raw video/audio streams for import, probing (tcprobe) and scanning (tcscan) your sources and to enable post-processing of AVI files, fixing AVI file header information (avifix), merging multiple files (avimerge) or splitting large AVI files (avisplit) to fit on a CD.

How does it work?

transcode loads shared library modules that are responsible for feeding it with raw streams and encoding the frames:

- The import modules for audio/video decoding are loaded with dlopen system call and are responsible for starting the video and audio streams (directly or via the popen system call) and have a single function interface to the main program. The import is handled by a thread that buffers the video/audio frames.

- The main program transcode currently performs a number of simple video/audio frame manipulations (in this order) or allows simple pass-through of raw frame data:

  Video:

  - cut out arbitray frame region for processing
  - de-interlace video frame
  - fast enlarging of video width/height by a multiple of 32 rows/column up to 1024x768
  - fast reduction of video width/height by a multiple of 32 rows/column
  - high-quality resizing with filter
  - cut out arbitray frame region for encoding
  - rescale (downsample) video width/height by a power of 2
  - flip video frame upside down
  - mirror image of video frame
  - swap R and B bytes in video frame
  - transform to b/w video frame
  - apply gamma correction
  - anti-alias video frame

  Audio:

  - change the volume of the audio stream
  - resample audio stream
  - swap byte order in audio stream
  - sync video with audio frames (V=0|A=N, V=1|A=N+1,...)

  Filter Plugins:

  - Additional effects are available via external filter plugins loaded with option "-J".

- The export modules for audio/video encoding are loaded via the dlopen system call and the encoder loop is started for the selected frames. In most cases audio and video are handled by the same module.

What is transcode?

Colored boxes are supported without additional packages. However, most capabilities are only available in the 0.6.0 pre-releases. Unconnected boxes not yet implemented, but 0.6.0 (final) will have a symmetrical butterfly structure. OpenDivX (obsolete) support included, but much newer and faster Divx encoding/decoding requires codecs available for linux. Picture import supported by newer versions of ImageMagick (0.5.x). Additional optional audio/video import codecs supported by using the avifile library. Quicktime movie with limited codec support is available via the quicktime4linux library. You need libdv installed to enable Digital Video decoding/encoding.

(ES=elementary stream, including concatenated frames, PES=packetized elementary stream, including program streams)

Last modified: Thu May 16 10:16:24 CEST 2002