パッケージ animate は素晴らしいですが、アニメーションの圧縮をもっと改善できるでしょうか?

パッケージ animate は素晴らしいですが、アニメーションの圧縮をもっと改善できるでしょうか?

animateアニメーション付きの PDF ファイルを取得するためにこのパッケージを試してみましたが、うまく機能しました。

しかし、生成されるファイルのサイズは、私が扱っているアニメーションの 10 倍の大きさであり、ほとんどの場合、さらに悪いことに気づきました。

理由は、フレームごとにフルフレームではなく、連続するフレーム間の差分を使用していないことだと思います。これは、たとえばgifsicleが使用しているものです。http://www.lcdf.org/gifsicle/ (ソースは入手可能) 「各フレームの変更された部分のみを保存し、GIF を大幅に縮小できます。」

これをパッケージ内で最適化できる可能性はありますかanimate?

答え1

timeline差分ビットマップとパッケージの機能を使用して、PDF アニメーションのサイズを最適化できますanimate

ただし、表示される新しいアニメーション フレームごとに、再表示する必要がある差分フレームの数が 1 つずつ増えることに注意してください。これにより、時間の経過に伴って実行中のアニメーションの速度が低下する可能性があります。Adobe Reader は、主にグラフィック レンダリング速度に最適化されていません。したがって、長いビットマップ シーケンスの場合は、ビデオ ファイル (MP4/H.264) を作成し、これをパッケージに埋め込む方がよい場合がありますmedia9

それでも差分ビットマップ シーケンスをアニメーション化したい場合は、次の手順に従います。

(1)以下を使用して、元のアニメーションGIFのサイズを最適化したバージョンを作成しますgifsicle

gifsicle -O3 animated.gif > optimized.gif

テスト目的で、asymptote Web サイトから次のアニメーション GIF を試すことができます。http://asymptote.sourceforge.net/gallery/animations/wheel.gif

(2)下記のスクリプトを使用して、画像の差分のPNGシーケンス(difference-0.png、、 …)を生成します。このスクリプトは、使用されるタイムラインを標準出力に書き込み、それをテキストファイルにリダイレクトします。difference-1.pngungif.sh\animategraphicstimeline.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) Adob​​e 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

関連情報