From 85fb50abe2018af71bbc65ded247e781f2ad75ff Mon Sep 17 00:00:00 2001 From: Michael Hanson Date: Thu, 4 Aug 2011 19:39:38 +0000 Subject: linhes-scripts: Update screenshooter.sh for 0.24/R7. More below... Moderately tested. Verbosity does not always seem to work. Command line switches have changed. -f FILENAME does NOT require a full path. -v is now for verbose mode. --- abs/core/linhes-scripts/PKGBUILD | 6 +- abs/core/linhes-scripts/screenshooter.sh | 114 ++++++------- abs/core/linhes-scripts/screenshooter.sh.orig | 224 ++++++++++++++++++++++++++ abs/core/linhes-scripts/shootscreens.sh | 3 +- 4 files changed, 286 insertions(+), 61 deletions(-) mode change 100644 => 100755 abs/core/linhes-scripts/screenshooter.sh create mode 100644 abs/core/linhes-scripts/screenshooter.sh.orig mode change 100644 => 100755 abs/core/linhes-scripts/shootscreens.sh diff --git a/abs/core/linhes-scripts/PKGBUILD b/abs/core/linhes-scripts/PKGBUILD index 71a5961..076bac7 100644 --- a/abs/core/linhes-scripts/PKGBUILD +++ b/abs/core/linhes-scripts/PKGBUILD @@ -3,7 +3,7 @@ pkgname=linhes-scripts pkgver=7 -pkgrel=3 +pkgrel=4 pkgdesc="Various scripts that help to make LinHES, LinHES." arch=('i686' 'x86_64') license=('GPL2') @@ -58,7 +58,7 @@ build() { cp pause_mythcommflag ${pkgdir}/etc/logrotate.d/ } md5sums=('f56985b2d602e11dc1e10d3e7848b2a5' - '448f7ff4b4acc78e2ada919d8149d014' + '10ad1a4da669adccd01e0be6e5e4a3ed' '9ae2cd7a0c42d57ad8b5f515d7d60196' '1274bad3fb7296f00acd2d44804bad14' '47225fa9b6c953d56f6ede84d921a300' @@ -75,7 +75,7 @@ md5sums=('f56985b2d602e11dc1e10d3e7848b2a5' '15f3143d2b1369da431e4268029aba40' '3d0adf26280cde55a0c47188fff34826' '93aaa2940e33ec9ebb305b839ac46a3e' - '495e44151a06b2cc13e3fa103d6b4a1e' + 'b2c3dd48a4abb976eda2d5fbf22a173a' 'b527b01d119d3bc33b8fa69bdf1082bb' 'c537c44156d8404016cc4b405b092d45' '4e66f302a77f1a857476e7f289d0c157' diff --git a/abs/core/linhes-scripts/screenshooter.sh b/abs/core/linhes-scripts/screenshooter.sh old mode 100644 new mode 100755 index 72f6cc0..1cb7a78 --- a/abs/core/linhes-scripts/screenshooter.sh +++ b/abs/core/linhes-scripts/screenshooter.sh @@ -5,6 +5,9 @@ # Email: bob@stormlogic.com # # If you run into problems with this script, please send me email +# +# Maintained by Michael Hanson +# # This is alpha code to auto-generate thumbnails for previews in MythVideo. # It won't currently work on some filenames that have spaces in them. @@ -24,42 +27,44 @@ Usage() { echo "USAGE:" - echo `basename $0` "-v PATHNAME [-s SECONDS] [-c] [-b HOSTNAME] [-u USERNAME] [-p PASSWORD] [-o]" - echo "-v: pathname to Video" + echo `basename $0` "-f FILENAME [-s SECONDS] [-c] [-b HOSTNAME] [-u USERNAME] [-p PASSWORD] [-v]" + echo "-f: video filename" echo "-s: number of Seconds to skip before capturing (270 by default)" echo "-c: Clobber any previous screenshot found for this video (off by default)" - echo "-b: mysql server (Backend) hostname (localhost by default)" + echo "-b: mysql server (Backend) hostname (default: dbhost in /etc/systemconfig)" echo "-u: mysql Username (mythtv by default)" echo "-p: mysql Password (mythtv by default)" - echo "-o: verbOse mode (off by default)" + echo "-v: verbose mode (off by default)" echo "-x: check for valid video eXtension (off by default)" echo - echo "EXAMPLE: $0 -v /myth/video/HDTV/shuttle.mpg -c -s 30" + echo "EXAMPLE: $0 -f shuttle.mpg -c -s 30" exit 3 } +. /etc/systemconfig + if [ -z $1 ]; then Usage fi -V_MISSING=1 +F_MISSING=1 -while getopts "v:sbupochx" FLAG ; do +while getopts "f:sbupvcx" FLAG ; do case "$FLAG" in - v) VIDEO_PATHNAME="$OPTARG" - V_MISSING=0;; + f) FILENAME="$OPTARG" + F_MISSING=0;; s) SKIPAHEAD="$OPTARG";; c) CLOBBER=1;; b) BACKEND_HOSTNAME="$OPTARG";; u) DBUSERNAME="$OPTARG";; p) DBPASSWORD="$OPTARG";; - o) VERBOSE=1;; + v) VERBOSE=1;; x) EXTENSION_CHECK=1;; *) Usage;; esac done -if [ $V_MISSING == 1 ]; then +if [ $F_MISSING == 1 ]; then Usage fi @@ -68,82 +73,75 @@ fi # SKIPAHEAD is the number of seconds to skip ahead before starting the frame capture. # Set it to an arbitrary value if none is specified. SKIPAHEAD=${SKIPAHEAD:-"270"} -BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"} +BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-${dbhost}} DBUSERNAME=${DBUSERNAME:-"mythtv"} DBPASSWORD=${DBPASSWORD:-"mythtv"} -# Defaults to quiet. -VERBOSE=${VERBOSE:-0} +# Defaults to quiet. +VERBOSE=${VERBOSE:-0} # Unless otherwise told, do not clobber existing cover files. CLOBBER=${CLOBBER:-0} # Unless otherwise told, do not check the file extension against # MythTV's list of registered video file types. EXTENSION_CHECK=${EXTENSION_CHECK:-0} -VIDEO_CAPTURE_HOME=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select data from settings where value='VideoArtworkDir' limit 1") -if [ ! -d "$VIDEO_CAPTURE_HOME" ] ; then - echo "Directory $VIDEO_CAPTURE_HOME does not exist, nowhere to put the screen shot!" - echo "Have you configured MythVideo yet?" +SG_VIDEOS=$(mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -sNBe \ + "SELECT dirname FROM storagegroup WHERE groupname='Videos'") +if [ ! -d "${SG_VIDEOS}" ] ; then + echo "Directory $SG_VIDEOS does not exist, nowhere to put the screen shot!" + echo "Have you configured Storage Groups yet?" exit 1 fi -VIDEO_HOME=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select data from settings where value='VideoStartupDir' limit 1") -if [ ! -d "$VIDEO_HOME" ] ; then - echo "Directory $VIDEO_HOME does not exist, nowhere to put the screen shot!" - echo "Have you configured MythVideo yet?" +SG_SCREEN=$(mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -sNBe \ + "SELECT dirname FROM storagegroup WHERE groupname='Screenshots'") +if [ ! -d "${SG_SCREEN}" ] ; then + echo "Directory $SG_SCREEN does not exist, nowhere to put the screen shot!" + echo "Have you configured Storage Groups yet?" exit 1 fi -VIDEO_FILENAME=$(basename "$VIDEO_PATHNAME") -VIDEO_EXTENSION=${VIDEO_FILENAME##*.} +VIDEO_EXTENSION=${FILENAME##*.} # Since we cron'd lets first make sure the validity of the file if [ "$EXTENSION_CHECK" == "1" ]; then - EXCHECK=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select f_ignore from videotypes where extension=\"$VIDEO_EXTENSION\";") - #excheck returns blank, it found nothing. + EXCHECK=$(mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -sNBe "select f_ignore from videotypes where extension='${VIDEO_EXTENSION}';") + #excheck returns blank, it found nothing. if [ "$EXCHECK" == "" ]; then if [ "$VERBOSE" == "1" ]; then echo "$VIDEO_EXTENSION does not appear to be a valid media file, skipping." fi exit 1 - else + else # It is valid, but should we ignore it. If so then excheck will equal 1. - if [ "EXCHECK" == "1" ]; then + if [ "EXCHECK" == "1" ]; then if [ "$VERBOSE" == "1" ]; then echo "$VIDEO_EXTENSION is set to ignore." fi exit 1 fi - # It is valid, it's not set to ignore. + # It is valid, it's not set to ignore. if [ "$VERBOSE" == "1" ]; then echo "$VIDEO_EXTENSION appears in the Database, checking further." fi - EXCHECK=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select title from videometadata where filename=\"$VIDEO_PATHNAME\";") + EXCHECK=$(mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -sNBe "select title from videometadata where filename LIKE '%${FILENAME}';") #Right, the file is supposed to be playable. Has it been imported to the Db yet? if [ "$EXCHECK" == "" ] ; then - if [ "$VERBOSE" == "1" ]; then + if [ "$VERBOSE" == "1" ]; then echo "$VIDEO_FILENAME does not exist in the database." - fi + fi exit 1 - # If you decide you want the system to 'auto import' the video then comment out - # the exit line and uncomment the rest of it. Bewarned, this is sucky SQL at - # the best but will give sensible defaults. - # - # if [ "$VERBOSE" == "1" ]; then - # echo "Importing $VIDEO_FILENAME in to database." - # fi - # mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "insert into videometadata (intid, title, director, plot, rating, inetref, year, userrating, length, showlevel, filename, coverfile, childid, browse, playcommand, category) values (' ', '$VIDEO_FILENAME', 'Unknown', 'Unknown', 'NR', '00000000', 1895, 0.0, 0, 1, '$VIDEO_PATHNAME', 'No Cover', -1, 1, ' ', 0);" fi fi fi if [ "$CLOBBER" -eq 0 ]; then # Since we're not clobbering, first check to see if this video already has a coverfile entry in MySQL: - SQL_CMD="select coverfile from videometadata where filename=\"$VIDEO_PATHNAME\";" - CURRENT_COVERFILE=`mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -B -e "$SQL_CMD" | tail -1` - - if [[ "$CURRENT_COVERFILE" != "" ]] && [[ "$CURRENT_COVERFILE" != "No Cover" ]]; then + SQL_CMD="SELECT coverfile FROM videometadata WHERE filename LIKE '%${FILENAME}';" + CURRENT_COVERFILE=`mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -B -e "$SQL_CMD" | tail -1` + + if [[ "$CURRENT_COVERFILE" != "" ]] && [[ "$CURRENT_COVERFILE" != " " ]] && [[ "$CURRENT_COVERFILE" != "No Cover" ]]; then # there's already a cover file for this video - if [ "$VERBOSE" == "1" ]; then - echo "$VIDEO_FILENAME has cover file, skipping." + if [ "$VERBOSE" == "1" ]; then + echo "$FILENAME has cover file, skipping." fi exit 2 fi @@ -151,7 +149,7 @@ fi # Swap the video file extension for png. Should work assuming the extension only appears ONCE! -VIDEO_CAPTURE_PATHNAME="$VIDEO_CAPTURE_HOME/$VIDEO_FILENAME.png" +VIDEO_CAPTURE_PATHNAME="$SG_SCREEN/${FILENAME%.*}.png" # How many frames of video to capture. We'll grab the last frame as our screenshot. if [ "$VIDEO_EXTENSION" == "m4v" ]; then @@ -163,13 +161,17 @@ fi SHOTFILE="000000"$FRAMES_TO_CAPTURE".png" VIDEO_STATS="/tmp/screenshooter_video_stats.txt" +# Get the full path of the video file, less the storage group prefix +FULL_PATH=$(mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -sNBe \ + "SELECT filename FROM videometadata WHERE filename LIKE '%${FILENAME}';") + cd /tmp # The video we're processing may be shorter than SKIPAHEAD seconds. # Keep trying to capture until we find a SKIPAHEAD value within the length of the video. # Give up if we reach 0 seconds. while [ ! -f "$SHOTFILE" ]; do - /usr/bin/mplayer -ss $SKIPAHEAD -vf scale=640:-2 -ao null -vo png -quiet -frames $FRAMES_TO_CAPTURE -identify "$VIDEO_PATHNAME" &> $VIDEO_STATS & + /usr/bin/mplayer -ss $SKIPAHEAD -vf scale=640:-2 -ao null -vo png -quiet -frames $FRAMES_TO_CAPTURE -identify "$SG_VIDEOS/$FULL_PATH" &> $VIDEO_STATS & TIMEOUT=9 # Some video formats will play audio only. This loop gives the above command 20 seconds to @@ -182,7 +184,7 @@ while [ ! -f "$SHOTFILE" ]; do fi sleep 1 done - + SKIPAHEAD=$(expr $SKIPAHEAD / 2) if [ "$SKIPAHEAD" -le 0 ]; then break @@ -205,20 +207,18 @@ if [ -f "$SHOTFILE" ]; then VIDEO_LENGTH_IN_MINUTES=$(expr $VIDEO_LENGTH_IN_INTEGER_SECONDS / 60) fi - SQL_CMD="update videometadata set length=\"$MIN_LENGTH\" where filename=\"$VIDEO_PATHNAME\";" - mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e "$SQL_CMD" + SQL_CMD="UPDATE videometadata SET length = '${MIN_LENGTH}' WHERE filename LIKE '%$FILENAME';" + mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -e "$SQL_CMD" - # put the screenshot pathname and any runlength info into videometadatatable - # Pre-escape any single or double quotes for the SQL command. VIDEO_CAPTURE_PATHNAME=`echo $VIDEO_CAPTURE_PATHNAME | sed -e "s/'/\\\'/g" -e 's/"/\\\"/g' ` - VIDEO_PATHNAME=`echo $VIDEO_PATHNAME | sed -e "s/'/\\\'/g" -e 's/"/\\\"/g' ` - SQL_CMD="update videometadata set coverfile=\"$VIDEO_CAPTURE_PATHNAME\", length=\"$VIDEO_LENGTH_IN_MINUTES\" where filename=\"$VIDEO_PATHNAME\";" + FILENAME=`echo $FILENAME | sed -e "s/'/\\\'/g" -e 's/"/\\\"/g' ` + SQL_CMD="UPDATE videometadata SET coverfile = '${VIDEO_CAPTURE_PATHNAME}', length = '${VIDEO_LENGTH_IN_MINUTES}' WHERE filename LIKE '%${FILENAME}';" - mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e "$SQL_CMD" + mysql -u $DBUSERNAME -p$DBPASSWORD -h $BACKEND_HOSTNAME -D mythconverg -e "$SQL_CMD" else - echo "No image could be captured from $VIDEO_PATHNAME" + echo "No image could be captured from $FILENAME" exit 1 fi diff --git a/abs/core/linhes-scripts/screenshooter.sh.orig b/abs/core/linhes-scripts/screenshooter.sh.orig new file mode 100644 index 0000000..72f6cc0 --- /dev/null +++ b/abs/core/linhes-scripts/screenshooter.sh.orig @@ -0,0 +1,224 @@ +#!/bin/bash + +# Written by Bob Igo from the MythTV Store at http://MythiC.TV +# with contributions from TJC and Sarah Hayes +# Email: bob@stormlogic.com +# +# If you run into problems with this script, please send me email + +# This is alpha code to auto-generate thumbnails for previews in MythVideo. +# It won't currently work on some filenames that have spaces in them. +# It's surely just a matter of escaping or quoting, but I have yet to find +# the right incantation. + +# example usage: +# find -L /myth/video -wholename '*.covers' -prune -o -name '*.resume' -o -type f -exec screenshooter.sh -v {} \; + +# limitations: +# -- +# In an MBE/SBE/FE setup this might get the settings for the wrong machine... +# The script has no AI to know if a grabbed frame is useful to identify the video, only that it was able to grab it. +# Doesn't clean up after itself if videos are deleted, though MythTV may do this on its own. +# Minimum theoretical compatible video length is 4 seconds. Shorter videos will not work with this version. +# Surely more limitations I can't think of because it's my baby :) + +Usage() { + echo "USAGE:" + echo `basename $0` "-v PATHNAME [-s SECONDS] [-c] [-b HOSTNAME] [-u USERNAME] [-p PASSWORD] [-o]" + echo "-v: pathname to Video" + echo "-s: number of Seconds to skip before capturing (270 by default)" + echo "-c: Clobber any previous screenshot found for this video (off by default)" + echo "-b: mysql server (Backend) hostname (localhost by default)" + echo "-u: mysql Username (mythtv by default)" + echo "-p: mysql Password (mythtv by default)" + echo "-o: verbOse mode (off by default)" + echo "-x: check for valid video eXtension (off by default)" + echo + echo "EXAMPLE: $0 -v /myth/video/HDTV/shuttle.mpg -c -s 30" + exit 3 +} + +if [ -z $1 ]; then + Usage +fi + +V_MISSING=1 + +while getopts "v:sbupochx" FLAG ; do + case "$FLAG" in + v) VIDEO_PATHNAME="$OPTARG" + V_MISSING=0;; + s) SKIPAHEAD="$OPTARG";; + c) CLOBBER=1;; + b) BACKEND_HOSTNAME="$OPTARG";; + u) DBUSERNAME="$OPTARG";; + p) DBPASSWORD="$OPTARG";; + o) VERBOSE=1;; + x) EXTENSION_CHECK=1;; + *) Usage;; + esac +done + +if [ $V_MISSING == 1 ]; then + Usage +fi + +# Declaring Variables here and assigning sensible defaults. + +# SKIPAHEAD is the number of seconds to skip ahead before starting the frame capture. +# Set it to an arbitrary value if none is specified. +SKIPAHEAD=${SKIPAHEAD:-"270"} +BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"} +DBUSERNAME=${DBUSERNAME:-"mythtv"} +DBPASSWORD=${DBPASSWORD:-"mythtv"} +# Defaults to quiet. +VERBOSE=${VERBOSE:-0} +# Unless otherwise told, do not clobber existing cover files. +CLOBBER=${CLOBBER:-0} +# Unless otherwise told, do not check the file extension against +# MythTV's list of registered video file types. +EXTENSION_CHECK=${EXTENSION_CHECK:-0} + +VIDEO_CAPTURE_HOME=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select data from settings where value='VideoArtworkDir' limit 1") +if [ ! -d "$VIDEO_CAPTURE_HOME" ] ; then + echo "Directory $VIDEO_CAPTURE_HOME does not exist, nowhere to put the screen shot!" + echo "Have you configured MythVideo yet?" + exit 1 +fi + +VIDEO_HOME=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select data from settings where value='VideoStartupDir' limit 1") +if [ ! -d "$VIDEO_HOME" ] ; then + echo "Directory $VIDEO_HOME does not exist, nowhere to put the screen shot!" + echo "Have you configured MythVideo yet?" + exit 1 +fi + +VIDEO_FILENAME=$(basename "$VIDEO_PATHNAME") +VIDEO_EXTENSION=${VIDEO_FILENAME##*.} +# Since we cron'd lets first make sure the validity of the file +if [ "$EXTENSION_CHECK" == "1" ]; then + EXCHECK=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select f_ignore from videotypes where extension=\"$VIDEO_EXTENSION\";") + #excheck returns blank, it found nothing. + if [ "$EXCHECK" == "" ]; then + if [ "$VERBOSE" == "1" ]; then + echo "$VIDEO_EXTENSION does not appear to be a valid media file, skipping." + fi + exit 1 + else + # It is valid, but should we ignore it. If so then excheck will equal 1. + if [ "EXCHECK" == "1" ]; then + if [ "$VERBOSE" == "1" ]; then + echo "$VIDEO_EXTENSION is set to ignore." + fi + exit 1 + fi + # It is valid, it's not set to ignore. + if [ "$VERBOSE" == "1" ]; then + echo "$VIDEO_EXTENSION appears in the Database, checking further." + fi + EXCHECK=$(mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "select title from videometadata where filename=\"$VIDEO_PATHNAME\";") + #Right, the file is supposed to be playable. Has it been imported to the Db yet? + if [ "$EXCHECK" == "" ] ; then + if [ "$VERBOSE" == "1" ]; then + echo "$VIDEO_FILENAME does not exist in the database." + fi + exit 1 + # If you decide you want the system to 'auto import' the video then comment out + # the exit line and uncomment the rest of it. Bewarned, this is sucky SQL at + # the best but will give sensible defaults. + # + # if [ "$VERBOSE" == "1" ]; then + # echo "Importing $VIDEO_FILENAME in to database." + # fi + # mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "insert into videometadata (intid, title, director, plot, rating, inetref, year, userrating, length, showlevel, filename, coverfile, childid, browse, playcommand, category) values (' ', '$VIDEO_FILENAME', 'Unknown', 'Unknown', 'NR', '00000000', 1895, 0.0, 0, 1, '$VIDEO_PATHNAME', 'No Cover', -1, 1, ' ', 0);" + fi + fi +fi + +if [ "$CLOBBER" -eq 0 ]; then + # Since we're not clobbering, first check to see if this video already has a coverfile entry in MySQL: + SQL_CMD="select coverfile from videometadata where filename=\"$VIDEO_PATHNAME\";" + CURRENT_COVERFILE=`mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -B -e "$SQL_CMD" | tail -1` + + if [[ "$CURRENT_COVERFILE" != "" ]] && [[ "$CURRENT_COVERFILE" != "No Cover" ]]; then + # there's already a cover file for this video + if [ "$VERBOSE" == "1" ]; then + echo "$VIDEO_FILENAME has cover file, skipping." + fi + exit 2 + fi +fi + + +# Swap the video file extension for png. Should work assuming the extension only appears ONCE! +VIDEO_CAPTURE_PATHNAME="$VIDEO_CAPTURE_HOME/$VIDEO_FILENAME.png" + +# How many frames of video to capture. We'll grab the last frame as our screenshot. +if [ "$VIDEO_EXTENSION" == "m4v" ]; then + FRAMES_TO_CAPTURE="90" +else + FRAMES_TO_CAPTURE="05" +fi + +SHOTFILE="000000"$FRAMES_TO_CAPTURE".png" +VIDEO_STATS="/tmp/screenshooter_video_stats.txt" + +cd /tmp + +# The video we're processing may be shorter than SKIPAHEAD seconds. +# Keep trying to capture until we find a SKIPAHEAD value within the length of the video. +# Give up if we reach 0 seconds. +while [ ! -f "$SHOTFILE" ]; do + /usr/bin/mplayer -ss $SKIPAHEAD -vf scale=640:-2 -ao null -vo png -quiet -frames $FRAMES_TO_CAPTURE -identify "$VIDEO_PATHNAME" &> $VIDEO_STATS & + TIMEOUT=9 + + # Some video formats will play audio only. This loop gives the above command 20 seconds to + # finish, otherwise it gets killed. + while [ -n "`ps -p $! --no-heading`" ]; do + TIMEOUT=$(expr $TIMEOUT - 1) + if [ "$TIMEOUT" -le 0 ]; then + kill -9 $! + break + fi + sleep 1 + done + + SKIPAHEAD=$(expr $SKIPAHEAD / 2) + if [ "$SKIPAHEAD" -le 0 ]; then + break + fi +done + +if [ -f "$SHOTFILE" ]; then + # Now, the video_capture is taken, and the name of the shot is in $SHOTFILE + # Rename it and move it to the place where video_captures live. + /bin/mv -f "$SHOTFILE" "$VIDEO_CAPTURE_PATHNAME" + /bin/rm -f 000000*png + chown mythtv: "$VIDEO_CAPTURE_PATHNAME" + + # We've got the shotfile nailed, now calculate video run length. + VIDEO_LENGTH_IN_SECONDS=`grep ID_LENGTH $VIDEO_STATS | awk -F'=' '{print $2}'` + VIDEO_LENGTH_IN_INTEGER_SECONDS=${VIDEO_LENGTH_IN_SECONDS/%.*/} + if [ $VIDEO_LENGTH_IN_INTEGER_SECONDS -lt 60 ]; then + VIDEO_LENGTH_IN_MINUTES="1" + else + VIDEO_LENGTH_IN_MINUTES=$(expr $VIDEO_LENGTH_IN_INTEGER_SECONDS / 60) + fi + + SQL_CMD="update videometadata set length=\"$MIN_LENGTH\" where filename=\"$VIDEO_PATHNAME\";" + mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e "$SQL_CMD" + + + # put the screenshot pathname and any runlength info into videometadatatable + + # Pre-escape any single or double quotes for the SQL command. + + VIDEO_CAPTURE_PATHNAME=`echo $VIDEO_CAPTURE_PATHNAME | sed -e "s/'/\\\'/g" -e 's/"/\\\"/g' ` + VIDEO_PATHNAME=`echo $VIDEO_PATHNAME | sed -e "s/'/\\\'/g" -e 's/"/\\\"/g' ` + SQL_CMD="update videometadata set coverfile=\"$VIDEO_CAPTURE_PATHNAME\", length=\"$VIDEO_LENGTH_IN_MINUTES\" where filename=\"$VIDEO_PATHNAME\";" + + mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e "$SQL_CMD" +else + echo "No image could be captured from $VIDEO_PATHNAME" + exit 1 +fi diff --git a/abs/core/linhes-scripts/shootscreens.sh b/abs/core/linhes-scripts/shootscreens.sh old mode 100644 new mode 100755 index d3e8845..2d78e3c --- a/abs/core/linhes-scripts/shootscreens.sh +++ b/abs/core/linhes-scripts/shootscreens.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -x # Written by Bob Igo from the MythTV Store at http://MythiC.TV # Email: bob@stormlogic.com @@ -34,4 +35,4 @@ fi killall -9 osd_cat osd_cat --barmode=percentage --percentage=100 --pos=middle --align=center --color=white --text="Video Thumbnails Generated!" --font=$FONT --shadow=3 --color=yellow --delay=3 & fi -} \ No newline at end of file +} -- cgit v0.12