Dvbradioexport.pl
Note: The correct title of this article is dvbradioexport.pl. It appears incorrectly here due to technical restrictions.
| Author | Justin Hornsby |
| Description | none |
| Supports |
DVB Radio export script
Here is a script to export DVB radio recordings to MP3 format. It can be used on the command line or as a user job script.
Command line usage
If using on the command line, the usage information is as follows:
dvbradioexport.pl exportdir=/foo/bar starttime=%STARTTIME% chanid=%CHANID% maxbitrate=x debug
..where
%CHANID% = channel ID associated with the recording to export
%STARTTIME% = recording start time in either 'YYYY-MM-DD HH:MM:SS' or 'YYYYMMDDHHMMSS' format
exportdir = dir to export completed MP3 files to (note the user the script runs as must have write permission on that dir)
maxbitrate = maximum bitrate for the export to use. If more than the original file's bitrate, the original bitrate will be used
debug = enable debugging information - outputs which commands would be run etc
Use as a User Job
Enter mythtv-setup and select the 'general' menu option. Keep hitting 'next' until the 'Job Queue (Job Commands)' screen appears.
Add a brief description of the script in the 'description' field then enter the path to the script (including any options) to the 'command' field.
In this case, put 'export DVB Radio' in the description field and
dvbradioexport.pl exportdir=/foo/bar starttime=%STARTTIME% chanid=%CHANID% maxbitrate=xin the 'command' field. You may want to change some of the parameters to suit your own needs.
Click all the way to 'finish' and if user jobs are permitted to run, the script will now be available to use.
#!/usr/bin/perl -w
# dvbradioexport.pl v2.0
# By Justin Hornsby 22 October 2006
#
# Storage Group Support by Stuart Auchterlonie 28 April 2007
#
# A MythTV user job script for exporting DVB radio recordings to MP3 format
#
# Usage info will be output if the script is run with no arguments (or insufficient arguments)
#
# Contains elements of mythtv.pl by Nigel Pearson
# Initial idea from nuvexport
#
# requirements: id3tag, ffmpeg with mp3 exporting enabled, PERL and the DBI & DBD::mysql modules
# MythTV perl bindings.
#
# PERL MODULES WE WILL BE USING
use DBI;
use DBD::mysql;
use MythTV;
my $exportdir = '/home/mythtv/';
my $maxbitrate = '256';
my $bitrate = '192';
$connect = undef;
$debug = 0;
##################################
# #
# Main code starts here !! #
# #
##################################
$usage = "\nHow to use dvbradioexport.pl \n\ndvbradioexport.pl exportdir=/foo/bar starttime=%STARTTIME%
chanid=%CHANID% maxbitrate=x debug\n"
."\n%CHANID% = channel ID associated with the recording to export\n"
."%STARTTIME% = recording start time in either 'YYYY-MM-DD HH:MM:SS' or 'YYYYMMDDHHMMSS' format\n"
."exportdir = dir to export completed MP3 files to (note the user the script runs as must have write permission on that
dir)\n"
."maxbitrate = maximum bitrate for the export to use. If more than the original file's bitrate, the original
bitrate will be used \n"
."debug = enable debugging information - outputs which commands would be run etc\n";
# get this script's ARGS
#
$num = $#ARGV + 1;
# if user hasn't passed enough arguments, die and print the usage info
if ($num le "2") {
die "$usage";
}
#
# Get all the arguments
#
foreach (@ARGV){
if ($_ =~ m/debug/) {
$debug = 1;
}
elsif ($_ =~ m/maxbitrate/) {
$maxbitrate = (split(/\=/,$_))[1];
}
elsif ($_ =~ m/starttime/) {
$starttime = (split(/\=/,$_))[1];
}
elsif ($_ =~ m/chanid/) {
$chanid = (split(/\=/,$_))[1];
}
elsif ($_ =~ m/exportdir/) {
$exportdir = (split(/\=/,$_))[1];
}
}
# connect to backend
my $myth = new MythTV();
# connect to database
$connect = $myth->{'dbh'};
# PREPARE THE QUERY
$query = "SELECT title, subtitle, basename FROM recorded WHERE chanid=$chanid AND starttime='$starttime'";
$query_handle = $connect->prepare($query);
$query_handle->execute() || die "Cannot connect to database \n";
# BIND TABLE COLUMNS TO VARIABLES
$query_handle->bind_columns(undef, \$title, \$subtitle, \$basename);
# LOOP THROUGH RESULTS
$query_handle->fetch();
my $schemaVer = $myth->backend_setting('DBSchemaVer');
# Storage Groups were added in DBSchemaVer 1171
# FIND WHERE THE RECORDINGS LIVE
my $dir = 'UNKNOWN';
if ($schemaVer < 1171)
{
if ($debug) {
print ("Using compatibility mode\n");
}
$dir = $myth->backend_setting('RecordFilePrefix');
}
else
{
if ($debug) {
print ("Going into new mode\n");
}
my $storagegroup = new MythTV::StorageGroup();
$dir = $storagegroup->FindRecordingDir($basename);
}
# FIND OUT THE CHANNEL NAME
$query = "SELECT name FROM channel WHERE chanid=$chanid";
$query_handle = $connect->prepare($query);
$query_handle->execute() || die "Unable to query settings table";
my ($channame) = $query_handle->fetchrow_array;
# replace whitespace in channame with dashes
$channame =~ s/\s+/-/g;
# replace whitespace in title with underscores
$title =~ s/\W+/_/g;
# replace whitespace in subtitle with underscores
$subtitle =~ s/\W+/_/g;
#
# Remove non alphanumeric chars from $starttime & $endtime
#
$newstarttime = $starttime;
$newstarttime =~ s/[|^\W|\s|-|]//g;
$year = substr($newstarttime, 0, 4);
$filename = $dir."/".$basename;
$newfilename = $exportdir."/".$channame."_".$title."_".$subtitle."_".$newstarttime.".mp3";
if ($debug)
{
print "\n\n Source filename:$filename \nDestination filename:$newfilename\n \n";
}
#
# Now run ffmpeg to find out what bitrate the stream is
#
$origbitrate = -1;
$output = `ffmpeg -i $filename 2>&1`;
$output =~s/^.*?Audio.*?, (\d*) kb\/s.*$/$1/s;
print $output . "\n";
if ($output =~ /^\d+$/) {
$origbitrate = $output;
}
#
# If maximum bitrate is less than the source bitrate, allow the max bitrate to remain
#
$bitrate = $maxbitrate;
if (($origbitrate != -1) && ($maxbitrate > $origbitrate)) {
print "maxbitrate is greater than original. Using source bitrate to save space\n";
$bitrate = $origbitrate;
}
$bitrate .= "K";
#
# Now run ffmpeg to get mp3 out of the dvb radio recording
#
$command = "nice -n19 ffmpeg -i $filename -ab $bitrate -ac 2 -acodec mp3 -f mp3 '$newfilename' 2>&1";
if ($debug) {
print "\n\nUSING $command \n\n";
}
system "$command";
# Now tag the finished MP3 file
$command = "id3tag --song='$title' --album='$subtitle' --artist='$channame' --comment='Transcoded by MythTV' --year=$year '$newfilename'";
if ($debug) {
print "\n\nUsing $command \n\n";
}
system "$command";