Version 3 (modified by llogan, 7 years ago) (diff)

building a reputation as a nitlord

Xvid / Divx Encoding Guide

FFmpeg has two encoders to output Xvid video. The external libxvid encoding library:

ffmpeg -i input.avi -c:v libxvid output.avi

...and the native mpeg4 encoder:

ffmpeg -i input.avi -c:v mpeg4 -vtag xvid output.avi

The native encoder has the advantage of not requiring an external library and both encoders should provide a similar output.

From How do I encode Xvid or DivX video with ffmpeg?:

Both Xvid and DivX (version 4+) are implementations of the ISO MPEG-4 standard (note that there are many other coding formats that use this same standard). Thus, use -c:v mpeg4 to encode in these formats. The default fourcc stored in an MPEG-4-coded file will be FMP4. If you want a different fourcc, use the -vtag option. E.g., -vtag xvid will force the fourcc xvid to be stored as the video fourcc rather than the default.

Note: this guide uses AVI container files for the examples, as the most common usage of Xvid video is currently for older hardware devices that don't support H.264 or the MP4 container. If you are using MPEG4 for some other reason, you should probably use the more modern MP4 or MKV (Matroska) containers. For audio the MP3 codec is used; again, this is because certain old hardware devices support MP3 audio only, and you can consider using another codec like AAC. Also, consider using H.264 video as described in the x264 Encoding Guide, as it will give you better quality video for a given file size, and is very well supported in recent hardware and software.

Variable Bit Rate with qscale

You can select a video quality level with -qscale:v n (or the alias -q:v n), where n is a number from 1-31, with 1 being highest quality/largest filesize and 31 being the lowest quality/smallest filesize. This is a variable bit rate mode, roughly analogous to using -qp (constant QP [quantization parameter]) with x264. Most of the time this should be the preferred method.

You can select an audio quality level with -qscale:a (or the alias -q:a). The value changes depending on the audio encoder. Since this guide uses libmp3lame see the MP3 Encoding Guide for examples and more information.


ffmpeg -i input.avi -c:v mpeg4 -vtag xvid -qscale:v 3 -c:a libmp3lame -qscale:a 4 output.avi

Constant Bit Rate

You can target a bitrate with -b:v. This is best used with two-pass encoding. Adapting an example from the x264 encoding guide: your video is 10 minutes (600 seconds) long and an output of 50 MB is desired. Since bitrate = file size / duration:

(50 MB * 8192 [converts MB to kilobits]) / 600 seconds = ~683 kilobits/s total bitrate
683k - 128k (desired audio bitrate) = 555k video bitrate

Two-pass example

ffmpeg -y -i input.avi -c:v mpeg4 -vtag xvid -b:v 555k -pass 1 -an -f avi /dev/null
ffmpeg -i input.avi -c:v mpeg4 -vtag xvid -b:v 555k -pass 2 -c:a libmp3lame -b:a 128k output.avi

Note: Windows users should use NUL instead of /dev/null.