Clone wiki

transcode / General Information

Introduction

Transcode is a suite of tools, all of which are command line utilities, for transcoding various video, audio, and container formats, running on a platform that supports shared libraries and threads. Decoding and encoding is done by loaded modules that are responsible for feeding transcode with raw video/audio streams (import modules) and encoding the frames (export modules). It includes a variety of video and audio filters, including (but not limited to) video de-interlacing, audio resampling, framerate conversion, different video resizing algorithms, smoothing, sharpening, denoisifying, and cutting.

A number of modules are included to enable import of DVDs on-the-fly, Video4Linux (including V4L2 video capturing), MPEG elementary streams (ES) or program streams (VOB), MPEG1/2/4 video, Digital Video (DV), YUV4MPEG streams, Nuppel Video (NUV), quicktime (MOV), MPEG audio layer-1/2/3, WAVE, DIVX, MJPEG, and raw or compressed (pass-through) video frames. A number of export modules for enable writing MacOSX ;-), MacOSX 4.02/5.xx, MacOSX, Digital Video, MPEG-1/2 or uncompressed AVI files with MPEG, AC3 (pass-through) or PCM audio. More file formats and codecs for audio/video import are supported by the MPlayer and avifile import modules (exporting with avifile is restricted to video codecs, with MPEG/PCM or AC3 (pass-through) audio provided by transcode). Limited DVD subtitle rendering is also available.

Its modular concept is intended to provide flexibility and easy user extensibility to include other video/audio codecs or file types. A set of tools is available to extract, demultiplex and decode the sources into raw video/audio streams for import, non AVI-file export modules for writing single frames (PPM) or YUV4MPEG streams, auto-probing and scanning your sources and to enable post-processing of AVI files, including header fixing, merging multiple files or splitting large AVI files to fit on a CD.

Transcode runs on UN*X like systems like Linux, BSD, and MacOSX.

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.

Documentation

Transcode comes with manpages which are available online as well. The transcode(1) manpage is probably the one you want to read since it is the most verbose and most complete one. If you have additions to a manpage or have written a new one, please don't hesitate to send it in.

There is a Transcode FAQ (Frequently Asked Questions) that covers issues not mentioned in the man pages.

There is additional documentation available here in this Wiki and you are welcome to contribute.

Updated