Что происходит, когда вы используете определенное значение CRF для уже закодированного видео x264?

Если есть видео в формате h.264, и я использую -crf 17, иногда я получаю более низкий битрейт, но, что странно, большую часть времени я получаю более высокие.

Я пытаюсь получить этот параметр, потому что я думаю, что некоторые мои видео имеют более высокий битрейт, чем необходимо, и я не нашел способа (если это вообще возможно) определить, что является наиболее подходящим способом сделать это и, возможно, воспроизвести с CRF мне совсем не поможет, но мне интересно, что на самом деле происходит, когда вы, например, не кодируете с помощью libx264, а фактически используете значения CRF в файле x264?

Битрейт зависит от сложности видео. Для двух видео с одинаковым разрешением и частотой кадров использование одного и того же CRF даст более высокий битрейт для более сложного видео.
Но что на самом деле происходит, когда я даю crf -17, а новое видео больше, чем старое?

Ответы (1)

При декодировании файла декодер пытается воссоздать исходный материал с информацией, содержащейся в файле. Но это не может быть на 100% точным представлением, поэтому декодер создает новые пиксели, которые являются оценками того, что было включено в источник.

Когда вы кодируете во второй раз с помощью CRF 17, кодировщик не знает, что эти новые пиксели были сгенерированы декодером и не обязательно соответствуют исходному материалу. Но кодировщик по-прежнему выполняет свою работу и пытается точно закодировать эти новые значения.

Таким образом, он тратит биты на кодирование пикселей, которые были отброшены и воссозданы при первом кодировании, что делает файл больше.

Семантика вашего ответа кажется странной. Это предполагает, что кодировщик сохраняет идеальное представление источника, но декодер пытается восстановить дубликат этого представления, но ему не удается. Вместо этого ограничение информации происходит на этапе кодирования на основе конструкции кодера и ограничений управления скоростью. Ожидается, что декодеры для современных кодеков будут давать побитовый вывод (ошибки округления все еще возможны из-за ограничений архитектуры, а также пропуска деблокировки и т. д.).
Я понимаю вашу логику, но в этом контексте я имею в виду вывод кодировщика как декодер. Я упростил, потому что предположил, что постер не знает о нюансах и пытался быть полезным более чем точным. Выход декодера является точным по битам для всех реализаций. Но мой пост в основном верен при круговом обходе между пространственной и временной областями, а после квантования и петлевых фильтров подразумевается новая визуальная информация, которая не была частью ссылки.