aboutsummaryrefslogtreecommitdiff
path: root/video.sh
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"