moves.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
---
moves.sh (1409B)
---
1 #!/bin/sh
2 # make a list of moves from start to end for each move.
3
4 # output moves to tty with some delay.
5 # Show PGN and human speech-like text for the moves.
6 output_tty() {
7 while read -r moves; do
8 clear
9 ./fen -o tty "$fen" "$moves"
10 echo ""
11 ./fen -o pgn "$fen" "$moves"
12 echo ""
13 ./fen -o speak -l "$fen" "$moves"
14 sleep 2
15 done
16 }
17
18 # create an animated gif.
19 # Dependencies: ffmpeg, ImageMagick, etc.
20 output_gif() {
21 tmppal="$(mktemp '/tmp/palette_XXXXXXXX.png')"
22 tmpdir="$(mktemp -d '/tmp/fen_gif_XXXXXXXX')"
23
24 n=1
25 while read -r moves; do
26 f="$tmpdir/$n.svg"
27 ./fen -o svg "$fen" "$moves" > "$f"
28 test -s "$f" || break
29
30 dest="$tmpdir/$n.png"
31 convert "$f" "$dest"
32
33 n=$((n + 1))
34 done
35
36 # generate palette for gif.
37 rm -f "$tmppal"
38 ffmpeg -loglevel error -stats -i "$tmpdir/%d.png"\
39 -vf palettegen "$tmppal"
40
41 # create video / animation.
42 # wait longer for last frame.
43 ffmpeg -loglevel error -stats -framerate 1\
44 -i "$tmpdir/%d.png" \
45 -i "$tmppal" \
46 -lavfi 'tpad=stop_mode=clone:stop_duration=4[v];[v]paletteuse[out]' \
47 -map '[out]' \
48 -f gif \
49 -
50
51 rm -rf "$tmpdir"
52 rm -f "$tmppal"
53 }
54
55 if [ "$1" = "" ] || [ "$2" = "" ]; then
56 echo "$0 <fen> <moves>" >&2
57 exit 1
58 fi
59
60 fen="$1"
61 m="$2"
62 while [ "$m" != "" ]; do
63 prevmoves="$m"
64 echo "$m"
65
66 m="${m% }"
67 m="${m%[^ ]*}"
68 m="${m% }"
69
70 test "$prevmoves" = "$m" && break # same, break also
71 done | \
72 sort | \
73 output_gif
74
75 #output_tty