Может ли алгоритм сжатия быть без потерь и с потерями одновременно?
Я видел, что ffmpeg имеет несколько кодеков (например, H.264), которые определены как без потерь и с потерями одновременно, и, насколько я понимаю, без потерь и с потерями являются взаимоисключающими: алгоритм сжатия либо теряет информацию, либо нет.
Как можно быть без потерь и с потерями одновременно?
Бег ffmpeg -codecs 2>/dev/null| grep h264
, Я получил:
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 [...]
DEV.LS
расшифровывается как декодер, кодировщик, видео, не только внутрикадровое сжатие, сжатие с потерями, сжатие без потерь.
2 ответа
Проверка в Википедии на H.264 говорит:
H.264 обычно используется для сжатия с потерями в строгом математическом смысле, хотя величина потерь иногда может быть незаметной. Также возможно создать кодирование без потерь, используя его, например, иметь локализованные кодированные без потерь области в кодированных изображениях с потерями или поддерживать редкие случаи использования, для которых все кодирование без потерь.
Да, это может быть как с потерями, так и без потерь одновременно. Когда дело доходит до H.264, MPEG и AVC, цвета, рамки сильно влияют, и это создает проблемы визуального просмотра при увеличении видео. Я также опубликовал исследование об этом --- Проверьте это
Ответ был упомянут @MoDJ в комментариях.
h.264
Кодек, как и многие другие, имеет опции кодирования. Главным среди них является коэффициент постоянной скорости, ака CRF
, Документация от FFmpeg (кодировщик, который использует libx264
для кодирования h.264/AVC) является хорошей ссылкой в этом случае. Это говорит:
Диапазон шкалы CRF составляет 0–51, где 0 - без потерь, 23 - по умолчанию, а 51 - худшее возможное качество. Более низкое значение обычно приводит к более высокому качеству, а субъективно вменяемый диапазон составляет 17–28. Считайте 17 или 18 визуально без потерь или почти без; он должен выглядеть так же или почти так же, как входные данные, но он не является технически без потерь.
(...)
Вы можете использовать -crf 0 для создания видео без потерь. Два полезных пресета для этого - сверхбыстрый или очень медленный, так как высокая скорость кодирования или наилучшее сжатие обычно являются наиболее важными факторами. (...)
Обратите внимание, что выходные файлы без потерь, вероятно, будут огромными, и большинство проигрывателей, не основанных на FFmpeg, не смогут декодировать без потерь. Поэтому, если проблема заключается в совместимости или размере файла, не следует использовать без потерь. (...)
Подводя итог: один конкретный поток не может быть одновременно с потерями и без потерь, но то, является ли поток потерянным или без потерь, можно регулировать настройкой кодека.