zaLinux.ru

Формат изображений AVIF: конвертация между форматами, AVIF lossless и lossy, как посмотреть свойства файлов AVIF


Оглавление

  1. Формат изображений AVIF: как создать AVIF lossless и lossy и конвертировать в JPG
  2. Почему формат AVIF лучше
  3. Примеры файлов в формате AVIF
  4. Утилита для конвертации в формат AVIF и формата AVIF в другие форматы
  5. Как конвертировать изображение в формат AVIF
  6. Как конвертировать изображение из формата AVIF в JPG и любой другой формат
  7. Как конвертировать в AVIF без потерь качества — lossless
  8. Как проверить, является ли AVIF lossless или lossy
  9. Как посмотреть свойства файла AVIF
  10. Простой способ конвертации AVIF без установки программ

1. Формат изображений AVIF: как создать AVIF lossless и lossy и конвертировать в JPG

Эта заметка посвящена формату изображений AVIF: мы рассмотрим как конвертировать фотографию из JPG (или любого другого формата) в AVIF; как наоборот конвертировать формат AVIF в JPG и другие популярные форматы изображений; как создавать AVIF сжатый без потерь и с потерями; а также как узнать свойства файлов AVIF.

2. Почему формат AVIF лучше

Вы могли обратить внимание, что некоторые веб-сайты перешли на формат AVIF в качестве основного для фотографий и картинок. В чём преимущества формата AVIF?

Формат AVIF это самый новый и продвинутый с технической точки зрения формат фотографий. Файлы в формате AVIF занимают меньше места чем JPG и даже HEIC при сохранении такого же качества.

AVIF будет форматом, который заменит формат HEIC (после того, как тот заменит собой формат JPG).

AVIF поддерживает содержимое как с расширенным динамическим диапазоном (HDR), так и со стандартным динамическим диапазоном (SDR), включая широко используемые цветовые пространства sRGB и BT.2020. Он поддерживает глубину цвета 8, 10 и 12 бит, сохранение зернистости плёнки, прозрачность (как изображения PNG), и анимацию (как формат GIF).

Новый формат изображения отличается более высоким качеством изображения, чем JPEG, и меньшим размером файла, меньшим количеством артефактов сжатия и меньшей блокировкой изображения.

HEIC широко поддерживается как пользовательскими приложениями на устройствах (программами для просмотра фотографий на компьютерах и телефонах), так и онлайн (все веб-браузеры поддерживают AVIF, WordPress (с плагином) и многие сайты поддерживают AVIF)

Также смотрите:

3. Примеры файлов в формате AVIF

Ниже даны несколько файлов AVIF и их аналоги в формате JPG — вы можете сравнить качество и размер файлов. Для скачивания файлов в полном размере — кликните по ним.

1) Файл JPG (размер 4.3 мегабайта):

Файл AVIF (размер 836 килобайт):

2) Файл JPG (размер 3.9 мегабайта):

Файл AVIF (размер 875 килобайт):

3) Файл JPG (размер 3.7 мегабайта):

Файл AVIF (размер 563 килобайт):

4) Файл JPG (размер 4.6 мегабайта):

Файл AVIF (размер 1 мегабайт):

Как вы можете убедиться, размер файлов у формата AVIF меньше размера файлов JPG в разы, при этом качество фотографий весьма высокой.

4. Утилита для конвертации в формат AVIF и формата AVIF в другие форматы

В этой инструкции мы будем использовать ImageMagick, если у вас ещё не установлен этот пакет, то смотрите раздел «Установка ImageMagick в Linux».

Также смотрите: Руководство по ImageMagick: установка, использование и решение проблем


5. Как конвертировать изображение в формат AVIF

Для сохранения любой фотографии в формат AVIF используйте команду следующего вида:

magick ИСХОДНЫЙ_ФАЙЛ НОВЫЙ_ФАЙЛ.avif

К примеру, я хочу конвертировать файл 20240122_124715.jpg в формат AVIF, тогда команда будет следующей:

magick 20240122_124715.jpg 20240122_124715.avif

Примечание: имя нового файла может быть любым — главное, правильно укажите расширение файла.

Примечание 2: вы можете конвертировать в формат AVIF не только из JPG, но из любых других форматов изображений.

6. Как конвертировать изображение из формата AVIF в JPG и любой другой формат

Для конвертации фотографий в формате AVIF используйте следующую команду:

magick ИСХОДНЫЙ_ФАЙЛ.avif НОВЫЙ_ФАЙЛ

Обратите внимание, что формат НОВОГО_ФАЙЛА будет соответствовать указанному расширению. Например, для конвертации в JPG команда должна быть следующего вида:

magick ИСХОДНЫЙ_ФАЙЛ.avif НОВЫЙ_ФАЙЛ.jpg

Например:

magick 20240111_124943.avif beach.jpg

А для конвертации в формат WebP команда должна иметь следующий вид:

magick ИСХОДНЫЙ_ФАЙЛ.avif НОВЫЙ_ФАЙЛ.webp

Например:

magick 20240111_124943.avif beach.webp

Смотрите также: Что такое файл WebP и чем он лучше других форматов


7. Как конвертировать в AVIF без потерь качества — lossless

Формат AVIF поддерживает как сжатие с потерями (lossy), так и сжатие без потерь (lossless). Обычно нет особого смысла конвертировать фотографии из формата JPG (который сжимает только с потерями) в формат AVIF lossless — для этого достаточно формата AVIF lossy — качество снимков практически не меняется, а сами файлы изображений занимают намного меньше места.

В AVIF lossless больше смысла конвертировать снимки из форматов, которые также используют сжатие без потерь, например, PNG и TIFF. При этом у вас по-прежнему две опции, вы можете выбрать формат AVIF lossless для сохранения всех данных из исходного изображения, либо вы можете выбрать AVIF lossy для экономии места на диске.

Судя по всему, утилита magick создаёт файлы AVIF только используя сжатие с потерями — даже если указать качество изображения равное 100. Поэтому для конвертации в AVIF lossless мы будем использовать утилиту avifdec, которая является частью библиотеки libavif.

Чтобы установить libavif в Debian, Ubuntu, Linux Mint, Kali Linux и производные от них дистрибутивы выполните команду:

sudo apt install libavif-bin

Чтобы установить libavif в Arch Linux, Manjaro, BlackArch и производные от них дистрибутивы выполните команду:

sudo pacman -S libavif

Для конвертации изображений в AVIF lossless мы будем использовать утилиту avifenc.

Примечание: в отличии от утилиты magick, которая умеет конвертировать в AVIF любые известные форматы изображений, утилита avifenc умеет работать только с форматами JPEG, PNG и YUV4MPEG2 (Y4M). Поэтому если вы хотите конвертировать в AVIF lossless другой формат, например TIFF, то по-видимому, сначала придётся конвертировать его в формат PNG.


Для сохранения изображения в формат AVIF lossless нужно использовать утилиту avifenc с опцией -l. Например, чтобы конвертировать test.png в формат AVIF lossless и сохранить результат в файл с именем lossless_test.avif, нужно запустить следующую команду:

avifenc -l test.png lossless_test.avif

Пример вывода (обратите внимание на слова «lossless» в выводе):

Successfully loaded: test.png
AVIF to be written: (Lossless)
 * Resolution     : 1388x854
 * Bit Depth      : 8
 * Format         : YUV444
 * Alpha          : Not premultiplied
 * Range          : Full
 * Color Primaries: 1
 * Transfer Char. : 13
 * Matrix Coeffs. : 0
 * ICC Profile    : Absent
 * XMP Metadata   : Absent
 * Exif Metadata  : Absent
 * Transformations: None
 * Progressive    : Unavailable
Encoding with codec 'aom' speed [6], color quality [100 (Lossless)], alpha quality [100 (Lossless)], tileRowsLog2 [0], tileColsLog2 [0], 12 worker thread(s), please wait...
Encoded successfully.
 * Color total size: 2119968 bytes
 * Alpha total size: 0 bytes
Wrote AVIF: lossless_test.avif

Вы также можете отдельно настраивать уровень сжатия с потерями или сжатие без потерь отдельно для цвета и для альфа-канала. Для этого в avifenc имеются следующие опции:

--min Q Установить минимальный квантователь для цвета. Возможные значения находятся в диапазоне 0-63, где 0 — без потерь.
--max Q Установить максимальный квантователь для цвета. Возможные значения находятся в диапазоне 0-63, где 0 — без потерь.
--minalpha Q Установить минимальный квантователь для альфа-канала. Возможные значения находятся в диапазоне 0-63, где 0 — без потерь.
--maxalpha Q Установить максимальный квантователь для альфа-канала. Возможные значения находятся в диапазоне 0-63, где 0 — без потерь.

Обратите внимание, что установка значения всех опций на 0 не даст AVIF lossless (хотя цвета и альфа канал будут сжаты lossless). То есть следующая и предыдущая команда (с использованием опции -l) НЕ являются идентичными:

avifenc --min 0 --max 0 --minalpha 0 --maxalpha 0 20240122_124715.jpg lossless_20240122_124715.avif

Сравним наглядно форматы PNG и AVIF. Вы можете сравнить качество изображения по следующим фотографиям.

Исходный файл PNG (размер файла 2.8 мегабайта):

AVIF lossless (размер 2 мегабайта)

AVIF lossy (353 килобайтов):

8. Как проверить, является ли AVIF lossless или lossy

