blob: 59c5d289ed55db6385f9acf5118903b3cdb45e6a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#!/usr/bin/env sh
set -eu
[ $# -lt 1 ] && echo "Fuck" && exit 1;
VIDEO_ID="$1"
DB="${2:-fun.db}"
db() { sqlite3 -tabs -noheader "$DB" "$@"; }
frame_ppm() {
local image_id="$1"
echo "P3"
db "SELECT width, height FROM images WHERE id='$image_id'"
echo "255"
db "SELECT r,g,b FROM pixels WHERE image_id='$image_id' ORDER BY y ASC, x ASC"
}
video_info() {
local video_id="$1"
db "SELECT fps FROM videos WHERE id='$video_id'"
}
video_frames() {
local video_id="$1"
db "SELECT id FROM images WHERE video_id='$video_id' ORDER BY frame ASC" | while IFS= read image_id; do
frame_ppm "$image_id";
done;
}
save_video() {
local id="$1"
local fps="$2"
ffmpeg -y -f image2pipe -framerate "$fps" -i pipe:0 "media/$id.gif"
}
display() {
local fps="$1";
ffplay - -framerate "$fps" -autoexit;
}
## Main stuff
data="$(video_info "$VIDEO_ID")"
fps="$data"
video_frames "$VIDEO_ID" | tee >(save_video "$VIDEO_ID" "$fps") | display "$fps"
|