Скрипты / Windows / Linux

Пакетная конвертация изображений в AVIF и WEBP

Общая информация об AVIF

В современном мире цифровых технологий и визуального медиа содержимого, использование различных форматов изображений становится все более распространённым AVIF. Форматы, такие как JPEG, PNG и GIF, долгое время являлись популярными выборами для сжатия и передачи изображений в Интернете. Однако с развитием высокоскоростных сетей и технологий передачи данных, возникает потребность в создании новых форматов файлов, которые обеспечат высокое качество изображений при более эффективном использовании пропускной способности сети.

Преимущества AVIF

Один из таких новых форматов файлов - AVIF (AV1 Image Format). AVIF - это открытый, свободный и эффективный формат изображений, основанный на алгоритме сжатия видео AV1. Этот формат был разработан Альянсом AV1 в 2018 году и стал быстро набирать популярность благодаря своей способности эффективно сжимать изображения при сохранении высокого качества.

Одной из главных причин популярности формата AVIF является его способность обеспечивать лучшую степень сжатия, чем другие форматы, такие как JPEG или PNG. Алгоритм сжатия, используемый в AVIF, позволяет сохранять больше деталей изображений при более низкой ёмкости файла. Это означает, что изображения в формате AVIF могут быть переданы по сети быстрее и потребуют меньше пропускной способности, что особенно важно в условиях мобильного Интернета или медленных соединений.

Ещё одной привлекательной особенностью AVIF является его поддержка широкого диапазона цветовых пространств. Это позволяет сохранять высокую точность цветопередачи, что особенно важно для фотографий и изображений с большим количеством цветов. AVIF также поддерживает альфа-каналы, что делает его идеальным выбором для изображений с прозрачностью или слоями.

Недостатки AVIF

Однако вместе со всеми своими преимуществами, формат AVIF также не без некоторых ограничений. Прежде всего, существует проблема совместимости. Поддержка формата AVIF по-прежнему ограничена и не все программы и устройства могут открывать или обрабатывать файлы этого формата. Это может создавать проблемы при обмене файлами или представлении изображений на разных устройствах.

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

Вывод про формат AVIF

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

Скрипты для конвертации изображений в AVIF и WEBP на Windows и Linux

Для конвертации изображений в формат AVIF необходимо установить утилиту ImageMagick для Windows или Linux.

Установка ImageMagick на Ubuntu/Debian:

apt update
apt install -y imagemagick

Почему ImageMagick, а не FFmpeg?

После большого количества экспериментов и тестов я пришёл к выводу, что ImageMagick для такой конвертации работает не только в разы быстрее, чем FFmpeg, но и не выдаёт ошибок, например, когда в исходных картинках нестандартный цветовой профиль.

Скачать файл
Img_to_Avif-Webp-Jpg_BAT.7z [1.44 Kb]
(Скачали: 106 раз)
MD5: dff45195df8935f7032a28b1a0e8ff96
Скачать файл
Img_to_Avif_BASH.7z [1.35 Kb]
(Скачали: 102 раза)
MD5: 272f39be9ff48c8665e2dc5010c81a9c
 

Скрипт Img_to_avif-webp-jpg.bat позволяет автоматически конвертировать изображения в формат AVIF, WEBP и JPG на операционной системе Windows, с возможностью пакетной обработки и сохранением структуры папок на выходе. Скрипт является простым и удобным инструментом для конвертации большого количества изображений одновременно. Он основан на использовании ImageMagick – мощной утилите для работы с изображениями.

Windows Batch: Img_to_avif-webp-jpg.bat

@echo off
rem File encoding (chcp 65001 — UTF-8)
chcp 65001 > nul
rem Get the current path
set "currentPath=%CD%"
rem Here are our conversion settings
rem Output file extension (what we will convert to): avif, webp, or jpg
set "extension=avif"
rem Quality level (compression percentage) for AVIF, WEBP, JPG, value from 1 to 100
set "quality=45"
rem List of image extensions for processing input
set "extensions=jpg jpeg gif png webp bmp avif"
rem Path to the folder with source images (see the note on encodings)
set "sourceFolder=%currentPath%\IN"
rem Path to the folder where the converted images will be saved (see the note on encodings)
set "outputFolder=%currentPath%\OUT"
rem Further script work
setlocal enabledelayedexpansion
rem Display the start message
echo """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
echo "  ____   _                                           _  _            "
echo " |  _ \ | |  ___   __ _  ___   ___  __      __ __ _ (_)| |_          "
echo " | |_) || | / _ \ / _` |/ __| / _ \ \ \ /\ / // _` || || __|         "
echo " |  __/ | ||  __/| (_| |\__ \|  __/  \ V  V /| (_| || || |_  _       "
echo " |_|    |_| \___| \__,_||___/ \___|   \_/\_/  \__,_||_| \__|( )      "
echo "                                           _                |/       "
echo "  _ __   _ __  ___    ___  ___   ___  ___ (_) _ __    __ _           "
echo " | '_ \ | '__|/ _ \  / __|/ _ \ / __|/ __|| || '_ \  / _` |          "
echo " | |_) || |  | (_) || (__|  __/| (__| (__ | || | | || (_| | _  _  _  "
echo " | .__/ |_|   \___/  \___|\___| \___|\___||_||_| |_| \__, |(_)(_)(_) "
echo " |_|                                                 |___/           "
echo "                                                                     "
echo """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
echo.
echo Wait for the script to finish!
rem Create the output folder if it does not exist
if not exist "!outputFolder!" mkdir "!outputFolder!"
rem Get a list of all subdirectories in the specified folder
for /r "%sourceFolder%" /d %%i in (*) do (
rem Get the path to the current source directory
set "sourcePath=%%i"
rem Replace the beginning of the path with the output directory path
set "outputPath=!sourcePath:%sourceFolder%=!\\"
rem Create a subdirectory in the output folder if it does not exist
if not exist "!outputFolder!!outputPath!" mkdir "!outputFolder!!outputPath!"
)
rem Get a list of all image files in the specified folder and its subdirectories
for %%x in (%extensions%) do (
for /r "%sourceFolder%" %%i in (*.%%x) do (
rem Get the path to the source file and its name
set "sourceFile=%%i"
rem Get the path to the source folder
set "sourcePath=!sourceFile:%sourceFolder%=!"
rem Get only the file name without the path
for %%F in ("%%i") do set "fileName=%%~nF"
rem Form the path to the converted file
set "outputPath=!outputFolder!!sourcePath!"
rem Determine the path to the file without the file name
for %%I in ("!outputPath!") do set "filePath=%%~dpI"
rem Create the name of the new output file
set "avifFile=!filePath!!fileName!.!extension!"        
rem Start the conversion using ImageMagick with the specified quality level
magick convert "!sourceFile!" -quality !quality! "!avifFile!"
)
)
echo.
chcp 65001 > nul
echo File conversion completed
timeout /t 2 >nul 2>&1
exit

Linux Bash: Img_to_Avif.sh

#!/bin/bash
# Получаем текущий путь
currentPath=$(pwd)
# Здесь у нас настройки конвертирования
# Расширение файлов на выходе (во что будем конвертировать) avif, webp или jpg
extension="avif"
# Уровень качества (процент сжатия) для AVIF, WEBP, JPG, значение от 1 до 100
quality="35"
# Список расширений изображений для обработки на входе
extensions=("jpg" "jpeg" "gif" "png" "webp" "bmp" "avif")
# Путь к папке с исходными изображениями
sourceFolder="$currentPath/IN"
# Путь к папке, куда будут сохранены конвертированные изображения
outputFolder="$currentPath/OUT"
# Вывод сообщения о начале выполнения
echo "*********************************************************"
echo "  ____   _                                           _  _"
echo " |  _ \ | |  ___   __ _  ___   ___  __      __ __ _ (_)| |_"
echo " | |_) || | / _ \ / _\` |/ __| / _ \ \ \ /\ / // _\` || || __|"
echo " |  __/ | ||  __/| (_| |\__ \|  __/  \ V  V /| (_| || || |_ _"
echo " |_|    |_| \___| \__,_||___/ \___|   \_/\_/  \__,_||_| \__|(_)"
echo "                                                         "
echo "  _ __   _ __  ___    ___  ___   ___  ___ (_) _ __    __ _"
echo " | '_ \ | '__|/ _ \  / __|/ _ \ / __|/ __|| || '_ \  / _\` |"
echo " | |_) || |  | (_) || (__|  __/| (__| (__ | || | | || (_| | _  _  _"
echo " | .__/ |_|   \___/  \___|\___| \___|\___||_||_| |_| \__, |(_)(_)(_)"
echo " |_|                                                 |___/"
echo "*********************************************************"
echo ""
echo "Дождитесь окончания работы скрипта!"
# Создание папки для результатов, если она не существует
mkdir -p "$outputFolder"
# Получаем список всех файлов с изображениями в указанной папке и её субдиректориях
for ext in "${extensions[@]}"; do
find "$sourceFolder" -type f -iname "*.$ext" | while IFS= read -r sourceFile; do
# Получаем путь к исходному файлу и его имя
fileName=$(basename "$sourceFile")
# Получаем путь к исходной папке
sourcePath=$(dirname "$sourceFile" | sed "s|$sourceFolder||")
# Формируем путь к конвертированному файлу
outputPath="$outputFolder$sourcePath"
# Создаем папку, если её нет
mkdir -p "$outputPath"
# Запускаем конвертацию с использованием ImageMagick и указанным уровнем качества
avifFile="$outputPath/${fileName%.*}.$extension"
convert "$sourceFile" -quality "$quality" "$avifFile"
done
done
echo ""
echo "Конвертация файлов завершена!"

You need to log in to access all site features.

Поделиться:

0 Комментариев