Автооптимізація gif на Linux

image (3).jpeg

Постало питання в оптимізації розміру Gif анімацій для ретро-ігор, щоб швидко їх вивантажувати й мати трохи кращу швидкість картинки. Бо одна програма Peek робить gif запис, але картинка не плавна, інша створює великий розмір вихідного файлу.

Найкраще з подібним справляється Simple Screen Recorder, але він не пише gif, проте з іншими форматами все добре. Для цього діла мені оптимально підійшов формат apng, але теж великий розмір запису. Це вирішується сторонніми онлайн сервісами, але через інтернет й більше зайвих дій. Апаратне рішення дозволяє скористатись apnd2gif, але лише через терміна. Далі gif потрібно стиснути і в gifsicle, дозволяє зменшити вагу. А потів зациклити, щоб по колу повторювалась дія, бо стає в кінці. Це кожен раз прописувати три різні команди із іменами файлів. Цього не люблю, бо термінал хоч і подобається як певний інструмент, але треба багатенько знати й набирати.

Тож було вирішено звернутись до ШІ за порадою, з чого випливла інформація про автоматизацію всього одним Bash скриптом. Це вперше коли ШІ дав мені відразу робочий код, хоча остання спроба була ще коли ChatGPT можна було зареєструвати за орендованим номером, бо країна +380 не була дозволена, а зараз він доступний українцям навіть без реєстрації. Це звичайно інший ШІ.

Скрипт

Баш скрипт, просто копіюється й створюється новий текстовий файл і вставляється туди, а розширення файлу, запис після крапки як в mp3 чи mp4, змінюється із txt на sh і робиться виконуваним. Дані параметри дозволяють оптимізувати apng в gif саме в теці їх розташування. Тож все має бути в одній одному місці, або відредагувати шлях до місця із файлами для обробки й вихідним результатом (якщо багато файлів, то так краще, бо буде відділено), а потім клацнути на нього і все.


#!/bin/bash

input_dir="."
output_dir="."

for file in "$input_dir"/*.apng; do
    if [ -f "$file" ]; then
        output_file="${file%.*}.gif"

        # Конвертувати APNG у GIF
        apng2gif "$file" "$output_file"

        # Оптимізувати GIF-файл
        gifsicle -O3 --lossy=165 "$output_file" -o "$output_file"

        # Зациклити GIF-файл
        gifsicle --loop "$output_file" -o "$output_file"
    fi
done

Пояснення:

  • input_dir="." - місце розташування apng файлів;
  • output_dir="." - шлях куди буде поміщено оброблені gif, тобто замість крапочки між лапками, потрібно вказати точну адресу куди треба, типу
/home/pictures/gif/

, а крапочки одначають, усталене використання місце, там де розташований скрипт;

  • apng2gif - конвертує apng в gif;
  • gifsicle - утиліта для різноманітної оптимізації gif
    • lossy - команда що вказує на стиснення gif, а цифри ступінь, максимально 200;
    • loop - зациклюю, але головне не питати в ШІ про цей процес з приставкою "за" та англійським словом "loop", бо вийде питання з трохи іншим сенсом.

В результаті скрипт достатньо розмістити в теці знаходження apng файлів і клацнути по ньому, як він відразу створює готові копії з розширенням gif, які вже конвертовані, стиснені та зациклені. Якщо вводити все вручну, то на десяток файлів пішла б купа часу.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center