Trao đổi với tôi

http://www.buidao.com

11/25/13

[Encoding] Setting Rate Control in MeUI


A/ Phần Adaptive Quantizers (Lượng tử thích ứng):

+Mode:

aq-mode
Adaptive Quantization Mode (chế độ lượng tử thích ứng)
Default: 1
Nếu không sử dụng AQ, x264 lưu giữ các bits underallocate (dưới chỉ định) vào phần ít chi tiết. AQ được sử dụng để phân phối tốt hơn các bit có sẵn giữa tất cả các macroblocks trong đoạn video. Thiết lập này thay đổi phạm vi AQ các bits tái sắp xếp lại bao gồm các thiết lập sau:

     0: Không sử dụng AQ
cho tất cả video.
     1: Cho phép AQ để phân phối lại
các bit trên toàn bộ khung hình video và trong frames.
     2:
Auto-variance AQ (thử nghiệm) cố gắng thích ứng với strength mỗi khung hình.

Ghi chú: Nên chọn aq-mode=1

+Strength:

aq-strength

Adaptive Quantization Strength (độ mạnh lượng tử thích ứng )
Giảm hiệu ứng ô vuông và độ mờ trong flat (các vùng chi tiết thấp) và các vùng cấu trúc đan dệt

Default: 1.0

Thiết lập
Strength của AQ cho các macroblocks chi tiết thấp ('flat'). Giá trị âm không được phép. Giá trị bên ngoài dãy 0,0-2,0 có thể là một ý tưởng tồi.

Ghi chú: Thường chọn như mặc định =1.0


B/ Phần Quantization Matrices:

Nói về Ma trận lượng tử: nó chẳng qua là một chuẩn tùy chọn. Nó qui định ngưỡng để mã hóa cho các MB. nếu dưới chuẩn (dưới ngưỡng) thì ko mã hóa, trên ngưỡng qui định mới mã hóa. Vì vậy nén theo chuẩn x264 làm cho hình ảnh mềm và mượt hơn. 

cqm

Default: Flat (Not Set)
Thiết lập tất cả các custom quantization matrices (ma trận lượng tử tùy chỉnh) cho built-in preset (thiết lập trước đã xây dựng sẳn) của chúng. các thiết lập sẳn (built-in presets) là flat hay JVT.
Recommendation: Default

cqmfile

Default: Not Set
Thiết lập các custom quantization matrices (ma trận lượng tử tùy chỉnh) từ một file tương thích JM. Viết đè lên bất kỳ tùy chọn nào --cqm* .
Recommendation: Default

cqm4* / cqm8*

Default: Not Set
  • --cqm4: Set all 4x4 quant matrices. Takes a comma-separated list of 16 integers.
  • --cqm8: Set all 8x8 quant matrices. Takes a comma-separated list of 64 integers.
  • --cqm4i, --cqm4p, --cqm8i, --cqm8p: Set both luma and chroma quant matrices
  • --cqm4iy, --cqm4ic, --cqm4py, --cqm4pc: Set individual quant matrices. Same switches exist for cqm8.
Recommendation: Default


C/Phần Quantizers:


Thuật toán deadzone và trellis:


Có hai thuật toán lượng tử khác nhau: deadzone và trellis. Bất kỳ dct của block nào cũng phải sử dụng một trong 2 thuật toán  Vì vậy, nếu bạn có hai giá trị khác nhau cho từng hệ số, bạn sẽ làm gì với chúng?

--deadzone-inter và --deadzone-intra tinh chỉnh một tham số của thuật toán deadzone. Tham số --trellis xác định khi nào thì sử dụng thuật toán trellis (0=never, 1=sometimes, 2=almost always); Bất kỳ dcts nào mà ko sử dụng trellis đều phải sử dụng deadzone.

Vì vậy, thực tế là - deadzone * vẫn có một số tác động nhỏ khi bạn kích hoạt trellis nên không mâu thuẫn với thực tế là deadzone trellis không phù hợp nhau.

