Перекодирование H.264 в H.264 сделало его на 40% больше.

У меня есть несколько прямых трансляций (закодированных с постоянным битрейтом), и я пытался уменьшить размер файла для длительного хранения. Я подумал, что, поскольку скорость кодирования больше не является для меня ограничением, я мог бы позволить кодировщику занять больше времени и сделать файл меньшего размера.

Исходный материал был закодирован со скоростью 12 Мбит/с, но когда я попытался перекодировать его с помощью FFmpeg (libx264, CRF 18 и настройка veryslow), результат был 17 Мбит/с.

Мой вопрос в том, как с помощью этих настроек сделать файл настолько большим, чем оригинал? Насколько я понимаю, смысл предустановки veryslow в том, чтобы занять много времени и сделать возможным максимально сжатое видео H.264 (игнорируя предустановку плацебо), но в этом случае мне лучше ничего не делать! Я бы понял, что он немного больше, потому что он должен кодировать некоторые артефакты сжатия, но не увеличение на 40%.

CRF 18 функционально не имеет потерь. Вы должны были ожидать большой файл. Увеличивайте его до 20, 22 или даже 24, пока не получите нужное соотношение качества и размера.
Я знаю, что это функционально без потерь; это было моим намерением (хотя я попытаюсь поднять его и посмотреть, как далеко я должен зайти). Мне просто показалось очень странным, что я мог получить что-то функционально без потерь с увеличением размера на 40%, но я мог получить что-то совершенно без потерь с увеличением размера на 0%.
Лично я бы вообще не стал перекодировать. Я бы сохранил оригинал. Вы не получите гораздо большего сжатия без потери качества. Кроме того, чем сильнее сжатие, тем меньше вы сможете работать с файлом в будущем.

Ответы (1)

Вы используете коэффициент сжатия с переменным битрейтом на основе качества для чего-то, что уже имеет артефакты. Это означает, что он попытается сохранить видео точно таким, какое оно есть, включая артефакты, а артефакты, как правило, плохо кодируются. Это означает, что у вас есть видеовход, который, вероятно, сложнее кодировать, чем исходный, и вы выбрали сжатие на основе качества, которое также, вероятно, имеет более высокое качество, чем ваши исходные 12 Мбит/с. Это означает, что в целом необходимо использовать более высокую скорость передачи данных, чтобы попытаться избежать дополнительных потерь при кодировании второго поколения, даже с дополнительными оптимизациями, с которыми может справиться более медленный цикл сжатия, вы не сможете преодолеть дополнительную сложность первого кодирования. и используемая настройка качества.

Если это был любой вид HD-потока, это не так уж удивительно, поскольку 12 Мбит/с — это очень сильно сжатый уровень сжатия для конечного потребителя для любых HD-форматов. Неудивительно, что он плохо перекодируется.