summaryrefslogtreecommitdiff
path: root/ffmpeg/doc/rate_distortion.txt
diff options
context:
space:
mode:
Diffstat (limited to 'ffmpeg/doc/rate_distortion.txt')
-rw-r--r--ffmpeg/doc/rate_distortion.txt61
1 files changed, 61 insertions, 0 deletions
diff --git a/ffmpeg/doc/rate_distortion.txt b/ffmpeg/doc/rate_distortion.txt
new file mode 100644
index 0000000..e9711c2
--- /dev/null
+++ b/ffmpeg/doc/rate_distortion.txt
@@ -0,0 +1,61 @@
+A Quick Description Of Rate Distortion Theory.
+
+We want to encode a video, picture or piece of music optimally. What does
+"optimally" really mean? It means that we want to get the best quality at a
+given filesize OR we want to get the smallest filesize at a given quality
+(in practice, these 2 goals are usually the same).
+
+Solving this directly is not practical; trying all byte sequences 1
+megabyte in length and selecting the "best looking" sequence will yield
+256^1000000 cases to try.
+
+But first, a word about quality, which is also called distortion.
+Distortion can be quantified by almost any quality measurement one chooses.
+Commonly, the sum of squared differences is used but more complex methods
+that consider psychovisual effects can be used as well. It makes no
+difference in this discussion.
+
+
+First step: that rate distortion factor called lambda...
+Let's consider the problem of minimizing:
+
+ distortion + lambda*rate
+
+rate is the filesize
+distortion is the quality
+lambda is a fixed value chosen as a tradeoff between quality and filesize
+Is this equivalent to finding the best quality for a given max
+filesize? The answer is yes. For each filesize limit there is some lambda
+factor for which minimizing above will get you the best quality (using your
+chosen quality measurement) at the desired (or lower) filesize.
+
+
+Second step: splitting the problem.
+Directly splitting the problem of finding the best quality at a given
+filesize is hard because we do not know how many bits from the total
+filesize should be allocated to each of the subproblems. But the formula
+from above:
+
+ distortion + lambda*rate
+
+can be trivially split. Consider:
+
+ (distortion0 + distortion1) + lambda*(rate0 + rate1)
+
+This creates a problem made of 2 independent subproblems. The subproblems
+might be 2 16x16 macroblocks in a frame of 32x16 size. To minimize:
+
+ (distortion0 + distortion1) + lambda*(rate0 + rate1)
+
+we just have to minimize:
+
+ distortion0 + lambda*rate0
+
+and
+
+ distortion1 + lambda*rate1
+
+I.e, the 2 problems can be solved independently.
+
+Author: Michael Niedermayer
+Copyright: LGPL