我刚刚尝试使用该animate
包来获取带有动画的 pdf 文件,效果非常好!
然而,我注意到生成的文件大小是我正在处理的动画的 10 倍,而且在大多数情况下甚至更糟。
我认为原因在于没有使用连续帧之间的差异,而是使用每帧的完整帧。例如,这就是 gifsicle 使用的http://www.lcdf.org/gifsicle/ (来源可用)“仅存储每帧改变的部分,并可以大幅缩小您的 GIF。”
有没有可能在animate
包中进行优化?
答案1
timeline
您可以使用差异位图和包的功能来优化 PDF 动画的大小animate
。
但请注意,每显示一个新动画帧,需要重新显示的差分帧数就会增加一个。这可能会随着时间的推移减慢正在运行的动画的速度。Adobe Reader 最初并未针对图形渲染速度进行优化。因此,对于较长的位图序列,最好制作一个视频文件 (MP4/H.264) 并将其嵌入到包中media9
。
如果您仍想为差异位图序列制作动画,请按以下步骤操作:
(1)使用以下方法创建原始动画 gif 的尺寸优化版本gifsicle
:
gifsicle -O3 animated.gif > optimized.gif
为了测试目的,你可以尝试使用来自渐近线网站的这个动画 gif: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)可以从以下 LaTeX 源文件生成带有动画序列的 PDF(可能需要调整最大帧数和帧速率):
\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 设置(编辑->首选项->页面显示)中的“平滑图像”未选中。否则,您将得到难看的伪影。
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