Gregory Shimansky (zoltan0) wrote,
Gregory Shimansky
zoltan0

Кодирование видео в H264 (часть 4)

Продолжение про опции. Предыдущая часть была тут.

 

qp_min=<1−51> (ABR or two pass)

 

Minimum quantizer, 10−30 seems to be a useful range (default: 10).

Лучше не трогать.

 

qp_max=<1−51> (ABR or two pass)

 

maximum quantizer (default: 51)

Лучше не трогать.

 

qp_step=<1−50> (ABR or two pass)

 

maximum value by which the quantizer may be incremented/decremented between frames (default: 4)

Лучше не трогать.

 

ratetol=<0.1−100.0> (ABR or two pass)

 

allowed variance in average bitrate (no particular units) (default: 1.0)

Лучше не трогать.

 

vbv_maxrate=<value> (ABR or two pass)

 

maximum local bitrate, in kbits/second (default: disabled)

Лучше не трогать.

 

vbv_bufsize=<value> (ABR or two pass)

 

averaging period for vbv_maxrate, in kbits (default: none, must be specified if vbv_maxrate is enabled)

Лучше не трогать.

 

vbv_init=<0.0−1.0> (ABR or two pass)

 

initial buffer occupancy, as a fraction of vbv_bufsize (default: 0.9)

Лучше не трогать.

 

ip_factor=<value>

 

quantizer factor between I- and P-frames (default: 1.4)

Лучше не трогать.

 

pb_factor=<value>

 

quantizer factor between P- and B-frames (default: 1.3)

Лучше не трогать.

 

qcomp=<0−1> (ABR or two pass)

 

quantizer compression (default: 0.6). A lower value makes the bitrate more constant, while a higher value makes the quantization parameter more constant.

Лучше не трогать.

 

cplx_blur=<0−999> (two pass only)

 

Temporal blur of the estimated frame complexity, before curve compression (default: 20). Lower values allow the quantizer value to jump around more, higher values force it to vary more smoothly. cplx_blur ensures that each I-frame has quality comparable to the following P-frames, and ensures that alternating high and low complexity frames (e.g. low fps animation) do not waste bits on fluctuating quantizer.

Лучше не трогать.

 

qblur=<0−99> (two pass only)

 

Temporal blur of the quantization parameter, after curve compression (default: 0.5). Lower values allow the quantizer value to jump around more, higher values force it to vary more smoothly.

Лучше не трогать.

 

zones=<zone0>[/<zone1>[/...]]

 

User specified quality for specific parts (ending, credits, ...). Each zone is <start-frame>,<end-frame>,<option> where option may be

 

q=<0−51>

 

quantizer

 

b=<0.01−100.0>

 

bitrate multiplier

 

NOTE: The quantizer option is not strictly enforced. It affects only the planning stage of ratecontrol, and is still subject to overflow compensation and qp_min/qp_max.

Зоны фильма. Типа как бы титры можно кодировать с небольшим качеством, ну и другие возможые куски. Можно использовать если уж совсем места мало но при этом надо хорошо понимать какие факторы квантизации указывать, что вообще то мало кто понимает. Так что не очень юзабельная опция.

 

direct_pred=<name>

 

Determines the type of motion prediction used for direct macroblocks in B-frames.

 

none

 

Direct macroblocks are not used.

 
 

spatial

 

Motion vectors are extrapolated from neighboring blocks. (default)

 

temporal

 

Motion vectors are extrapolated from the following P-frame.

 

auto

The codec selects between spatial and temporal for each frame.

 

Spatial and temporal are approximately the same speed and PSNR, the choice between them depends on the video content. Auto is slightly better, but slower. Auto is most effective when combined with multipass. direct_pred=none is both slower and lower quality.

Какие кодировать макроблоки в B кадрах. Объяснять долго, и как понятно из описания лучше ставить auto.

 

(no)weight_b

 

Use weighted prediction in B-frames. Without this option, bidirectionally predicted macroblocks give equal weight to each reference frame. With this option, the weights are determined by the temporal position of the B-frame relative to the references. Requires bframes > 1.

Взвешенное предсказание. Этот режим хорошо работает для переходов одной сцены в другую и собственно всё. Это когда в B кадре указываются сразу 2 референсных кадра на один макроблок с необходимыми коэффициентами, какую долю брать из какого. На практике качеству помогает слабо так как указание двух индексов и ещё и долей качества занимает много места, а поиск в motion estimation может очень сильно замедлить. Фактически никогда не используется.

 

partitions=<list>

 

Enable some optional macroblock types (default: p8x8,b8x8,i8x8,i4x4).

 

p8x8

 

Enable types p16x8, p8x16, p8x8.

 

p4x4

 

Enable types p8x4, p4x8, p4x4. p4x4 is

 

recommended only with subq >= 5, and only at low resolutions.

 

b8x8

Enable types b16x8, b8x16, b8x8.

 

i8x8

Enable type i8x8. i8x8 has no effect unless 8x8dct is enabled.

 

i4x4

Enable type i4x4.

 

all

Enable all of the above types.

 

none

Disable all of the above types.

 

Regardless of this option, macroblock types p16x16, b16x16, and i16x16 are always enabled.
The idea is to find the type and size that best describe a certain area of the picture. For example, a global pan is better represented by 16x16 blocks, while small moving objects are better represented by smaller blocks.