Đừng làm điều này. Nếu bạn kích hoạt trellis, thì deadzone chỉ được sử dụng như một ước tính nhanh của trellis, vì vậy một giá trị giảm của --deadzone sẽ không cung cấp bất kỳ sự duy trì hạt (grain) nào, nó chỉ làm giảm độ chính xác của ước lượng đó và do đó mode quyết định tiến trình. Chắc chắn ta có thể làm cho x264 bỏ qua - deadzone * nếu --trellis được kích hoạt, nhưng điều đó sẽ mâu thuẫn với chính sách của chúng ta "đưa đủ dây thừng để hắn tự treo cổ" (tức là tự x264 gói gém làm điều này tự túc).

Điều đó nói rằng, có thể tinh chỉnh trellis một cách để có kết quả tương tự như - deadzone *. Trong trường hợp này - deadzone * cũng có thể áp dụng cho trellis, bất chấp tên chúng là gì.


deadzone-inter/intra

Default: Not Set
Recommendation: Default
Thiết lập kích thước của inter/intra luma quantization deadzone. Deadzones phải có giá trị trong phạm vi từ 0 đến 32. Giá trị deadzone thiết đặt mức độ (level) của các chi tiết loại tốt mà x264 sẽ tự ý drop (giảm hóa) mà không cần cố gắng bảo tồn. Các chi tiết loại rất tốt chi tiết vừa khó nhìn thấy vừa tốn kém để mã hóa, giảm hóa chi tiết này mà không cần cố gắng bảo tồn, bỏ các bits lãng phí phần video ít quan trọng. Deadzone không tương thích với Trellis.




Ta thấy nếu --preset (trong phần Tab Main) là faster trở lên thì mới thiết lập được deadzone trong MeUI. Vì --preset là  - ultrafast. superfst và veryfast thì mặc định là --trellis 0. Tức là sẽ không dùng thuật toán trellis

Ghi chú:
--trellis 

Thiết lập trellis trong tab Analysis phần Extra của MeUI.


ipratio

Default: 1.40
 
Mục tiêu là thay đổi gia tăng bình quân lượng tử cho I-frame so với P-frame. Giá trị cao hơn làm tăng chất lượng của I-frame được tạo ra.


pbratio

Default: 1.30

Mục tiêu là thay đổi gia giảm bình quân lượng tử cho B-frame so với P-frame. Giá trị cao hơn làm giảm chất lượng của B-frame được tạo ra. Không được sử dụng với mbtree (kích hoạt mặc định), mà chúng tính toán giá trị tối ưu tự động.


chroma-qp-offset

Default: 0
Thông thường, x264 mã hóa tất cả ba thành phần màu sắc (Luma (độ sáng, độ chói), U (sắc màu, chroma), V (sắc màu, chroma)) với cùng một lượng tử. Giá trị này sẽ được bổ sung cộng thêm vào các quantizers cho những thành phần sắc màu U và V. Điều này cho phép bạn có thể buộc x264 chỉnh hình ảnh sáng hơn (luma) bằng cách thiết lập các giá trị dương (+) (các vùng màu sắc (chroma) sẽ có quantizers cao hơn), hoặc buộc x264 chỉnh màu sắc(chroma) đậm hơn bằng cách thiết lập giá trị âm (-). Hảy nhớ rằng x264 mã hóa video như YV12, có nghĩa là làm bất cứ gì đi nữa thì sắc màu (chroma) chỉ chiếm một nửa không gian độ sáng (luma).

Lưu ý:  x264 chỉ mã hóa các luma và chroma với cùng một lượng tử trên  lượng tử quantizer 29. Sau đó, sắc độ (chroma) sẽ được lượng tử hóa dần dần bằng một số thấp hơn luma cho đến khi bạn kết thúc với luma tại q51 sắc độ tại q39. Hành vi này là không thể điều chỉnh được, vì nó là yêu cầu của tiêu chuẩn H.264.

Trong MeUI chỉnh tham số này như sau: Trong x264 configuration dialog, chọn tab “Rate Control”, trong phần mục chỉnh Quantizes, chỉnh mục “Chroma QP Offset”. Trong các file tôi khảo sát thường tham số này là -2,-3. Không thấy setup số (+)

D/ Phần Rate Control:

Chú ý rằng Encoding Mode là Const. Quantizer thì các thiết lập này bị bỏ qua. Còn nếu Const. Quality thì 3 mục sau bị bỏ qua là Bitrate variance (ratetol);  Temp. Blur of est. Frame Complexity (cplxblur) và Temp. Blur of Quant after CC (qblur). các loại mode encoding còn lại đều có thể thiết lập các tham số trong mục này.



ratetol
Default: 1.0
Đây là một tham số mục đích kép:
+Trong mã hóa bitrate 1-pass, thiết lập này kiểm soát tỷ lệ phần trăm x264 bỏ mất so với mục tiêu bitrate trung bình (bị tràn birate so với bitrate trung bình). Bạn có thể thiết lập này "inf" để vô hiệu hóa phát hiện tràn này một cách hoàn toàn. Giá trị thấp nhất bạn có thể thiết lập này là 0,01. Bạn thiết lập giá trị này cao hơn để x264 có thể phản ứng tốt hơn khi mã hóa với các cảnh phức tạp gần cuối của bộ phim. Đơn vị đo lường cho mục đích này phần trăm (ví dụ, 1.0 = 1% độ lệch bitrate cho phép).

Nhiều phim (ví dụ : bất kỳ bộ phim hành động) phức tạp nhất tại đoạn kết của phim. Do  mã hóa 1pass không biết điều này, nên số lượng các bit cần thiết cho đoạn cuối phim thường được đánh giá thấp. Một ratetol of inf có thể giảm nhẹ điều này bằng cách cho phép mã hóa nhiều hoạt động giống như mà hóa - CRF, nhưng kích cỡ sẽ phình ra.

+Khi VBV được kích hoạt (ví dụ, bạn chỉ định tùy chọn  - VBV-*), thiết lập này cũng ảnh hưởng đến sự can thiệp VBV. Thiết lập này cao hơn cho phép VBV dao động hơn khi nguy cơ vi phạm lúc mã hóa các thiết lập VBV có thể xảy ra. Đối với mục đích này, đơn vị đo lường là tùy ý


Mục chọn Nb of Frames for Lookahead là rc-lookahead

rc-lookahead

Default: 40




Thiết lập số khung hình để sử dụng cho ratecontrol mb-tree VBV-lookahead. Giá trị cho phép tối đa là 250.

Đối với phần mb
-tree này, tăng số lượng khung hình tạo ra kết quả tốt hơn nhưng cũng chậm hơn. Giá trị bộ đệm tối đa được sử dụng bởi mb-tree MIN (rc-lookahead, - keyint)

Đối với phần VBV-lookahead này, tăng số lượng khung hình tạo ra sự ổn định tốt hơn và độ chính xác khi sử dụng VBV. Giá trị lớn nhất được sử dụng bởi VBV-lookahead :

MIN(rc-lookahead, MAX(--keyint, MAX(--vbv-maxrate, --bitrate) / --vbv-bufsize * --fps))

no-mbtree

Default: Not Set
Bỏ qua dùng macroblock tree ratecontrol. Sử dụng macroblock tree ratecontrol cải thiện tổng thể quá trình nén bằng cách lưu giữ dấu vết truyền tạm qua các khung hình và trọng số (weighting) một cách thích hợp. Yêu cầu một file mới statsfile kích thước lớn tồn tại thật sự cho quá trình multipass encodes.

