Skip to content

Instantly share code, notes, and snippets.

@1234ru
Last active January 17, 2022 00:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 1234ru/14b414efa314a3c23ca81dd0781ecb3e to your computer and use it in GitHub Desktop.
Save 1234ru/14b414efa314a3c23ca81dd0781ecb3e to your computer and use it in GitHub Desktop.
Работа с анимированными gif-файлами

Общий формат команды

gifsicle исходный_файл.gif -o конечный_файл.gif [опции]

Также поддерживается вариант без префиксов для указания исходного и конечного файла: gifsicle [опции] исходный_файл.gif > конечный_файл.gif Однако в таком случае порядок следования в команде опций имеет значение, что может приводить к ошибочным результатам, поэтому лучше использовать первый вариант.

Далее в тексте вместо gifsicle -i исходный_файл.gif -o конечный_файл.gif будет использоваться сокращение {.}.

Увеличение задержки между кадрами

{.} -d задержка, указанная в сотых долях секунды

Также необходимо указать диапазон кадров, начиная с нуля: {.} -d задержка "#0-".

Для расчета задержки есть три способа:

  1. Сложный математический.
    Исходная задержка при частоте, например, 24 кадра в секунду, доставшейся от видео, равна 1/24 = 0.042 с. Если частота кадров уменьшена, например, вдвое (12 кадров в секунду), то задержка умножается на 2 и равна 0.084 с. Это число умножается на желаемое замедление (скажем, 2.5 - 0.21 с), затем это число умножается на 100 (т.к. gifsicle требует задержку, выраженную именно в сотых долях секунды).
    Итоговая формула:
    2 * 2.5 * 100/24, или
    разрежение кадров * замедление * 100 / исходная частота кадров

  2. Простой житейский.
    Есть и более незамысловатый способ: просто посмотреть задержку, которая получилась у промежуточного файла, и увелчить её в нужное число раз.
    Текущую задержку можно посмотреть с помощью опции -I: gifsicle -I промежуточный_файл.gif
    Осторожно! Вывод длинный - по две строки на каждый кадр.

  3. Наглядный - с помощью gifviewer
    Крошечная (один файл) безустановочная программа позволяет просмотреть gif-файл с заданной задержкой между кадрами, что позволяет прямо на месте эту задержку подобрать (нажимаем галочку "Use Min ms" в правом нижнем углу программы, если не нажата).
    Задержка в gifviewer указывается в миллисекундах, так что при подстановке её в gifsicle надо не забыть поделить на десять.

Извлечение отдельных кадров

{.} "#S-E",

где S и E - номера начального и конечного кадров.

Нумерация кадров начинается с нуля (в отличие от вышеупомянутого gifviewer, в котором она начинается с единицы).

Можно указывать несколько групп кадров. Если указать одни и те же кадры сначала в прямом, а потом в обратном порядке, получится эффект перемотки назад:

{.} "#S-E" "#E-S"

Более правильным будет устранить дублирование первого и последнего кадров, для чего второй интервал нужно уменьшить на единицу с каждой стороны:

{.} "#S-E" "#(E-1)-(S-1)"

При этом для каждого диапазона можно указать свой интервал между кадрами. Интервал следует перед диапазоном. Пример: установить кадрам с 0-го по 5-й задержку в 200 мс, а последующим - в 1 секунду:

{.} -d 20 "#0-5" -d 100 "#6-10"

Для гарантировано корректной обработки цветов рекомендуется использовать опцию --unoptimize. Её лучше указывать в самом начале команды (перед -i), в противном случае она может неправильно сработать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment