Length Script

From MythTV Official Wiki
Revision as of 17:19, 2 January 2008 by Iamlindoro (talk | contribs) (Script for auto-generating movie lengths in MythVideo)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This script will generate accurate lengths for all movies in your MythVideo directory. Even with IMDB, many movies come back with lengths of zero minutes. Personally, I also have many television episodes archived in MythVideo. In an attempt to make my metadata more accurate, I wrote this script.

#  Script to automate setting of video lengths in mythtv.
#  Searches for all MythVideo files with length of "0."
#  Generates a list, and pipes each file through an
#  mplayer -identify "filename."  Inserts each length
#  back into the database.  This script needs slight
#  babysitting as, if mplayer cannot play the file
#  properly, it will go into a loop.  In my MythVideo
#  of ~500 files, I had to set lengths four times to
#  get the script to complete.  These files were all
#  .m2ts files from Blu-Ray discs.  If your files are
#  all relatively standard, this should be unnecessary.
#  Define the next four items.

# MythTV MySQL Database Name.  Default is "mythconverg."

# Hostname or IP Address of MySQL Server.

# MySQL user name

# MySQL Password

# Where do your movies live? (Root MythVideo Directory)

##  End of definitions

until [ "$count" = "0" ]

##find out how many movies to process
echo "USE mythconverg
SELECT filename FROM \`videometadata\` WHERE \`length\` = 0 LIMIT 1;
SELECT title FROM \`videometadata\` WHERE \`length\` = 0 LIMIT 1;" > lengthlist.sql

mysql -h $DBHOST -u$DBUSER p$DBPASSWORD < lengthlist.sql > sqllist.out
count=`wc -l sqllist.out | awk '{print $1}'`

##get a  movie to process
echo "USE mythconverg
SELECT filename FROM \`videometadata\` WHERE \`length\` = 0 LIMIT 1;
SELECT title FROM \`videometadata\` WHERE \`length\` = 0 LIMIT 1;" > lengthfind.sql

mysql -h $DBHOST -u$DBUSER -p$DBPASSWORD < lengthfind.sql > sql.out
MOVIE="`cat sql.out | grep -v title | grep -v filename | grep $MOVIEHOME`"
MOVIEID="`cat sql.out | grep -v filename | grep -v title | grep -v $MOVIEHOME`"

##Calculate the length
TOTALSECONDS=`mplayer -vo null -ao null -frames 0 -identify "$MOVIE" 2>/dev/null | grep "ID_LENGTH" | sed -e 's/ID_LENGTH=//'`
LENGTH=`echo $LENGTHCALC | awk '{print int($1+0.5)}'`

SELECT @var_MOVIEID:=\`title\` FROM \`videometadata\` WHERE \`length\` = 0 LIMIT 1;

UPDATE \`videometadata\` SET \`length\` = $LENGTH WHERE \`title\` = @var_MOVIEID LIMIT 1 ;" > lengthupdate.sql

  ##update the database
mysql -h $DBHOST -u$DBUSER -p$DBPASSWORD < lengthupdate.sql

# Clean Up!

rm lengthlist.sql lengthfind.sql lengthupdate.sql sqllist.out sql.out