Recommendation: Default
--qcomp
Mặc định là 0.6
(Trong MeUI là quantizer compression)
Là Quantizer curve compression factor (hệ số nén đường cong lượng tử)
Bằng  0.0 => Constant Bitrate, 1.0 => Constant Quantizer.
Khi sử dụng mbtree, nó sẽ ảnh hưởng lên độ mạnh của mbtree (Higher qcomp = weaker mbtree).


--cplxblur

Mặc định là 20
Áp dụng một Gaussian Blur (độ mờ Gauss) với bán kính đã cho cho đường cong lượng tử. Điều này có nghĩa là lượng tử được gán cho mỗi khung được tạm thời với các khung lân cận để hạn chế biến động lượng tử.


--qblur

Mặc định: 0.5

Áp dụng một Gaussian Blur (độ mờ Gauss) với bán kính đã cho cho đường cong lượng tử, sau khi nén. Không quan trọng lắm



Mã hóa VBV

Hệ thống VBV (Video Buffer Verifier) trong x264 được sử dụng để  cưỡng ép bitrate cho phần xuất ra output, vì vậy nó thích hợp cho các luồng dữ liệu trong môi trường băng thông hạn chế.
Kiểu H.264 VBV model được dựa trên ý tưởng "VBV buffer" trong phần giải mã dữ liệu. Khi luồng dữ liệu H.264 được download bởi một client thì nó được chứa trong VBV buffer. Một frame phải được download đầy đủ vào trong VBV buffer trước khi nó được giải mã.
x264 có 3 options để điều khiểnVBV buffer:
1.     Kích thước buffer's size đơn vị là kbit được định trong tham số --vbv-bufsize,
2.     Tỷ lệ rate khi buffer lắp đầy dữ liệu (đơn vị là kbit/sec) được định bởi --vbv-maxrate,
3.     Phần buffer phải được lắp đầy dữ liệu trước khi playback có thể bắt đầu được định trong --vbv-init.
Khi sử dụng VBV, bạn luôn cần phải thiết lập 2 tùy chọn đầu tiên và sẽ không cần thiết thiết lập tùy chọn sau cùng.

Ví dụ

Ví dụ 1

Kịch bản: Mã hóa một phim thành một file chứa trên đĩa ứng để play.
Đề xuất: Không dung bất kỳ VBV settings nào. Ổ đĩa cứng của bạn đủ nhanh để truyền dử liệu một cách liên tục.

Ví dụ 2

Kịch bản: Mã hóa một video để thích hợp muxing đến một file tương thích Blu-ray.
Đề xuất: Theo chi tiết kỹ thuật của Blu-ray thì yêu cầu 40 Mbit maximum data rate (cho video) và 30 Mbit buffer. Vì vậy, chúng ta định các tham số sau --bluray-compat --vbv-maxrate 40000 --vbv-bufsize 30000.
Chú ý: x264 cần nhiều hơn các tùy chọn để xuất ra một file tương thích hoàn toàn với Blu-ray. Nhưng những tùy chọn này hoàn toàn cần thiết lập VBV.

Ví dụ 3

Kịch bản: Luồng dữ liệu video cho Flash trên một website, giống như Youtube.
Đề xuất: Bạn muốn video của bạn bắt đầu nhanh chóng không quá 0.5 seconds cho quá trình buffering (đệm hóa). Bạn thiết lập tốc độ connect thấp nhất cho trình xem video là 512kbit/sec. Giả sử 90% bandwidth dành cho website bạn xem video, và 96kbit/sec được sử dụng bởi audio, thì 364kbit/sec cho x264. Vì vậy, ta thiết lậpnhư sau:  --vbv-maxrate 364 --vZbv-buffer 182.

Lưu ý: Có nhiều yếu tố chỉ để thiết lập VBV video khi lúc khởi đầu luồng truyền trực tuyến bị delay. Ví dụ trên là một mô hình hoàn hảo, mà các yếu tố đó không được kể đến.