Gregory Shimansky (zoltan0) wrote,
Gregory Shimansky
zoltan0

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

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


 

deadzone_intra=<0−32>

 

Set the size of the intra luma quantization deadzone for non-trellis quantization (default: 11). This option has the same effect as deadzone_inter except that it affects intra frames. It is recommended that you start by tweaking this parameter before changing deadzone_inter.

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

 

(no)fast_pskip

 

Performs early skip detection in P-frames (default: enabled). This usually improves speed at no cost, but it can sometimes produce artifacts in areas with no details, like sky.

В P и в B кадрах есть такое понятие как skip, когда макроблок фактически копируется из референсного кадра почти без движения. Это очень экономит биты, так как skip-ы кодируются в очень небольшое их количество, но на качестве может сказатья, особенно если битрейт небольшой. Для качественного кодирования стоит указывать nofast_pskip.

 

(no)dct_decimate

 

Eliminate dct blocks in P-frames containing only a small single coefficient (default: enabled). This will remove some details, so it will save bits that can be spent again on other frames, hopefully raising overall subjective quality. If you are compressing non-anime content with a high target bitrate, you may want to disable this to preserve as much detail as possible.

Не знаю, опция вроде полезная, но требует изучения. Лучше оставить как есть.

 

nr=<0−100000>

 

Noise reduction, 0 means disabled. 100−1000 is a useful range for typical content, but you may want to turn it up a bit more for very noisy content (default: 0). Given its small impact on speed, you might want to prefer to use this over filtering noise away with video filters like denoise3d or hqdn3d.

Когда снимают в темноте, камеры часто дают шум, который мало того что никому не интересен, так ещё и тратит много битов для его кодирования. Денойзинг вещь для кодирования видео очень полезная, но обычно эти фильтры есть во всех видео редакторах, так что встроенным в x264 денойзером пользоваться наверное не обязательно, тем более что я не знаю какие тут надо указывать числа.

 

chroma_qp_offset=<−12−12>

 

Use a different quantizer for chroma as compared to luma. Useful values are in the range <−2−2> (default: 0).

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

 

aq_mode=<0−2>

 

Defines how adaptive quantization (AQ) distributes bits:

 

0

 

disabled

 
 

1

 

Avoid moving bits between frames.

 
 

2

 

Move bits between frames (by default).

Полезная опция для перераспределения битов между кадрами с разным количеством движения и деталей. Включена по умолчанию, отключать не надо.

 
 

aq_strength=<positive float value>

 

Controls how much adaptive quantization (AQ) reduces blocking and blurring in flat and textured areas (default: 1.0). A value of 0.5 will lead to weak AQ and less details, when a value of 1.5 will lead to strong AQ and more details.

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

 

cqm=<flat|jvt|<filename>>

 

Either uses a predefined custom quantization matrix or loads a JM format matrix file.

 

flat

 

Use the predefined flat 16 matrix (default).

 

jvt

 

Use the predefined JVT matrix.

 

<filename>

 

Use the provided JM format matrix file.

 

NOTE: Windows CMD.EXE users may experience problems with parsing the command line if they attempt to use all the CQM lists. This is due to a command line length limitation. In this case it is recommended the lists be put into a JM format CQM file and loaded as specified above.

Пошли различные не стандартные матрицы для DCT преобразований. Как наверное понятно, лучше пользоваться стандартными. Я вообще не до конца понимаю зачем эти установки вынесены в настройки, разве что для каких-то исследований...

 

cqm4iy=<list> (also see cqm)

 

Custom 4x4 intra luminance matrix, given as a list of 16 comma separated values in the 1−255 range.

 

cqm4ic=<list> (also see cqm)

 

Custom 4x4 intra chrominance matrix, given as a list of 16 comma separated values in the 1−255 range.

 

cqm4py=<list> (also see cqm)

 

Custom 4x4 inter luminance matrix, given as a list of 16 comma separated values in the 1−255 range.

 

cqm4pc=<list> (also see cqm)

 

Custom 4x4 inter chrominance matrix, given as a list of 16 comma separated values in the 1−255 range.

 

cqm8iy=<list> (also see cqm)

 

Custom 8x8 intra luminance matrix, given as a list of 64 comma separated values in the 1−255 range.

 

cqm8py=<list> (also see cqm)

 

Custom 8x8 inter luminance matrix, given as a list of 64 comma separated values in the 1−255 range.

 

level_idc=<10−51>

 

Set the bitstream’s level as defined by annex A of the H.264 standard (default: 51 − level 5.1). This is used for telling the decoder what capabilities it needs to support. Use this parameter only if you know what it means, and you have a need to set it.

