rip_movie
Options:
+ --device Device to rip from (default /dev/dvd)
+ --output Output filename
+ --min-duration Minimum duration in minutes for episode
+ --titles Optional titles to rip; overrides title autodetection
--debug, -d debugging level (Default 0)
--help, -h display this help
--man, -m display manual
=over
+=item B<--device>
+
+Device to rip from (default /dev/dvd)
+
=item B<--output>
Override the output filename
help => 0,
man => 0,
min_duration => 25,
+ device => '/dev/dvd',
);
GetOptions(\%options,
'titles|title|t=i@',
+ 'device|D=s',
'min_duration|min-duration=i',
'debug|d+','help|h|?','man|m');
pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS;
-my $result = qx(HandBrakeCLI -i /dev/dvd -t 0 -o /dev/null 2>&1);
+my $result = qx(HandBrakeCLI -i $options{device} -t 0 -o /dev/null 2>&1);
#print STDERR $result;
my ($title) = $result =~ /^libdvdnav:\s+DVD\s+Title:\s+(.+)/im;
my $filename = lc($title);
$filename =~ s/[\s_-]+/_/;
+use Data::Printer;
+
my @titles;
for my $title_bit ($result =~ /\n(\+ title \d+:.+?)(?=\n\+ title\s+|$)/gs) {
my %title;
# title number
+# $title{bit} = $title_bit;
$title_bit =~ /^\+ title (\d+):/;
$title{num} = $1;
my ($duration) = $title_bit =~ /^\s+\+\s+duration:\s+([\d:]+)$/m;
$duration = reduce {defined $a and defined $b ? $a * 60 + $b : undef } split /:/, $duration;
$title{duration} = $duration;
# figure out audio tracks
- $title_bit =~ /(?<leadspace>\s+)\+\s+audio\s+tracks:\n # audio track header
- (?<audiotracks>(?:\g{leadspace}\s+\+\s+\d+\,.+\n){1,}) # audio track information
+# use re qw(debug);
+ $title_bit =~ /(?<leadspace>\ +)\+\ +audio\ +tracks:\s*\n # audio track header
+ (?<audiotracks>(?:\g{leadspace}\ +\+\ +\d+\,.+\n){0,}) # audio track information
/x;
my $at_info = $+{audiotracks};
- my @at_nums = $at_info =~ /^\s+\+\s+(\d+)\,/mg;
+# $title{at_info} = $at_info;
+ my @at_nums = $at_info =~ /^\s+\+\s+(\d+)\,/mg if defined $at_info;
$title{audio_tracks} = [@at_nums];
# figure out subtitle tracks
- $title_bit =~ /(?<leadspace>\s+)\+\s+subtitle\s+tracks:\n # subtitle track header
- (?<subtittracks>(?:\g{leadspace}\s+\+\s+\d+\,.+(?:\n|$)){1,}) # subtitle track information
+ $title_bit =~ /(?<leadspace>\ +)\+\ +subtitle\ +tracks:\s*\n # subtitle track header
+ (?<subtittracks>(?:\g{leadspace}\ +\+\ +\d+\,.+(?:\n|$)){0,}) # subtitle track information
/x;
my $st_info = $+{subtittracks};
- my @st_nums = $st_info =~ /^\s+\+\s+(\d+)\,/mg;
+# $title{st_info} = $st_info;
+ my @st_nums = $st_info =~ /^\s+\+\s+(\d+)\,/mg if defined $st_info;
$title{subtitle_tracks} = [@st_nums];
+ $title{pos_num} = @titles;
push @titles,\%title;
}
+# p @titles;
+
+#print STDERR Dumper(\@titles);
+
+
if (not @titles_to_rip) {
my $longest_title;
for my $i (0..$#titles) {
push @titles_to_rip,$longest_title+1;
}
}
+# p @titles_to_rip;
my $invalid_titles = 0;
for my $i (@titles_to_rip) {
if ($i > @titles or $i < 1) {
my $multiple_titles = @titles_to_rip > 1;
+#print STDERR Dumper(\@titles_to_rip,[@titles[map {$_} @titles_to_rip]]);
+#exit;
+
+p @titles_to_rip;
+p @titles;
+
for my $i (@titles_to_rip) {
- system('HandBrakeCLI','-i','/dev/dvd','-t',$i,
- '-o',$filename.($multiple_titles ? '_'.$i : '').".mkv",
+ system('HandBrakeCLI','-i',$options{device},'-t',$titles[$i-1]{num},
+ '-o',$filename.($multiple_titles ? '_'.$titles[$i-1]{num} : '').".mkv",
'-e','x264','-2','-q','21',
'-a',join(',',@{$titles[$i-1]{audio_tracks}}),
'-s',join(',',@{$titles[$i-1]{subtitle_tracks}}),