mirror of https://github.com/FFmpeg/FFmpeg.git
Originally committed as revision 17774 to svn://svn.ffmpeg.org/ffmpeg/trunkrelease/0.6
parent
59701aeb46
commit
c36264a353
1 changed files with 50 additions and 0 deletions
@ -0,0 +1,50 @@ |
|||||||
|
A quick description of Rate distortion theory. |
||||||
|
|
||||||
|
We want to encode a video, picture or music optimally. |
||||||
|
What does optimally mean? |
||||||
|
It means that we want to get the best quality at a given |
||||||
|
filesize OR (which is almost the same actually) We want to get the |
||||||
|
smallest filesize at a given quality. |
||||||
|
|
||||||
|
Solving this directly isnt practical, try all byte sequences |
||||||
|
1MB long and pick the best looking, yeah 256^1000000 cases to try ;) |
||||||
|
|
||||||
|
But first a word about Quality also called distortion, this can |
||||||
|
really be almost any quality meassurement one wants. Commonly the |
||||||
|
sum of squared differenes is used but more complex things that |
||||||
|
consider psychivisual effects can be used as well, it makes no differnce |
||||||
|
to us here. |
||||||
|
|
||||||
|
|
||||||
|
First step, that RD factor called lambda ... |
||||||
|
Lets consider the problem of minimizing |
||||||
|
|
||||||
|
distortion + lambda*rate |
||||||
|
|
||||||
|
for a fixed lambda, rate here would be the filesize, distortion the quality |
||||||
|
Is this equivalent to finding the best quality for a given max filesize? |
||||||
|
The awnser is yes, for each filesize limit there is some lambda factor for |
||||||
|
which minimizing above will get you the best quality (in your provided quality |
||||||
|
meassurement) at that (or a lower) filesize |
||||||
|
|
||||||
|
|
||||||
|
Second step, spliting the problem. |
||||||
|
Directly spliting the problem of finding the best quality at a given filesize |
||||||
|
is hard because we dont know how much filesize to assign to each of the |
||||||
|
subproblems optimally. |
||||||
|
But distortion + lambda*rate can trivially be split |
||||||
|
just consider |
||||||
|
(distortion0 + distortion1) + lambda*(rate0 +rate1) |
||||||
|
a problem made of 2 independant subproblems, the subproblems might be 2 |
||||||
|
16x16 macroblocks in a frame of 32x16 size. |
||||||
|
to minimize |
||||||
|
(distortion0 + distortion1) + lambda*(rate0 +rate1) |
||||||
|
one just have to minimize |
||||||
|
distortion0 + lambda*rate0 |
||||||
|
and |
||||||
|
distortion1 + lambda*rate1 |
||||||
|
|
||||||
|
aka the 2 problems can be solved independantly |
||||||
|
|
||||||
|
Author: Michael Niedermayer |
||||||
|
Copyright: LGPL |
Loading…
Reference in new issue