Почему фактические значения QP на уровне блоков в минус 3 от начального QP в режиме CQP в x265?

#ffmpeg #compression #encoder #hevc #libx265

#ffmpeg #компрессия #кодировщик #hevc #libx265

Вопрос:

Я кодирую видео с разными начальными значениями QP с помощью кодера x265. Я удивлен, когда проверил битовый поток, чтобы увидеть, что фактические значения QP для каждого блока в кадрах не совсем совпадают с заданным начальным значением QP. В частности, фактический QP уменьшается до минус 3 от начального значения, как показано на рисунке ниже (мой начальный QP установлен на 27). Но я не понимаю, почему. Затем я запускаю кодер с HM-16.20, фактическое значение QP совпадает с исходным значением QP. Может ли кто-нибудь помочь мне понять мотивацию этого? С моей точки зрения, кодировщик x265 хочет сохранить большее визуальное качество за счет снижения фактических значений QP, чем в программном обеспечении HM. Я использовал следующую командную строку для запуска кодировщика x265:

 x265.exe --input BQSquare_416x240_60.yuv --fps 60 --input-res 416x240 --interlace 0 -f 20 --input-depth 8 --input-csp i420 --ctu 64 --no-open-gop --keyint 1 --ref 1 --aq-mode 0 --qp 27 -r BQSquare_416x240_8bit_27.yuv --output-depth 8 --output BQSquare_416x240_8bit_27.bin  

введите описание изображения здесь

Ответ №1:

Это связано с иерархической структурой GOP, которая распределяет различные значения QP по кадрам на разных временных уровнях. Чтобы воплотить эту идею, x265 берет входной QP (в вашем случае 27) и применяет различные смещения. В вашем примере смещение, по-видимому, равно -3.

Комментарии:

1. Спасибо за ваш ответ. На самом деле я закодировал видео с помощью all-intra case. Даже если некоторые кадры находятся в одной и той же GOP, не должно быть понятия временного уровня, когда кадры кодируются с помощью all-intra, верно? Но я понимаю, что со значением смещения qp, применяемым для каждого кадра/блока, я не могу ясно понять, почему x265 дает это значение.