(0) If you're just starting run, don't walk to the HOWTO. There's a text copy mjpeg_howto.txt where you found this file. Its online at http://sourceforge.net/docman/?group_id=5776. If you're interested in the source-code and what's buried there read the README's. There's a lot of useful info buried in there... There are specialist README's for mpeg2enc and mplex in the corresponding sub-directories as well as the general README in the top directory. The scripts directory contains shell scripts that provide a convenient interface for common tasks. E.g. lav file (editlist, avi, quicktime) -> MPEG for disk storage, VCD or SVCD. (1) VCD and SVCDs. VCD's have very specific requirements as to the format of the multiplexed systems stream. For VCD these are actually at least "bendings" of the original MPEG standard and are far from optimal as far as maximising possible quality for software decoding goes. The simplest way to generate VCD and SVCD streams that can be burnt to CD and played using DVD players etc is to use the lav2mpeg script with the "-V" and "-S" flags. If you want to play around a couple of hints. To build a VCD you absolutely *must* used the VCD format option for mplex "-f 1". This turns on a lot of weird stuff that otherwise has no place in a respectable multiplexer! Obviously, to play on all players your original MPEG video must be the standard 1151Kbps and audio must be 224Kbps MPEG-1 layer 2 (as produced by the "-v" flag of mp2enc. The systems streams generated by "-f 1" have been tested and succesfully burned onto CD using vcdimager and vcdburn. An SVCD video stream is variable bit-rate MPEG-2 with a maximum rate of around 2500Kbps and a video buffer size of 230KB. Currently I recommend encoding -m 2 -F 3 or (for progressive material like PAL films) -m 2 -F 0. -F 1 and -F 2 will work but are currently handicapped by rather dumb code to choose the type of motion compensation. I have some suspicions that the rate control code and multiplexer needs adjusting for field sequences (-m 2 -F 1 and -F 2) also. To generate a legal S VCD program stream with mplex use the "-f 3" flag. (2) For transcoding existing MPEG-2 streams from digital TV cards or DVD a still lower data-rate than for broadcast will give good results. Standard VCD 1152 Kbps typically works just fine for MPEG1. The difference is in the Signal/Noise ratio of the original. The noise in the analog stuff makes it much harder to compress. You will also need to manually adjust the audio delay offset relative to video when multiplexing. Very often around 150ms delay seems to do the trick. (3) If you want to play MPEG1 on hardware decoders don't build variable bit-rate video streams. If you intend to use software players variable bit-rate is a much more efficient way of encoding and guarantees decent quality. All in all a *much* better bet. The code for the "-S" (SVCD) flags in the lav2mpeg script shows an example for typical usage. Buffer sizes. For hardware players experimentation is the order of the day. My DXR2 seems to use a nice big > 100K buffer for VCD as well as DVD streams and be happy to read MPEG-1 streams *much* faster than the official VCD 170K/sec. 300K seems fine. Generally, you'll probably need a buffer size of around 1/4 data-rate to avoid buffer underflows (signalled as "TO<framenum>"'s by mplex). (4) If you want to play MPEG-1 stuff on hardware decoders stick to 44.1 224Kbps Stereo layer-2 audio. The 100Kbps or so maximum you'll gain using MP3 aren't going to make a visible difference to video anyway. (5) If you want to reduce bit-rate without annoying artefacts when compressing broadcast material you should try the noise filters. (6) Storing MPEG's. If you record the data as XA mode 2 tracks you can fit appreciably more on a CD (at the expense of error correction/detection). You can use vcdimager to do this and readvcd to extract the resulting files. (6) For MPEG-1 encoding a typical (45 minute running time) show or 90 odd minute movie from an analog broadcast I have found a constant bit-rate of around 1800 to be ideal. The resulting files are around 700M for 45 minutes which fits nicely as a raw XA MODE2 data track on a CD-R. (I use cdrdao to write such CD's and a hacked version of vcdread - soon to be included to extract them). Update: I've now got a digital cable provider. Digital TV sources (even when captured via an analog interface) give *much* better results. There doesn't seem much point going above 1400 or 1500Kbps. Often even VCD 1152 works fine. It depends a bit on the quality of the original. However, IMHO the VCD rate is silly 'cos it means every movie still needs two CD's but the second is mostly empty. Might as well crank the rate (and quality) up until you come in at just under 2 CD's. For pure digital sources (DTV or DVD streams and similar) VCD 1152 works fine. Extrapolating this suggests using 2500bps for MPEG-2 SVCD from broadcast sources with 2000bps or less o.k. for pure digital. (7) Speed. On modern 400Mhz+ CPU's there is *no point* running with a motion compensation setting less than 16. The speed gains aren't huge as other parts of the encoder take a significant fraction of the time. It is much better to leave the radius at 16 and push -4 and -2 to 4. See README. (8) Variable bit-rate. Remember to tell mplex you're encoding VBR as well as mpeg2enc (see the example scripts). It *could* auto-detect but I haven't got around to that yet. You should tell mplex a video buffer size at least as large as the one you specified to "mpeg2enc". Sensible numbers for MPEG-1 might be a ceiling bit-rate of 2800Kbps, a quality ceiling (quantisation floor) of 6 and a buffer size of 400K. (9) Big files. Under typical linux 2.2 systems files are limited to 2G bytes. This is rarely a problem for MPEG-1 video files but it could bite. If your video threatens to exceed 2G you'll need to do it in seperate chunks (for now). 10) Interoperability. Quicktime files capturing using lavrec can be editted using Broadcast2000. mjpeg AVI files captured using the streamer tool from the xawtv package can be editted and compressed and played back using software. Hardware playback is not possible for such files due to limitations in the Zoran hardware currently supported. MPEG files produced using the tools are know to play back correctly on: dxr2 (hardware decoder card) mtv ztheater xine oms dvdview MS Media player versino 6 (anyone like to test version 7?). Obviously, there are some limitations. MPEG-1 players won't play MPEG-2! 11) Optimising encoding. Encoder performance is slightly enhanced if you allow it to dynamically size the output streams groups-of-pictures to reflect scene changes. This is done by setting a maximum GOP (-G flag) size larger than the minimum (-g flag). The default value for both is 12. For VCD's sensible values might be a minimum of 9 and a maximum of 15. For SVCD 9 and 18 would be good values. Andrew