X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=helpers%2Fgenthumb.sh;h=2119d85dabf247885e468900012084b67322ac0b;hb=036ced19c16e5fe9cdab244b40f8b14b31a32fe8;hp=30179b614afbb9a87d3a165f0fdfe009bc31f138;hpb=a239b304b2c9c58b9efc1990033fae701785c023;p=serve0 diff --git a/helpers/genthumb.sh b/helpers/genthumb.sh index 30179b6..2119d85 100755 --- a/helpers/genthumb.sh +++ b/helpers/genthumb.sh @@ -1,33 +1,44 @@ #!/bin/zsh +# Copyright 2014 - 2017 Paul Hänsch +# +# This file is part of Serve0 +# +# Serve0 is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Serve0 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Serve0 If not, see . video="$1" thumb="$2" -exec >/dev/null 2>/dev/null -mplayer -really-quiet -identify -frames 0 -nosound -vo null "$video" \ -| sed -rn 's:ID_VIDEO_WIDTH=(.*):\1:p; - s:ID_VIDEO_HEIGHT=(.*):\1:p; - s:ID_LENGTH=(.*)(\..*)$:\1:p;' \ -| tr '\n' ' ' \ -| read width height length - -[ -z "$length" -o -z "$width" -o -z "$height" ] && exit 0 - -[ "$(($height*1000/$width))" -gt "750" ] && width="$((75*$width/$height))" \ - || width=100 -[ -z $width ] && width=100 -chunk="$(($length / 5))" - -tmp="$(mktemp -d)" - -for cnt in 1 2 3 4; do - mplayer -nosound -vo jpeg:outdir="$tmp" -frames 1 -benchmark -vf framestep=I,scale="$width":-2 -ss "$(($cnt*$chunk))" "$video" & - mpid="$!"; for watch in {1..10}; do - ps -p "$mpid" && sleep 1 +if [ -e "$video" -a \! -e "$thumb" ]; then + printf '' |mplayer -input nodefault-bindings -nosound -vo null -frames 0 -identify "$video" \ + | sort \ + | sed -rn 's:^.*ID_LENGTH=(.*)(\..*)$:\1:p; + s:^.*ID_VIDEO_HEIGHT=(.*)$:\1:p; + s:^.*ID_VIDEO_WIDTH=(.*)$:\1:p;' \ + | tr '\n' ' ' \ + | read length height width 2>/dev/null + + [ "$(($height * 1000 / $width))" -gt "750" ] && width="$((75 * $width / $height))" \ + || width=100 + [ -z $width ] && width=100 + chunk="$((${length:-0} / 5))" + + tmp="$(mktemp -d)" + for cnt in 1 2 3 4; do + printf '' |mplayer -input nodefault-bindings -nosound -vo jpeg:outdir="$tmp" -frames 1 \ + -benchmark -vf framestep=I,scale="$width":-2 -ss "$(($cnt*$chunk))" "$video" >/dev/null 2>/dev/null + mv "$tmp/00000001.jpg" "${tmp}/_${cnt}.jpg" done - ps -p "$mpid" && kill -9 "$mpid" - mv "$tmp/00000001.jpg" "${tmp}/${thumb}-${cnt}.jpg" -done -montage "${tmp}/${thumb}"-[1234].jpg -tile 2x2+0+0 -geometry 100x75+3+3 -background '#000000' "${thumb}" -rm -r "${tmp}" - + montage "${tmp}"/_[1234].jpg -tile 2x2+0+0 -geometry 100x75+3+3 -background '#000000' -quality 50 "${thumb}" 2>/dev/null + rm -r "${tmp}" +fi