gifs.sh - chess-puzzles - chess puzzle book generator
 (HTM) git clone git://git.codemadness.org/chess-puzzles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       gifs.sh (966B)
       ---
            1 #!/bin/sh
            2 # create animated gifs for puzzle solutions.
            3 # Dependencies: ffmpeg, ImageMagick, etc.
            4 
            5 tmppal="$(mktemp '/tmp/palette_XXXXXXXX.png')"
            6 
            7 n=1
            8 while :; do
            9         f="puzzles/${n}.svg"
           10         test -f "$f" || break
           11 
           12         tmpdir="$(mktemp -d '/tmp/puzzleanim_XXXXXXXX')"
           13 
           14         # initial puzzle state also
           15         dest="$tmpdir/0.png"
           16         convert "$f" "$dest"
           17 
           18         # solution
           19         i=1
           20         while :; do
           21                 f="puzzles/solutions/${n}_${i}.svg"
           22                 test -f "$f" || break
           23 
           24                 dest="$tmpdir/$i.png"
           25                 convert "$f" "$dest"
           26                 i=$((i+1))
           27         done
           28 
           29         # create video / animation.
           30         out="puzzles/solutions/$n.gif"
           31         rm -f "$out"
           32 
           33         # generate palette for gif.
           34         rm -f "$tmppal"
           35         ffmpeg -loglevel error -stats -i "$tmpdir/%d.png"\
           36                 -vf palettegen "$tmppal"
           37 
           38         # wait longer for last frame.
           39         ffmpeg -loglevel error -stats -framerate 1\
           40                 -i "$tmpdir/%d.png" \
           41                 -i "$tmppal" \
           42                 -lavfi 'tpad=stop_mode=clone:stop_duration=4[v];[v]paletteuse[out]' \
           43                 -map '[out]' \
           44                 "$out"
           45 
           46         rm -rf "$tmpdir"
           47         rm -f "$tmppal"
           48 
           49         n=$((n + 1))
           50 done