Das Paket „Animate“ ist großartig, aber könnte es eine bessere Animationskomprimierung haben?

Das Paket „Animate“ ist großartig, aber könnte es eine bessere Animationskomprimierung haben?

Ich habe gerade das animatePaket ausprobiert, um PDF-Dateien mit Animationen zu erhalten, und es funktioniert großartig!

Mir ist jedoch aufgefallen, dass die Größe der generierten Dateien zehnmal größer ist als für die von mir bearbeiteten Animationen und in den meisten Fällen ist es sogar noch schlimmer.

Ich glaube, der Grund dafür ist, dass nicht die Differenz zwischen aufeinanderfolgenden Bildern verwendet wird, sondern das gesamte Bild für jedes Bild. Das ist zum Beispiel das, was gifsicle verwendethttp://www.lcdf.org/gifsicle/ (Quelle verfügbar) „Speichert nur den geänderten Teil jedes Frames und kann Ihre GIFs radikal verkleinern.“

Besteht die Möglichkeit, dies im animatePaket zu optimieren?

Antwort1

Sie können die Größe der PDF-Animation mithilfe differenzieller Bitmaps und der timelineFunktion des animatePakets optimieren.

Beachten Sie jedoch, dass sich mit jedem neu anzuzeigenden Animationsbild die Anzahl der neu anzuzeigenden Differenzbilder um eins erhöht. Dies kann eine laufende Animation mit fortschreitender Zeit verlangsamen. Adobe Reader wurde nicht primär für die Geschwindigkeit der grafischen Darstellung optimiert. Für lange Bitmap-Sequenzen kann es daher besser sein, eine Videodatei (MP4/H.264) zu erstellen und diese mit dem media9Paket einzubetten.

Möchten Sie dennoch differenzielle Bitmap-Sequenzen animieren, gehen Sie wie folgt vor:

(1) Erstellen Sie eine größenoptimierte Version des ursprünglichen animierten GIFs mit gifsicle:

gifsicle -O3 animated.gif > optimized.gif

Zu Testzwecken können Sie dieses animierte GIF von der Asymptote-Website ausprobieren:http://asymptote.sourceforge.net/gallery/animations/wheel.gif

(2) Erzeugen Sie eine PNG-Sequenz ( difference-0.png,,, difference-1.png...) der Bildunterschiede mit dem ungif.shunten aufgeführten Skript. Das Skript schreibt die zu verwendende Zeitleiste in \animategraphicsdie Standardausgabe, die in die Textdatei umgeleitet wird timeline.txt:

ungif.sh optimized.gif difference.png > timeline.txt

(3) Das PDF mit der Animationssequenz lässt sich aus folgender LaTeX-Quelldatei erzeugen (hierbei muss die max. Framezahl und ggf. die Framerate angepasst werden):

\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) Bevor Sie die Animation im Adobe Reader betrachten, vergewissern Sie sich, dass in den Reader-Einstellungen (Bearbeiten->Einstellungen->Seitenanzeige) die Option „Glatte Bilder“ deaktiviert ist. Sonst entstehen hässliche Artefakte.

Inhalt des Bash-Skripts ungif.sh(erfordert 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

verwandte Informationen