Какие позволять подразбиения макроблоков. На качество влияет сильно. Лучше всего указать all. Хотя конечно скорость кодирования будет серьёзно увеличена, так как потребуется проверять все варианты, но умные алгоримты позволяют уменьшить перебор, то есть пробовать дополнительные подразбиения если хотя бы 8x16 или 16x8 даёт прирост качества.

 

(no)8x8dct

 

Adaptive spatial transform size: allows macroblocks to choose between 4x4 and 8x8 DCT. Also allows the i8x8 macroblock type. Without this option, only 4x4 DCT is used.

Лучше не трогать.

 

me=<name>

 

Select fullpixel motion estimation algorithm.

 

dia

 

diamond search, radius 1 (fast)

 

hex

 

hexagon search, radius 2 (default)

 

umh

 

uneven multi-hexagon search (slow)

 

esa

 

exhaustive search (very slow, and no better than umh)

Варианты алгоритмов для предсказания движения. Общепринято что UMH даёт лучшие результаты, правда он и медленнее других.

 

me_range=<4−64>

 

radius of exhaustive or multi-hexagon motion search (default: 16)

Размер шестиугольника для предсказания движения. Умолчательное значение вполне разумное.

 

subq=<0−9>

 

Adjust subpel refinement quality. This parameter controls quality versus speed tradeoffs involved in the motion estimation decision process. subq=5 can compress up to 10% better than subq=1.

 

0

 

Runs fullpixel precision motion estimation on all candidate macroblock types. Then selects the best type with SAD metric (faster than subq=1, not recommended unless you’re looking for ultra-fast encoding).

 

1

 

Does as 0, then refines the motion of that type to fast quarterpixel precision (fast).

 

2

 

Runs halfpixel precision motion estimation on all candidate macroblock types. Then selects the best type with SATD metric. Then refines the motion of that type to fast quarterpixel precision.

 

3

 

As 2, but uses a slower quarterpixel refinement.

 

4

 

Runs fast quarterpixel precision motion estimation on all candidate macroblock types. Then selects the best type with SATD metric. Then finishes the quarterpixel refinement for that type.

 

5

 

Runs best quality quarterpixel precision motion estimation on all candidate macroblock types, before selecting the best type. Also refines the two motion vectors used in bidirectional macroblocks with SATD metric, rather than reusing vectors from the forward and backward searches.

 

6

 

Enables rate-distortion optimization of macroblock types in I- and P-frames (default).

 

7

 

Enables rate-distortion optimization of macroblock types in all frames.

 

8

 

Enables rate-distortion optimization of motion vectors and intra prediction modes in I- and P-frames.

 

9

 

Enables rate-distortion optimization of motion vectors and intra prediction modes in all frames (best).

 

In the above, "all candidates" does not exactly mean all enabled types: 4x4, 4x8, 8x4 are tried only if 8x8 is better than 16x16.

Комплексный параметр, как бы выбора качества. Понятно что 9 самый лучший вариант, так как он включает максимальное количество оптимизационных алгоритмов. Для первого прохода при многопроходном кодировании можно ограничиться 7 или даже 5.

 

(no)chroma_me

 

Takes into account chroma information during subpixel motion search (default: enabled). Requires subq>=5.

Учитывать цвет, а не только яркость при предсказании движения. Обычно при нормальном изображении Y и UV плоскости очень сильно коррелируют, так что в большинстве случаев предсказывают движение только по яркости. Но это бывает неправильно для различных аномальных клипов где по изображению плавают цветные пятна одинаковой яркости. Лучше этот параметр указывать даже для фильмов если требуется качественно кодирование.

 

(no)mixed_refs

 

Allows each 8x8 or 16x8 motion partition to independently select a reference frame. Without this option, a whole macroblock must use the same reference. Requires frameref>1.

Позволять подразбиениям макроблока иметь различные вектора смещения. Очевидно необходимо для сцен со сложными движениями мелких деталей (трава на ветру, листья и т.д.). Надо указывать.

 

trellis=<0−2> (cabac only)

 

rate-distortion optimal quantization

 

0

 

disabled (default)

 

1

 

enabled only for the final encode

 

2

 

enabled during all mode decisions (slow, requires subq>=6)

Оптимизация битового потока. Вещь необходимая для качества. Про алгоритмы писать долго, просто надо поверить что штука полезная, и надо указывать 2.

 

psy-rd=rd[,trell]

 

Sets the strength of the psychovisual optimization.

 

rd=<0.0−10.0>

 

psy optimization strength (requires subq>=6) (default: 1.0)

 

trell=<0.0−10.0>

 

trellis (requires trellis, experimental) (default: 0.0)

Даже не знаю, не пробовал. Наверное лучше не стоит указывать так как это ещё и экспериментальная фича.

 

deadzone_inter=<0−32>

 

Set the size of the inter luma quantization deadzone for non-trellis quantization (default: 21). Lower values help to preserve fine details and film grain (typically useful for high bitrate/quality encode), while higher values help filter out these details to save bits that can be spent again on other macroblocks and frames (typically useful for bitrate-starved encodes). It is recommended that you start by tweaking deadzone_intra before changing this parameter.

Тоже не знаю что такое. Ни разу не видел в использовании.


Продолжение про опции в следующей части.
Tags: h264, video
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 15 comments