]> git.plutz.net Git - serve0/blobdiff - thumbnail.sh
thumbnail and meta generation
[serve0] / thumbnail.sh
diff --git a/thumbnail.sh b/thumbnail.sh
new file mode 100644 (file)
index 0000000..bf5964a
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# Use: $index $thumb $file_pattern
+
+if [ \! -e "$thumb" ] && { printf %s "$file" |grep -qE "$file_pattern"; }; then
+  read l h w <<__EOF
+  $(printf '' \
+    | mplayer -input nodefault-bindings -nosound -vo null -identify -frames 0 "$file" 2>&- \
+    | sort | sed -rn '
+      s:ID_LENGTH=(.*)(\..*)$:\1:p;
+      s:ID_VIDEO_HEIGHT=(.*):\1:p;
+      s:ID_VIDEO_WIDTH=(.*):\1:p;' \
+    | tr '\n' ' '
+  )
+__EOF
+
+  [ "$((h * 1000 / w))" -gt "750" ] \
+  && w="$((75 * w / h))" || w=100
+  chunk="$((${l:-10} / 5))"
+  
+  tmp="$(mktemp -d)"
+  for cnt in 1 2 3 4; do
+    printf '' \
+    | mplayer -input nodefault-bindings -nosound -benchmark \
+              -noconfig all -really-quiet \
+              -frames 1 -ss "$((cnt * chunk))" \
+              -vf "framestep=I,scale=${w}:-2" \
+              -vo "jpeg:outdir=${tmp}" \
+              "$file" 2>&-
+    mv "${tmp}/00000001.jpg" "${tmp}/_${cnt}.jpg"
+  done
+  printf '' \
+  | mplayer -input nodefault-bindings -nosound -benchmark \
+            -noconfig all -really-quiet \
+            -vf scale=127:-2,tile=2:2:4:0:2 \
+            -vo "jpeg:quality=60:outdir=${tmp}"\
+            "mf://$tmp/_*.jpg" 2>&-
+
+  mv "${tmp}/00000001.jpg" "$thumb"
+  rm -r "${tmp}"
+
+elif [ \! -e "$thumb" ]; then
+  touch "$thumb"
+fi