Лучшее сжатие изображений для изображений с низкой глубиной, изображения в оттенках серого

1643
bdoyle159

Я пытаюсь сжать много (до 2500) маленьких (300x200 пикселей) изображений в градациях серого, чтобы размер файла был как можно меньше. В настоящее время моя битовая глубина составляет 4 (16 оттенков серого). Источником изображения является камера видеонаблюдения в удаленном месте, и нам нужно отправлять изображения по очень медленной спутниковой связи. Я использую ImageMagick для преобразования изображений в несжатый TIF 4-битной глубины. Несжатый размер каждого изображения составляет около 41 КБ. Я могу сжать 1500 из этих изображений до 3 МБ с 7zip, что составляет около 95% сокращения. Я также поэкспериментировал с настройками на zpaq, но все еще не могу получить меньше, чем 3MB. Я знаю, что это кажется небольшим, но опять же спутниковая связь на скорости кбит / с, и мы платим за минуту эфирное время.

Поскольку это камеры видеонаблюдения, изображения не сильно меняются между изображениями, поэтому я также попытался ffmpeg преобразовать их в видео H.264, но размер файла еще больше (я полагаю, это потому, что H.264 не поддерживает оттенки серого, поэтому RGB все еще присутствует).

Есть ли лучшие настройки для zpaq, которые могли бы дать лучшие результаты, или какие-либо другие идеи?

заранее спасибо

2
Какую команду вы пробовали с ffmpeg? Gyan 6 лет назад 0
`ffmpeg -i img% 04d.tif -vf fps = 30 -c: v libx264 -pix_fmt yuv420p out.mp4` bdoyle159 6 лет назад 0

1 ответ на вопрос

0
Marco

Часто лучше позволить алгоритму выбрать лучший способ сжатия. Сжатие с индексированными цветами подходит для изображений с острыми краями. Фотографические изображения лучше сжимаются по таким стандартам, как JPEG и MPEG.

Я протестировал сжатие H.264, используя FFmpeg и видео плавательного бассейна, которое я сделал. Сначала я преобразовал видео в оттенки серого, 300x200 пикселей и 2 кадра в секунду. Поэтому я использовал 00:12:30 видео, чтобы получить 1500 кадров. Я получил следующее:

ffmpeg -i input.mp4 -c:v libx264 -crf 30 crf30.mp4 

Размер файла: 5,7 МБ
Битрейт: 60,7 Кбит / с
Пример кадра:
enter image description here

ffmpeg -i input.mp4 -c:v libx264 -crf 40 crf40.mp4 

Размер файла: 1,6 МБ
Битрейт: 17,2 Кбит / с
Пример кадра:
enter image description here

ffmpeg -i input.mp4 -c:v libx264 -crf 45 crf45.mp4 

Размер файла: 768,5 КБ Битрейт
: 7998 бит / с
Пример кадра:
enter image description here

Спасибо! Я использовал аналогичный подход, но сначала преобразовал изображения в 8-битную шкалу серого с помощью imagemagick, а затем упаковал их в видео с помощью ffmpeg. У меня нет команд, которые я использовал перед собой, но я использовал двухпроходное кодирование для кодирования видео до 25 Кбит / с. Я доволен результатами около 200 КБ на видео. bdoyle159 6 лет назад 0