Уровень h264. Кроме профилей, которые в h264 определяют фичи (типа поддержки CABAC) есть уровни, которые требуют каких-то свойств от устройства декодирования. Скажем, уровень 4.1 специфицирует максимальное количество референсных кадров 6, так что железячные декодеры могут с ним справиться. В 5.1 таких кадров может быть до 16, что требует очень много памяти. Для blue ray кажется используется 4.1, но для современных компьютеров и умолчательный 5.1 вполне подходит даже для HD.

 

threads=<0−16>

 

Spawn threads to encode in parallel on multiple CPUs (default: 1). This has a slight penalty to compression quality. 0 or ’auto’ tells x264 to detect how many CPUs you have and pick an appropriate number of threads.

Многопоточность. Это всегда хорошо учитывая что сейчас все процессоры многоядерные. Но ущерб качеству может быть нанесён больший чем тут написано. По моему опыту в x264 видимо параллельность сейчас сделана покадровая (не до конца понятно как это у них получается учитывая все зависимости между кадрами, но код GPL я смотреть не могу). Так что если количество потоков большое, то все кадры параллельно кодируются с примерно одинаковым фактором квантизации. Выглядит это примерно так, в начале пачка (примерно столько столько потоков) кадров кодируется с большим битрейтом. Потом внезапно encoder обнаруживает что нифига в битрейт он так не впишется, и следующую пачку кадров жмёт очень сильно при этом серьёзно теряя качество. Постепенно этот процесс устаканивается до следующего IDR или смены сцены.

Это справедливо в первую очередь для сильной распараллеленности, я проверял на 8- и 16- процессорных машине. Обычно стольких процессоров у нормальных людей нет, так что даже в случае 4 ядер можно наверное использовать без опасений. Плюс я уверен что многопроходное кодирование должно помочь для предсказания квантизации, так как ошибаться encoder может только если не знает заранее что там у него впереди. Но так это или нет, я не знаю. Не пробовал.

 

(no)global_header

 

Causes SPS and PPS to appear only once, at the beginning of the bitstream (default: disabled). Some players, such as the Sony PSP, require the use of this option. The default behavior causes SPS and PPS to repeat prior to each IDR frame.

Лучше не включать, так как многие проигрыватели требуют повторяющихся SPS и PPS.

 

(no)interlaced

 

Treat the video content as interlaced.

Указывает вариант видео. Я думаю объяснять что такое черезстрочное кодирование никому не надо. Все видео камеры обычно снимают в interlaced если не включать progressive.

 

log=<−1−3>

 

Adjust the amount of logging info printed to the screen.

 

−1

 

none

 

0

 

Print errors only.

 

1

 

warnings

 

2

 

PSNR and other analysis statistics when the encode finishes (default)

 

3

 

PSNR, QP, frametype, size, and other statistics for every frame

Всякая статистика после кодирования. Кому надо, и кто понимает что там смотреть, можно включить.

 

(no)psnr

 

Print signal-to-noise ratio statistics.
NOTE:
The ’Y’, ’U’, ’V’, and ’Avg’ PSNR fields in the summary are not mathematically sound (they are simply the average of per-frame PSNRs). They are kept only for comparison to the JM reference codec. For all other purposes, please use either the ’Global’ PSNR, or the per-frame PSNRs printed by log=3.

JM encoder это референсный encoder разрабатываемый кажется ITU-T. Опция интересна только разработчикам кодекоков типа меня..

 

(no)ssim

 

Print the Structural Similarity Metric results. This is an alternative to PSNR, and may be better correlated with the perceived quality of the compressed video.

Печатать метрику SSIM. Она на порядок сложнее вычисляется чем PSNR, а говорит что-то мало кому, даже разработчикам, хотя считается что более правильно отражает качество восприятия человеком. Интересно только разработчикам кодеков.

 

(no)visualize

 

Enable x264 visualizations during encoding. If the x264 on your system supports it, a new window will be opened during the encoding process, in which x264 will attempt to present an overview of how each frame gets encoded. Each block type on the visualized movie will be colored as follows:

 

red/pink

 

intra block

 

blue

 

inter block

 

green

 

skip block

 

yellow

 

B-block

 

This feature can be considered experimental and subject to change. In particular, it depends on x264 being compiled with visualizations enabled. Note that as of writing this, x264 pauses after encoding and visualizing each frame, waiting for the user to press a key, at which point the next frame will be encoded.

Визуализировать макроблоки. Интересно исключительно разработчикам x264.


Следующая часть будет про практические примеры использования опций mencoder.

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.
  • 27 comments