Video Quality
[Note: All the links on this page take you to an automatically generated page with results of the codecs that were run. From this page you can download the result or look at (click on them) frame grabs for individual frames. Also, at the top of each page is a link to one or more other pages. Each of these pages is for comparing the different versions of a frame grab at the same place in time (2 sec, 5 sec, etc). On this pages is a Java Script program that you can use to automatically cycle through different versions to compare them.]
The quality of the video that you watch depends on dozens or even hundreds of different parameters that can (sometimes) be set when the video is encoded. The two most important of these are (usually) the codec used to encode the video and the bit-rate that it is encoded at.
To see the effects that different bit-rates can have on a file, look at
this page, containing encodings (all in h.264, 1080p) with bit-rates
ranging from 250kbps-10,000kbps.
To illustrate the differences in different codecs we have this page where we show the results from running an encoding on the same clip (480p) with many different codecs. However, the bit rate does not change between these and is fixed at 4000kbps.
Perfect/Good Quality
For each codec used to encode video, one would assume that there would always be a simple rule you could use to determine the bit-rate that would give you a near perfect or just "good enough" quality to your video. Sadly, that isn't the case, there are many different variables that make every video encode just a bit differently, however for one clip you can compare all the different codecs and find a setting that is good for that specific clip, which we have done below. These values won't hold true for other clips with more/less motion, color, darkness, etc, but they could be a good rule of thumb to get started.
In the table below are the results of running different video codecs against the same clip from the animated movie sintel.
For each column, encoding each video with the shown bit-rate will produce an video with approximately the same quality for each line, all results are in kbps (thousand bits per second).
The clip original clip used for all the different encodings was
built from lossless .png files of each frame. The video is
1920x816 (we'll call this 1080p even though it is not) and 960x408
(we'll call this 480p even though it is not). The each frame of 480p video has
1/4 the size (in pixels) of the 1080p video.
The values in the chart below were all
determined by watching the videos created using many different bit-rates for each encoder. Of all the videos the one with the lowest bit-rate to give an "Almost Perfect" or "Good" quality result was selected. To determine what was "Almost Perfect" we watched the clips and looked at images from individual frames of video (available on the
pages for the individual runs by clicking the column header), then tried to pick a level that was the same across all the videos. Many of the encoders couldn't reach a quality level that was "Almost Perfect", so they are listed as "not possible". To determine what was "Good" the same methodology was employed, but this was more focused on watching the video and less on looking at the individual frames as all the individual frames had noticeable artifacts from the encoder.
Because the results were all determined by simply watching the clips and looking at the frames, the results are subjective, but should give
you a good feeling for the power of the various codecs, when used with
the default settings.
To build these clips raw video, ffv1, mpeg4, mjpeg, and mpeg2
were all encoded with the encoders inside the ffmpeg tool. The
other encoders that were used are: libx264 (with various pre-set
configurations: lossless_max, lossless_medium, lossless_ultrafast, veryslow, medium, and ultrafast), libvpx, and libtheora. The -2p or -1p after each line signifies one-pass or two-pass encoding.
Codec
|
1080p
Almost Perfect
|
1080p Good
|
480p
Almost Perfect
|
480p
Good
|
raw video
|
(880000)
|
n/a
|
(234000)
|
n/a
|
ffv1 (lossless)
|
(107000)
|
n/a
|
(31500)
|
n/a
|
h.264-lossless_max
|
(48000)
|
n/a
|
(18000)
|
n/a
|
h.264-lossless_medium
|
(50000)
|
n/a
|
(15000)
|
n/a
|
h.264-lossless_ultrafast
|
(61000)
|
n/a
|
(14000)
|
n/a
|
h.264-veryslow-2p
|
7000
|
2000
|
4000
|
1000
|
h.264-medium-2p
|
8000
|
2500
|
4500
|
1500
|
h.264-ultrafast-2p
|
not possible
|
6000
|
8000
|
3000
|
h.264-veryslow-1p
|
11000
|
2500
|
4500
|
1500
|
h.264-medium-1p
|
12000
|
3000
|
5000
|
2000
|
h.264-ultrafast-1p
|
not possible
|
7000
|
10000
|
4000
|
vp8-2p
|
not possible |
3000
|
not possible |
2000
|
vp8-1p
|
not possible |
4000
|
not possible |
2500
|
theora-2p
|
not possible |
6000
|
not possible |
4000
|
theora-1p
|
not possible |
9000
|
not possible |
4500
|
mpeg4-2p (part 2)
|
not possible |
6000
|
not possible |
5000
|
mpeg4-1p (part 2)
|
not possible |
8000
|
not possible |
6000
|
mjpeg-2p
|
not possible |
15000
|
not possible |
8000
|
mjpeg-1p
|
not possible |
17000
|
not possible |
8000
|
mpeg2-2p
|
not possible |
8000
|
not possible |
6000
|
mpeg2-1p
|
not possible |
10000
|
not possible |
7000
|