Я только что попробовал этот animate
пакет для получения PDF-файлов с анимацией, и он отлично работает!
Однако я заметил, что размер сгенерированных файлов в 10 раз больше, чем мог бы быть для анимаций, с которыми я имею дело, а в большинстве случаев все даже хуже.
Я считаю, что причина в том, что не используется разница между последовательными кадрами вместо полного кадра для каждого кадра. Это, например, то, что использует gifsiclehttp://www.lcdf.org/gifsicle/ (источник доступен) «Сохраняет только измененную часть каждого кадра и может радикально сжимать ваши GIF-файлы».
Есть ли шанс, что это можно оптимизировать в animate
пакете?
решение1
Вы можете оптимизировать размер PDF-анимации, используя дифференциальные растровые изображения и timeline
функцию пакета animate
.
Однако следует отметить, что с каждым новым кадром анимации, который нужно отобразить, количество дифференциальных кадров, которые необходимо отобразить повторно, увеличивается на один. Это может замедлить запущенную анимацию с течением времени. Adobe Reader изначально не был оптимизирован для скорости графического рендеринга. Поэтому для длинных последовательностей битовых изображений может быть лучше создать видеофайл (MP4/H.264) и встроить его в пакет media9
.
Если вы все же хотите анимировать дифференциальные последовательности растровых изображений, выполните следующие действия:
(1) Создайте оптимизированную по размеру версию исходного анимированного GIF-изображения, используя gifsicle
:
gifsicle -O3 animated.gif > optimized.gif
Для тестирования вы можете попробовать этот анимированный gif-файл с сайта asymptote:http://asymptote.sourceforge.net/gallery/animations/wheel.gif
(2) Создайте последовательность PNG ( difference-0.png
, difference-1.png
, ...) различий изображений, используя скрипт, ungif.sh
указанный ниже. Скрипт записывает временную шкалу, которая будет использоваться, в \animategraphics
стандартный вывод, который перенаправляется в текстовый файл timeline.txt
:
ungif.sh optimized.gif difference.png > timeline.txt
(3) PDF-файл с анимированной последовательностью можно создать из следующего исходного файла LaTeX (максимальное количество кадров и, возможно, частоту кадров необходимо будет скорректировать):
\documentclass{article}
\usepackage{animate}
\begin{document}
\noindent\animategraphics[
controls,
width=0.5\linewidth,
timeline=timeline.txt
]{10}{difference-}{0}{99} %adjust the maximum frame number
\end{document}
(4) Перед просмотром анимации в Adobe Reader убедитесь, что в настройках Reader (Edit->Preferences->Page Display) не отмечена галочка «Сглаживание изображений». В противном случае вы получите некрасивые артефакты.
Содержимое скрипта Bash ungif.sh
(требуется ImageMagick):
#!/bin/bash
wxh=$(identify -format '%Wx%H' $1[0])
fs=$(identify -format %n $1)
for (( i=0; i<$fs; i++ ))
do
convert -page $wxh ${1}[$i] -matte -background none -layers coalesce -quality 90 ${2/./-$i.}
echo "::${i}x0"
done