Scripting

Myth TV Rename Recordings

How to rename all of the mythtv recordings to nice names.

Use the script mythnamejez.pl using the syntax below.

find ./ -name "*.nuv" -print | xargs -n 1 ../shared/mythnamejez.pl -s --rep=. --legal |xargs -n 2 mv

The mythnamejez.pl script is as follows :

#!/usr/bin/perl
##
## Script to extract show name and subtitle from DB given the filename.
##
## Hack and Slash done by Rob Snow (rsnow@dympna.com)
##
## 28 Mar 03 1.0 Hack
## 29 Mar 03 1.1 Added --legal to fix filenames for / and \
## Should probably be fixed for other chars
## but I'm to lazy.
##
## This is a very nasty hack of myth.rebuilddatabase.pl which was nicely
## done by Greg Froese and instructions by Robert Kulagowski.
##
## Those fine gentlemens information may be found below, however, please
## do not confuse them with the author of this hack...they do nice work.
##
## written by greg froese (g_froese@yahoo.com)
## install instructions by Robert Kulagowski (rkulagow@rocketmail.com)
##
## use at your own risk, i am not responsible for anything this program may
## or may not do.

##use strict;
use DBI;
use Getopt::Long;
use File::Basename;

## get command line args

my ($database, $host, $user, $pass, $verbose, $dir);

my $argc=@ARGV;
if ($argc == 0) {
print "usage: mythname.pl [options]
/path/to/store/1001_20030401190000_20030401200000.nuv

Where [options] is:
--host - hostname or IP address of the mysql server (default:
\"127.0.0.1\")
--user - DBUSERNAME (default: \"mythtv\")
--pass - DBPASSWORD (default: \"mythtv\")
--database - DATABASENAME (default: \"mythconverg\")
--replace - Replace spaces with this string (--rep=. will return Daily.Show)
--sublen - Maximum subtitle length (only useful with -s)
-s - Add subtitle to string after a ':'
--legal - Make sure the filename is legal (no '/', '\', etc.)
";
exit(0);
}

GetOptions('verbose+'=>\$verbose, 'database=s'=>\$database, 'host=s'=>\$host,
'user=s'=>\$user, 'pass=s'=>\$pass, 's+'=>\$sub, 'replace=s'=>\$rep,
'sublen=s'=>\$sublen, 'legal+'=>\$legal);

if (!$host) { $host="localhost"; }
if (!$database) { $database="mythconverg"; }
if (!$user) { $user="mythtv"; }
if (!$pass) { $pass="mythtv"; }

my $dbh =
DBI->connect("dbi:mysql:database=$database:host=$host","$user","$pass") or
die "Cannot connect to database ($!)\n";

($show, $path, $suffix) = fileparse(@ARGV[0],"\.nuv");
$channel = substr($show,0,4);
$syear = substr($show, 5,4);
$smonth = substr($show, 9,2);
$sday = substr($show,11,2);
$shour = substr($show,13,2);
$sminute = substr($show,15,2);
$ssecond = substr($show,17,2);
$eyear = substr($show,20,4);
$emonth = substr($show,24,2);
$eday = substr($show,26,2);
$ehour = substr($show,28,2);
$eminute = substr($show,30,2);
$esecond = substr($show,32,2);

$q = "select title, subtitle, chanid, starttime, endtime from recorded where
chanid=$channel and starttime='$syear$smonth$sday$shour$sminute$ssecond' and
endtime='$eyear$emonth$eday$ehour$eminute$esecond'";
$sth = $dbh->prepare($q);
$sth->execute or die "Could not execute ($q)\n";

@row=$sth->fetchrow_array;
$title = $row[0];
$subtitle = $row[1];
$starttime = $row[3];

if ($rep) {
$subtitle=~s/\ /$rep/gio;
$title=~s/\ /$rep/gio;
$starttime=~s/\ /$rep/gio;
}
if ($sublen) {
$subtitle=substr($subtitle,0,$sublen);
}

if ($legal) {
$nogood = " ";
if ($rep) {
$nogood = $rep;
}
$title =~ s/\\/$nogood/gio;
$subtitle =~ s/\\/$nogood/gio;
$title =~ s/\//$nogood/gio;
$subtitle =~ s/\//$nogood/gio;
}


print "@ARGV[0] ./$starttime-$title";
if ($sub) {
if ($subtitle != "") {
print ":$subtitle";
}
}
print ".nuv";
print "\n";


exit(0);