Tovid Wiki
Advertisement

libtovid overview[]

You've probably heard about some Python development going on. Well, the libtovid module is where it's all happening.

The goal of libtovid is to provide a complete DVD-authoring backend in pure Python. This backend will do all the dirty-work of encoding video, making menus, writing XML disc structure files, authoring and burning your videos, not to mention one day providing a unified GUI for all of it (yeah, that's a lot of stuff to do!)

As of January 14, 2007, things are starting to shape up, though ongoing refactoring has made the current SVN code rather unstable (but please try it anyway!)

You're encouraged to read and comment on the source code, even if you don't know how to program. We developers are nice people, and will not bite newbie users who are interested in the code.

Comments? Leave a message on the talk page.

Structure[]

libtovid is, essentially, a big Python module with a bunch of smaller sub-modules, breaking down the big tasks into smaller parts. There are several submodules in various .py files:

author
Produces dvdauthor or vcdxbuild XML files from user-defined disc layouts
cli
Providing an interface for building command-lines and pipes, running them, and displaying or capturing output
deps
For checking run-time dependencies
media
For storing info about multimedia video files and their attributes, and functions to get standard (S)VCD/DVD attributes, or read attributes from a file
opts
A Python interface to defining and parsing command-line options (a getopts alternative)
output
Simple functions for doing colored console output
spumux
For adding text or image subtitles to .mpg files
standard
Defines the major video disc standards (VCD, SVCD, and DVD flavors) via Python functions (still needs some work)
stats
Can read and gather data from a ~/.tovid/stats.tovid file; used by tovid-stats
xml
For simple XML generation

Some submodules are too big or complex for a single .py file; these are broken down further and stored in subdirectories of libtovid:

transcode[]

A video & audio encoding backend, suitable for converting files to (S)VCD or DVD target formats. Currently has three submodules:

encode
Containing encoding backends, using ffmpeg, mencoder, and/or the mplayer/yuv/mpeg2enc chain to encode video or audio
rip
Containing functions to rip a video stream or a sequence of frame images

render[]

A graphic & video rendering interface, suitable for creating menus & slideshows. This one is pretty large, with the following submodules:

drawing
Having a full Cairo-based image, shape, and text drawing capability
animation
Implementing some basic concepts needed for animated graphics
layer
Defining a bunch of different graphic elements for things like background images, thumbnail grids, and text labels; builds upon drawing to render the graphics
effect
Defining potentially-useful graphic effects like fade, zoom, rotate and translate, also rendered using the drawing interface
flipbook
Builds upon layer, effect, and animation to render full-motion video

gui[]

Containing all the code for the tovid GUI, which has been ignored so long you can see the dust settling on it. Wapcaplet is hoping to develop a new GUI, but that's a distant dream at this time. GUI developers seem to come and go; it's sad to say, but the tovid GUI sucks, and it needs a better one. Stop by the IRC channel if you are at all interested in helping.

Using it[]

The best way to become familiar with the libtovid modules is to experiment with them, interactively, using your Python interpreter. Fire up Python:

$ python
Python 2.4.3 (#1, Sep 30 2006, 20:38:19)
[GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

At the >>> prompt, try this:

>>> import libtovid
>>> help(libtovid)

This shows a summary of what libtovid does, the source code filename, and a list of sub-modules contained in libtovid. Let's say you're interested in the opts module:

>>> help(libtovid.opts)

For modules containing classes and functions, help displays documentation on them. To view the documentation for just a single class, you can do like this:

>>> help(libtovid.opts.Option)

help can be used on just about anything; it's like a built-in man utility for Python objects. See Python tips for further reference on using the interpreter.

More to be written

Advertisement