С форматом AVIF lossless всё весьма непросто. Прежде всего, мы уже узнали, что magick конвертирует файлы в AVIF lossy даже при установки quality на значение 100 (напомним, в ImageMagick установка quality на значение 100 ОБЫЧНО означает конвертацию без потерь, но имеются и исключения — одним из них является файл AVIF).


Кроме этого, у формата AVIF имеется несколько настроек, которые относятся к сжатию с потерями или без потерь. То есть нет возможности посмотреть значение какого-то одного параметра и однозначно ответить, является ли данный файл AVIF lossless или lossy.

Итак, утилиты по выводу информации о файлах AVIF не могут однозначно ответить на вопрос, сжат ли данный файл AVIF с потерями или без потерь.

Тем не менее, вы можете узнать, сжат ли файл AVIF с потерями или без потерь если у вас имеется исходное изображение. Для этого используйте команду следующего вида:

magick compare -verbose -metric mae FILE1 FILE2 out.png

К примеру, чтобы сравнить файлы test.png и lossless_test.avif нужно запустить следующую команду:

magick compare -verbose -metric mae test.png lossless_test.avif out.png

Пример вывода:

test.png PNG 1388x854 1388x854+0+0 8-bit TrueColorAlpha sRGB 2.76841MiB 0.100u 0:00.063
lossless_test.avif AVIF 1388x854 1388x854+0+0 8-bit sRGB 2.02203MiB 0.320u 0:00.283
Image: test.png
  Channel distortion: MAE
    red: 0 (0)
    green: 0 (0)
    blue: 0 (0)
    alpha: 0 (0)
    all: 0 (0)
test.png=>out.png PNG 1388x854 8-bit sRGB 2.76841MiB 1.830u 0:01.434

Если файл сжат без потерь, то значения Channel distortion должны во всех строках быть равны 0.

Ещё один пример:

magick compare -verbose -metric mae test.png test.avif out.png

Получен следующий вывод:

test.png PNG 1388x854 1388x854+0+0 8-bit TrueColorAlpha sRGB 2.76841MiB 0.120u 0:00.074
test.avif AVIF 1388x854 1388x854+0+0 8-bit sRGB 361065B 0.110u 0:00.099
Image: test.png
  Channel distortion: MAE
    red: 847.746 (0.0129358)
    green: 803.248 (0.0122568)
    blue: 888 (0.01355)
    alpha: 0 (0)
    all: 634.749 (0.00968564)
test.png=>out.png PNG 1388x854 8-bit sRGB 2.76841MiB 1.930u 0:01.442

Поскольку значения Channel distortion не равны 0, то это означает, что файл сжат с потерями качества.

9. Как посмотреть свойства файла AVIF

В пакете libavif имеется утилита avifdec, которая с опцией -i показывает некоторые свойства файла AVIF, а именно:

  • размер изображения в пикселях
  • глубину цвета
  • цветовое пространство
  • наличие или отсутствие альфа-канала
  • наличие или отсутствие различных типов метаданных
  • наличие или отсутствие трансформации
  • количество кадров (для видео файлов)

Пример использования утилиты avifdec:

avifdec -i 20240122_100051.avif

Пример вывода:

Image decoded: 20240122_100051.avif
 * Resolution     : 4000x3000
 * Bit Depth      : 8
 * Format         : YUV420
 * Chroma Sam. Pos: 0
 * Alpha          : Absent
 * Range          : Full
 * Color Primaries: 1
 * Transfer Char. : 13
 * Matrix Coeffs. : 6
 * ICC Profile    : Absent
 * XMP Metadata   : Absent
 * Exif Metadata  : Present (57238 bytes)
 * Transformations: None
 * Progressive    : Unavailable
 * 1 timescales per second, 1.00 seconds (1 timescales), 1 frame
 * Frame:
   * Decoded frame [0] [pts 0.00 (0 timescales)] [duration 1.00 (1 timescales)] [4000x3000]

На самом деле, главное предназначение программы avifdec — конвертировать файлы AVIF в JPEG, PNG и YUV4MPEG2 (Y4M). Поэтому при желании вы можете использовать эту утилиту для целей конвертации AVIF (вместо magick).

10. Простой способ конвертации AVIF без установки программ

Если вы хотите преобразовать фотографии в формат AVIF или вам нужно конвертировать картинку из формата AVIF или вы хотите посмотреть свойства файла AVIF, но вы не хотите устанавливать программы и разбираться с командной строкой, то вы можете воспользоваться онлайн сервисами для выполнения всех этих функций:

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

Использование сервисов крайне простое — вам достаточно указать файл, который вы хотите обработать.

Также доступны дополнительные опции для тех, кому нужно больше — вы можете конвертировать в формат AVIF без потерь или выбрать из списка популярных форматов если вам нужно преобразовать файл AVIF.


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *