изображение -> видео -> изображение без потерь с использованием avconv

Я пытаюсь проверить количество информации, потерянной с некоторыми различными видеокодеками. У меня есть скрипт Python, который использует PyPNG для записи серии 8-битных изображений RGB. Затем я кодирую его с помощью avconv, например

avconv -r 1 -i ../frames/data%03d.png -c:v ffv1 -qscale:v 0 -r 1 

outffv1.avi

Затем я декодирую это обратно в png, вот так

avconv -r 1 -i outffv1.avi -r 1 ./outffv1/frame%03d.png

Но когда я сравниваю изображения до и после сжатия видео, они различаются (средняя абсолютная ошибка ~~15%). Меня смущает то, что это верно (плюс-минус) независимо от кодека.

Например, я получаю аналогичные ответы для libtheora для диапазона значений qscale.

Кодировка png, то есть запись в png и немедленная загрузка обратно без этапа сжатия видео, выполняется без потерь.

ОБНОВЛЕНИЕ - более точный рабочий пример:

Один кадр ввода здесь: https://www.dropbox.com/s/2utk1xs2t8heai9/data001.png?dl=0 Закодировано в видео следующим образом: avconv -r 1 -i ./frames/data%03d.png -c:v ffv1 -qscale:v 0 -r 1 outffv1.avi результирующее видео здесь: https://www.dropbox.com/s/g1babae2a41v914/outffv1.avi?dl=0 снова декодируется в png здесь: https://www.dropbox.com/s/8i8zg1qn7dxsgat/out001.png?dl=0 с помощью этой команды : avconv -r 1 -i outffv1.avi -qscale:v 31 -r 1 out%03d.png и магия изображений различаются вот так compare out001.png ./frames/data001.png diff.png, чтобы получить это (ненулевое) различие https://www.dropbox.com/s/vpouk54p0dieqif/diff.png?dl=0


person nrob    schedule 15.12.2015    source источник
comment
Ваш вопрос не очень ясен. Вы хотите сказать, что не ожидали, что кодирование png будет без потерь? PNG поддерживает кодирование без потерь   -  person ARK    schedule 15.12.2015
comment
Я ожидаю / хочу, чтобы кодирование avconv из видео в png было без потерь. Вы знаете, если это, или как сделать это так?   -  person nrob    schedule 15.12.2015
comment
@nrob Можете ли вы поделиться образцом png? Как вы сравниваете?   -  person aergistal    schedule 15.12.2015
comment
Я загружаю их в python с помощью pypng, а затем сравниваю с помощью numpy. Вот пример png dropbox.com/s/9qc0809kyqm4pi5/data000.png? дл=0   -  person nrob    schedule 15.12.2015
comment
@nrob Использование исходного изображения 4K с ffmpeg и ffv1 не удалось мне из-за ограничений int, я должен посмотреть, что не так, так как я на x64. Кодирование предоставленного PNG, масштабированного до 2048x2048 до ffv1 (без потерь) в AVI, и извлечение кадров не выявило различий с compare от imagemagick. Теора с потерями, насколько я знаю.   -  person aergistal    schedule 15.12.2015
comment
Тогда я в замешательстве - потому что это не то, что произошло, когда я это сделал. Я обновлю вопрос более точным, урезанным примером с данными. Кстати, я упомянул Theora, потому что это была, по-видимому, такая же потеря данных, как и в ffv1, которая предполагала, что данные были потеряны не при сжатии видео, а где-то еще.   -  person nrob    schedule 15.12.2015


Ответы (1)


Ваш видеофайл, скорее всего, использует цветовой формат YUV. PNG использует RGB. Преобразование цвета не является процессом без потерь.

person szatmary    schedule 15.12.2015