Как libx264 и ffmpeg кодируют и декодируют H.264

Я хочу знать, что именно теряется в кодировке H.264. Я кодирую видео с помощью libx264 и декодирую его с помощью ffmpeg, и снова кодирую полученное видео с помощью libx264 с теми же параметрами и декодирую его во второй раз. Я ожидаю, что первое и второе декодированные видео должны быть одинаковыми по размеру и внешнему виду, однако это не так! Например, у меня есть 13000 байтов в блоках NAL первого слайса в первом кодированном кадре и 12000 байт во втором кодированном кадре, и это странно. Потому что любая информация с потерями, существовавшая в кадре, должна была быть устранена в первом процессе кодирования, а второе кодирование должно быть процессом, результатом которого являются те же блоки NAL. Я ошибаюсь или где-то в своих реализациях ошибся?


person e_soroush    schedule 06.02.2017    source источник
comment
Большинство алгоритмов сжатия с потерями не гарантируют, что декодирование и повторное кодирование с одинаковыми параметрами приведет к идентичному результату.   -  person cdhowie    schedule 06.02.2017
comment
Есть ли официальная ссылка, которая выдает эту проблему?   -  person e_soroush    schedule 06.02.2017
comment
Что заставляет вас думать, что это проблема?   -  person cdhowie    schedule 06.02.2017
comment
Я имел в виду эту тему!   -  person e_soroush    schedule 06.02.2017


Ответы (1)


На этот вопрос невозможно ответить. Кодеки с потерями действительно следует называть кодеками с потерями поколений. Подобно копировальному аппарату, каждое поколение слегка видоизменяется. Единственный способ узнать «точно», что будет потеряно, — запустить алгоритм. Современное сжатие состоит из нескольких этапов. Оценка/компенсация движения, квантование, петлевой фильтр и деблокировка. А количество информации, удаляемой на каждом шаге, определяется алгоритмом контроля скорости. Каждый из этих шагов может потерять или даже добавить информацию в зависимости от параметров и содержимого. И может даже различаться между реализациями кодека.

person szatmary    schedule 06.02.2017
comment
Спасибо. Можете ли вы объяснить, кроме шага квантования, как другие части могут обрабатывать потерянную информацию? - person e_soroush; 06.02.2017
comment
На эту тему написано много книг, а также множество ресурсов в Интернете. Вы должны начать с них, а затем задавать конкретные вопросы в stackoverflow. - person szatmary; 06.02.2017