These are the release notes for tovid versions 0.20 through 0.29, with the newest on top.
This is mainly another bugfix-and-tweak release, with a few nice feature additions including multitrack audio encoding and todisc showcase templates. Efficiency and quality has been improved in a few places, and you'll be seeing fewer cryptic temporary directory names. Major bugs fixed include numerous media-handling problems in makedvd, the "Bad substitution" error on Ubuntu, and the "Cannot find button N" error with menus.
libtovid has seen some slow progress, but not much to show for itself this time around.
All shell scripts now call bash through /usr/bin/env, to avoid portability problems on platforms where bash is not the default shell.
- Fixed bug with -ffmpeg not honoring the -overwrite flag
- Statfile $ENC_PER_MIN (encoding time in seconds per minute of video) changed to $ENC_TIME_RATIO (ratio of encoding time to video duration, 1.0 == realtime encoding).
- Fixed letterboxed interlaced encoding, simplified video filtering code
- -crop option added, taking the same argument as mplayer's -vf crop filter. Useful for removing existing letterbox bars
- -v/-version option fixed to print version number only
- -interlaced and -deinterlace now supported with -ffmpeg
- Internal -quality handling tweaked so -ffmpeg produces better-quality (and larger) output, more comparable to mpeg2enc's
- Several bitrate fixes for -ffmpeg: VCD bitrate now compliant; audio/video bitrates now using explicit 'k' suffix; explicit audio bitrate now honored for all formats supporting it
- Added -progressive option, synonymous with -deinterlace
- Print error for unexpected command-line options
- Added -audiotrack option for encoding a specific audio track, or several audio tracks in a user-defined order
- added -showcase-image and -showcase-video style menus: thumbs at side with larger "showcase" image in centre - maximum 10 videos !
- added -showcase-no-thumb for using the showcase style of thumb buttons but no image in the centre.
- added -showcase-titles-align east|west for aligning titles starting at either the left or right edge of the thumb in the showcase style. "east" allows for multiline titles.
- added -rotate DEGREES which will allow rotating of showcase-image|-video
- added -wave default|GEOMETRY which will add a gentle warp to the showcase image|video
- added -showcase-framestyle glass: "glass" frames using mplayer and a -vf filter with a big speed up if used without showcase image|video or thumb processing ( ie. no rotate or wave or mask shape )
- added -chain-videos to allow jumping to next title after play
- added -noask for running script unattended with no prompting
- added "Play All" button
- added -tile3x1 which will produce a montage of 3 thumbs across instead of a row of 2 and a row of 1
- added -textmenu option which will call makemenu to make text only menu
- added -subtitles LANGCODE to associate subtitle streams with language codes.
- added -audio-lang "channel channel . . ." to set a default audio channel associated with each video
- added -showcase-seek to allow seperate -seek value for the showcase-video ( see -seek below )
- -seek now takes multiple values, one for each video, or you can just give 1 value for all
- use tcdemux and --nav_seek to speed up chapter image creation - huge speedup
- "progress" spinner for creating nav_seek log
- Change 72x54 to 80x60 to avoid transcode segfault Only affects more than 20 videos
- remove $REAL_WORK_DIR on aborted preview unless -keepfiles
- fix for sloppy hightlight/select images
- fixed static menu creation when using -opacity
- fix for clips shorter than animated menu length
- many small improvements and bug fixes, and some new bugs too no doubt !
- Remove png8: qualifier from intermediate output images; was causing problems with some versions of ImageMagick (ultimately resulting in a "Cannot find button N as referenced by subtitle" error from dvdauthor)
- Use temporary working directory for intermediate files, instead of makemenu.$PID clutter in current directory
- Allow use of URI-style input files, as in dvd://1 or http://path/to/file.avi. (No promises about the accuracy of the results, though...)
- Saner temp-dir creation
- Better aspect-ratio calculation, using tcprobe if possible, and mplayer as a fallback. Should report aspect of MPEG files correctly now.
- Print information about multiple audio tracks (if present), including ffmpeg and mplayer track ID numbers
- Fixed errant "EOF" text bug with -group/-endgroup
- sedprep function to simplify string replacement
- Added nopanscan option to prevent some DVD players from cropping the edges of widescreen videos when played on a 4:3 TV
- Added tempdir function, to replace standard mktemp utility. Temporary directories for tovid (and other scripts) are now named like outfile.3 instead of outfile.d5c7Ah (while still being unique, to allow concurrent sessions)
- Fixed bugs with re-authoring and error-handling
- Improved blank disc detection and disc-blanking
- -match option added, for printing records where a field matches a given value
Things are changing in mid-flight as we work on switching rendering backends from MVG to Cairo. This switch promises to bring new benefits, including better control over text layout, and more efficient rendering.
Also added are the necessary hooks to generate HTML documentation for all the libtovid modules using Doxygen. To generate the documentation, make sure you have Doxygen 1.4.7+ installed, and do:
$ cd libtovid/docs $ doxygen
Most of libtovid is still in fluctuation, so don't be too surprised if things don't work. Please join the discussion of development plans to help us get things right!
- Was mvg.py; now uses Cairo for all drawing operations.
- Uses a get/set library (in contrast with the script-oriented MVG backend)
- Text can be left, centered, or right aligned, and text layout can be predicted better
- ColorBars layer added, for rendering standard SMPTE color bars
- Text and Label class rewritten, better than before
- prescale function removed
- draw_on function now called simply draw
- Using new Cairo rendering backend
- draw_on function replaced by pre_draw and post_draw, to better express how & when effects are applied to a Drawing
- FadeInOut and Whirl effects added
- Drawable size and aspect ratio scaling set according to tvsys/format
- A demo video (Ogg/Theora format) shows a Flipbook rendering using the new backend
- String, integer, and floating-point command-line arguments converted to proper type
- Switched back to using built-in subprocess module for process control
- Currently supports command-line construction and piping in a platform-independent way
- New module for writing dvdauthor .xml files. See the test script for details on usage.
- A directory of unit-test modules; not fully updated, needs attention
tovid 0.28 Edit
It seems that each new release brings more changes than the last, and 0.28 continues the trend. The todisc command-line script from last release is patched, cleaned up and more stable than ever, with new command-line options for adding titles to submenus and controlling submenu title color. tovid itself has numerous small tweaks, including new options -amplitude and -autosubs.
libtovid has sprouted a new video graphics rendering system, using the experimental genvid script as a frontend. Not much of anything useful yet, but showing strong potential.
This is an early prototype of an upcoming GUI for the todisc script. Most of the buttons and controls don't do anything yet (and the "Finish" button just prints out a half-broken todisc command-line), but the basic interface elements are there. Please share your thoughts on what we have so far.
New experimental script for generating video using mvg, effect, layer, and flipbook modules. See the libtovid changelog for more on how it works.
- Better error handling when no DVD is in the drive (be it empty or a CD-ROM).
- More helpful error message when the DVD device cannot be found.
- (Re-)allow audio normalization to be used via normalize.
- New -amplitude option for increasing audio volume by a gain factor or decibel level
- (Re-)allow audio normalization to be used via normalize.
- New -amplitude option for increasing audio volume by a gain factor or decibel level
- Properly catch typos and incorrect options.
- New -autosubs, to allow mplayer to do auto-subtitling if subtitle files are present
- All intermediate files (log, ac3, m2v, wav, yuv) are stored in the unique temporary directory, within $WORKING_DIR (~/.tovid/preferences). Simultaneous encoding sessions should not interfere with each other now.
- The $OUTPUT_DIR from ~/.tovid/preferences is now used for output, if you do not specify an absolute path for -out. See the forum post for details.
- Quoting bug for working directory fixed (allowing spaces in current directory name)
- Added 'deblock' to accepted -filters
- tovid now ignores unknown command-line options (since catching them was having unexpected side-effects)
- Redundant mplayer/mpeg2enc dependency-check removed
- Variable naming simplification ($OUT_PREFIX.$VID_SUF, which was everywhere before, is now $VIDEO_STREAM, literal stream.yuv now $YUV_STREAM, etc.)
- Dumb x"foo" = x"$foo" string comparison portability (heh) hack removed, for readability's sake
- Quantization level, KB per minute of video, and encoding time per minute of video now written to ~/.tovid/stats.tovid (will be useful data later on)
- -out added to makexml command (bug fix)
- image option removed from the Burn tab to match makedvd
- Bug fix for the verify function - also fixes the no-DVD bug in makedvd.
- fixed audio bug where todisc tried to fade silent background audio if -bgaudio was not passed, and failed
- fixed thumbnail order bug
- allow longer thumb titles
- use smaller frame size for thumbs
- use symlinked $WORK_DIR to fix spaces or illegal character bugs in file or directory names
- disabled "jumppad" for dvdauthor xml
- -svcd ( with submenus disabled ) should work now
- added -submenu-titles, which will allow long titles in submenus
- for -menu-fade, fade thumbs in earlier if no background
- added -submenu-title-colour and -submenu-stroke-colour
- added progress monitor/spinner for transcode output
- use more reliable method of seeking frames to output for transcode ( -c rather than -cut )
- audio fixes and numerous other small bug fixes
- Check for existence of audio stream by presence of ID_AUDIO_ID (audio track number(s)), instead of by presence of channels and sampling rate.
- -is option (introduced in previous release) split into -isformat (vcd/svcd/dvd) and -istvsys (ntsc/pal).
- -average option supports tgt_bitrate and peak_bitrate
- -count option prints total number of distinct values
- New -list option for listing all values of an attribute, sorted by another attribute
- New -plot option, like -list but plots the data on a 2D graph.
This release of libtovid features a new animation-capable graphical rendering backend based on ImageMagick's Magick Vector Graphics (MVG) drawing format. MVG is (nearly) as powerful as SVG, while having a much simpler plain-text syntax.
Several new modules make this animation system possible:
Mostly, these are backends that can serve as the foundation for new command-line scripts or GUI interfaces. All of the above modules are installed along with tovid 0.28; the easiest way to gain access to them is to run a Python interpreter:
and then, for instance:
>>> from libtovid import mvg >>> help(mvg)
Become a contributor if you find yourself at all intrigued by the ensuing madness.
This contains the Drawing class, a wrapper around the MVG syntax with functions for all documented MVG drawing commands, as well as save, load, rendering and other useful functions. It also comes with a simple interactive interface (for use from the Python interpreter), featuring a viewable command history with unlimited undo.
The script may be run standalone for a demonstration of its capabilities; all API documentation, along with examples of interactive use, are contained in the module code itself (libtovid/mvg.py, or 'help(mvg)' as shown above).
This module provides classes and functions related to basic animation concepts, including a Keyframe class (storing a value associated with a particular frame of animation) and functions for interpolating ("tweening") values of a keyframed piece of data.
Here, a Layer class and several subclasses are defined. A layer is conceptually similar to the transparent drawing regions of the same name in GIMP or Photoshop; these layers use Python code to render graphical elements to a Drawing (from mvg.py).
Layers defined in this module are special-purpose, and are designed to be useful for creating and compositing graphics onto a sequence of video frames.
This script may also be run standalone for a demonstration. See the source code for API documentation, and for examples of interactive usage.
This module defines classes for creating customizable animated effects such as fading, movement, scaling, and color-fading. For now, these are fairly simplistic, and operate by keyframing the values of MVG drawing commands (via the animation and mvg modules mentioned above).
One important class, Flipbook, is defined here. A flipbook is a frame-by-frame video rendering system that uses the mvg module as its backend. It builds upon the layer and effect modules to draw text, thumbnail images, and other layers into a "video canvas", if you will, with keyframed effects.
Still in its early phases, but promising to become a useful rendering backend for DVD menus, slideshows and the like.
Other modules Edit
- cli.py got a smarter path-searching routine for verify_app()
- media.py got the frame-ripping and image-encoding functions from VideoUtils.py (which is now gone)
- thumbmenu.py went away (since it's being made obsolete by flipbook)
tovid now has more intelligent manpage creation - svn users will automatically get updated manpages when the source files change (get txt2tags for make install to work). Release users will always get the most recent manpages in the tarball since the manpages are made fresh when the tarball is packaged.
tovid 0.27 Edit
This release introduces todisc (formerly animenu), a high-level interface to building a complete ready-to-burn DVD from a collection of video files. Creating a DVD from the Linux command-line has never been easier!
The other scripts have been slightly improved (we hope); minor bugfixes and cleanups predominate, detailed below.
Flexible dependencies are now implemented. You no longer need everything under the sun installed to run tovid! Just the dependencies you need. If you're only interested in making DVDs, you're no longer required to have the VCD tools (and likewise you don't need the DVD tools if you're interested in making (S)VCDs).
- Generates an authored DVD or SVCD from a list of video files and their titles
- Automatic DVD menu generation, with:
- Animated thumbnail previews of each video
- Highly configurable menu style, with transparency effects, animated backgrounds, and fade-in/fade-out support for video and audio
- Optional animated or static submenus with chapter thumbnails
- Automatic DVD authoring, creating a ready-to-burn DVD directory with VIDEO_TS/AUDIO_TS folders
- Automatic encoding (if desired) of non-compliant input videos (via tovid)
- Gathers and prints statistics from your ~/.tovid/stats.tovid file (containing info on all the videos you've encoded with tovid)
- Count occurrences of unique values with the -count option
- Get averages for a certain field, optionally sorted by another field, with the -average option
- Audio is now encoded directly to the target format with ffmpeg; no wav-ripping is done, saving time and disk space. The -nowav option has been removed.
- Completion & "Thanks for using tovid" message is now printed for -ffmpeg encoding.
- -ffmpeg encoding simplified
- Slight optimization that increases picture space (by 16 vertical pixels) in some cases
- Complete tovid command-line is now printed before execution starts
- 'abspath' function for easier absolute pathname resolution
- 'assert_dep_group' function to enable more flexible dependency installations
- 'assert_dep' function to check for a single dependency
- 'countdown' function to wait 5 seconds with a countdown timer
- Added support for authoring a DVD filesystem directory (the one containing VIDEO_TS, created by dvdauthor)
- ISO creation (and -iso option) removed entirely
- Internal logic simplified; maintenance should now be easier
- Default burning speed changed to 'automatic' (which makes things work for burners that don't like being told to burn at an exact speed)
- Small bug fixed where the file sizes of VOBs with spaces weren't correctly found
- Error message directs users to tovid.org, not dvdauthor
- '-fast' option, to skip time-consuming video length estimation; results in much faster identification (as long as you don't need accurate length)
- '-is' option for identifying compliance. 'idvid -is dvd FILE' prints "true" or "false", depending on whether FILE is DVD-compliant. Also returns shell true (0) or false (1).
- Fixed title-ordering bug with '-align south(west|east)'
- Cleaned up code for readability
- New -verbose option
- '-out' (required) option added for consistency with other scripts
- -basic, -dvd, -all, -keep and other options implemented
Refactoring and code refinement is the focus of this release.
- All encoders now provide a get_script() function that takes an input file (a MediaFile) and a set of customization options (an OptionDict), and returns a Script (see below)
- The Script class provides a frontend for running several commands in sequence. Current implementation writes commands to a shell script, executed when Script.run() is invoked.
- Command class mostly obsolete now, awaiting removal
- MultimediaFile shortened to MediaFile, stream classes back to old interface
- Module docstring extended, including doctest-testable examples
- OptionDict now inherited from dict, to allow dictionary operations like iteritems()
Merged filetypes.py and streams.py
- Back to direct class variables, instead of needlessly-complicated spec dictionary.
tovid 0.26 Edit
This is primarily a maintenance release. Several bugs are fixed in the classic tovid scripts, and there's a handful of new features. The tovid GUI "Save" and "Open" features are disabled in this release, since they're not presently working.
The standard 'tovid', 'makemenu' and other scripts are pretty much as they were, but there are some new scripts appearing, which use 'libtovid' modules written in Python. After installing this release, you should be able to encode using the experimental 'pytovid' encoder. It works pretty much like the standard 'tovid' script:
$ pytovid -svcd -pal -in INFILE -out OUTFILE
It's not nearly as well-rounded as tovid yet--only [-vcd|-svcd|-dvd] and [-pal|-ntsc] are known to work. You can choose one of two different encoding methods:
$ pytovid -method mencoder -in ... -out ... (default method) $ pytovid -method mpeg2enc -in ... -out ...
As you may guess, the first uses 'mencoder' for encoding, while the second uses 'mpeg2enc' (like classic tovid). The mencoder method is significantly faster, but the validity of the output files is still mostly unknown. If you try pytovid, please report your results to the developers on the #tovid channel of irc.freenode.net, or on the tovid forums.
- Video streams' decoding buffer no longer specifed to (too) conservative values. Instead, mplex chooses the maximum compatible decoding buffer allowed for the target format ((S)VCD and DVD).
- -nowav accidentally removed the source video file. This bug is fixed.
- Error message printed when using -ffmpeg with -subtitles
- -ksvcd removed; -kvcd now does 352x(240|288) mpeg-2 encoding (instead of KVCDx3 standard)
- Removed interlacing field order control (-interlaced_bf)
- Eliminated SoX dependency; now using ffmpeg for silent-audio generation
- Support for BDVD format (-bdvd option), which can give smaller output files than KDVD with a custom quantization matrix
- Eliminated SoX dependency
- Background audio converted directly to target format, instead of creating a .wav first
- Minor bug in calculating shrink percentage fixed
- New, improved logic. When making a dvd filesystem, iso image, or disc, makedvd determines how much disk space you have in the working directory. If you don't have enough, it will quit.
In addition, makedvd will quit if you try to exceed a dvd's capacity.
- Output clean-up
- tovid-init now checks for run-time dependencies when tovid starts. This means ./configure && make install isn't needed any longer if a missing dependency is installed after tovid. Instead, only tovid -refresh-deps is needed to make tovid aware of newly installed dependencies.
The libtovid modules have undergone significant restructuring, with the aim of making the modules easier to read and build upon (whether or not it has succeeded...) Things are still subject to change, but all are invited to peruse, study, and nitpick the source code. Many portions are in a half-completed state, and there are some quick-and-dirty hacks throughout.
Here's a summary of the additions and changes to libtovid:
- opts, providing Option (an encapsulated command-line option, formerly OptionDef) and OptionDict (a dictionary of options set by the user)
- cli, providing a simple interface for building and executing command-lines encoders, containing submodules for each encoding method:
- gui, containing several submodules:
- streams, brought back in to support video identification
- filetypes, for gathering specs about a multimedia video file
- Disc, Menu, and Video classes
- textmenu and thumbmenu, for creating title-text or video-thumbnail menus
- Formerly broken boolean args to 'pytovid' (-vcd, -pal, -dvd etc.) are now working.
- List parsing simplified (and thus improved); multiple list styles are now supported. The following are all equivalent (single-quoted strings are also allowed):
pymakemenu -titles "Episode 1" "Episode 2" "Episode 3" ... pymakemenu -titles "Episode 1", "Episode 2", "Episode 3" ... pymakemenu -titles ["Episode 1", "Episode 2", "Episode 3"] ...
- mplayer/mpeg2enc VideoPlugin now functional for (S)VCD/DVD, PAL/NTSC.
- Smarter autotools scripting, gives more informative help when installing from source
- makemenu's undocumented -debug option now documented. usage examples added as well
- makedvd's new behavior updated. usage examples added
- makexml's new behavior updated. usage examples added
- 'docs' SVN module moved into the 'tovid' module
- Experimental, partially-working video-encoder using libtovid (see below)
- Check for expected formatting in -aspect; error if it's not an integer ratio
- -fake option, for printing out commands (but not actually encoding)
- -quiet option, to suppress most output
- -nowav option, to skip wav-ripping and encode directly to AC3 for supported formats
- -keepfiles option, to keep the intermediate files tovid creates (.wav, .mpa, .ac3, .m2v, .m1v). doesn't work with -parallel as the intermediate files are named pipes.
- Fix potential 'expr' errors calculating average/peak bitrates
- mpeg2enc multithreading (-M 2) re-enabled
- More verbose command-line options passed to mpeg2enc/mplex in some cases
- SVCD compliance-identification bug ("You can burn this to SVCD" was not printed if the audio also matched VCD)
- -verbose option prints information from tcprobe and ffmpeg
- (S)VCD accidental menu deletion bug fixed
- made compliant with FreeBSD
- DVD chapters are made every 5 min by default
- -burn option works alone now (-author and -image options no longer needed to burn)
- can now properly handle all DVD types (ROM/RAM and used +/-R are rejected, any +/-RW and blank +/-R are taken). when given an unusable DVD, prompts for a new one. used +/-RW discs are automatically blanked before burning.
- dvd device is tested for existence, quit on fail
- made POSIX compliant, added input verification
- slight output clean-up
- new functions for wrapping output to the display, and for verifying variables
- encoded files are named without using the input file's extension
- slight output clean-up
Some restructuring is beginning to take shape. TDL.py has been split up, with OptionDef moved into the new module Option (for now), and command-line definitions moved into three new modules:
Each of these implement (or will implement) a generate() function, for doing the necessary encoding/converting/compositing to create videos, menus, or discs. The Parser (formerly Parser.py) is now part of TDL.py.
There's also now VideoPlugins.py, which defines several different "plug-in encoders"; you can, in theory, use any of the encoders to generate() a video. As of this release, only the mencoder-based backend is in a condition that resembles "working".
The 'pytovid' frontend uses all this to encode a video; using pytovid is similar to using the classic 'tovid' script:
pytovid -format dvd -tvsys ntsc -in foo.avi -out foo_encoded
If you're very lucky, you will get an NTSC DVD-compliant 'foo_encoded.mpg'. Keep in mind that it's all very experimental at this stage, and hardly any testing has been done; use with caution.
tovid 0.24 Edit
tovid and the GUI are back together again, along with a new (experimental) tovid Python library, 'libtovid'.
- Experimental Save/Open feature added, for saving a disc project as a TDL text file (and loading it again later)
- Better handling of those "1000 fps" (variable framerate) input videos
- Quantization and output progress meter implemented for -ffmpeg
- Usage notes condensed
- Minor bugfixes
- Switched to a simpler button-generation algorithm; menu highlights now use a "cursor" instead of highlighted text. Should eliminate some spumux button-related errors.
- Usage notes condensed
tovid 0.23 Edit
- Minor fixes to -fps (now accepting integers, as well as X:Y ratios)
- Better in/out directory handling
- -debug now prints to stdout in addition to the logfile
- Disc splitting revised (not well tested, though)
- Minor bugfixes
- AC3 is now OK for PAL DVDs
- Default menu highlight color changed to green (#0F0)
- Tidied up code, arithmetic expressions
- Code cleanup
tovid 0.22 Edit
- Removed 'normalize' dependency by using mplayer -af volnorm. Normalization is now possible using -parallel.
- Aspect ratio control moved to advanced usage notes
- New -quality option added (controlling bitrate and quantization). Default bitrates for each format removed from script; they're now calculated based on default quality.
- Safe area is now rounded down to a 16-pixel multiple for (presumably) more efficient encoding.
- -interlaced option fixed (hopefully)
- mplayer output parsing simplified; ID_XXX= options are now executed directly as bash commands, instead of excessive grepping and awking. Many variables renamed appropriately.
- ID_LENGTH from mplayer is now used if it's nonzero, resulting in much faster (but possibly inaccurate) determination of video duration. If ID_LENGTH is zero, the old (time-consuming) approach is used.
- Fixed backward logic in deleting/keeping temporary files (they are now removed UNLESS -debug is used).
- "Update scan offsets" option added to VCD output
- Fixed vcdxbuild command-line error
tovid 0.21 Edit
- New expermiental script for creating "thumbnail" video previews
- Minor tweaks to (re-)enable important functionality. Disc burning is now possible.
- Revamped bitrate controls (still experimental)
- -ffmpeg encoding option improved and mostly functional
- BSD-oriented and other portability enhancements
- Fixed bug causing log output to be lost
- Bugfix for re-encoding already-compliant video
- Cleaned up output
- Mostly functional burning
- Truncate Volume ID to valid length
tovid 0.20 Edit
- New script containing common suite functions and declarations
- Improved progress-meter with a new approach
- Portability enhancements and code cleanup
- Tidied up console/logfile output a bit
- Fixed (hopefully) -parallel encoding
- Temporary work directory for each tovid instance partially implemented
- -filters now actually takes comma-separated options
- Experimental -ffmpeg encoding option added (doesn't work yet)
- -fps option back in at user request, until a better solution is found
- Portability enhancements and additional output