]> git.donarmstrong.com Git - bin.git/commitdiff
add --device support
authorDon Armstrong <don@donarmstrong.com>
Fri, 4 May 2012 17:23:39 +0000 (17:23 +0000)
committerDon Armstrong <don@donarmstrong.com>
Fri, 4 May 2012 17:23:39 +0000 (17:23 +0000)
rip_movie

index 207df80c674e83f5cb42daadba7514fc9b9ab2f6..9256d0a52fdfc02ea17a85c17cff3d77b7b50b2f 100755 (executable)
--- a/rip_movie
+++ b/rip_movie
@@ -29,6 +29,10 @@ rip_movie - Rips Movies using HandBrakeCLI
 
 =over
 
+=item B<--device>
+
+Device to rip from (default /dev/dvd)
+
 =item B<--output>
 
 Override the output filename
@@ -70,10 +74,12 @@ my %options = (debug           => 0,
               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');
 
@@ -100,7 +106,7 @@ if (exists $options{titles}) {
 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;
@@ -108,10 +114,13 @@ die "no title" if not defined $title;
 my $filename = lc($title);
 $filename =~ s/[\s_-]+/_/;
 
+use Data::Dumper;
+
 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;
@@ -119,22 +128,29 @@ for my $title_bit ($result =~ /\n(\+ title \d+:.+?)(?=\n\+ title\s+|$)/gs) {
     $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;
 }
 
+#print STDERR Dumper(\@titles);
+
+
 if (not @titles_to_rip) {
     my $longest_title;
     for my $i (0..$#titles) {
@@ -144,12 +160,13 @@ if (not @titles_to_rip) {
            $longest_title = $i;
        }
        if ($title->{duration} >= $options{min_duration}) {
-           push @titles_to_rip,$i+1;
+           push @titles_to_rip,$i;
        }
     }
     if (not @titles_to_rip) {
-       push @titles_to_rip,$longest_title+1;
+       push @titles_to_rip,$longest_title;
     }
+    print STDERR Dumper({longest_title => $longest_title});
 }
 my $invalid_titles = 0;
 for my $i (@titles_to_rip) {
@@ -162,9 +179,12 @@ exit 1 if $invalid_titles;
 
 my $multiple_titles = @titles_to_rip > 1;
 
+#print STDERR Dumper(\@titles_to_rip,[@titles[map {$_} @titles_to_rip]]);
+#exit;
+
 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]{num},
+          '-o',$filename.($multiple_titles ? '_'.$titles[$i]{num} : '').".mkv",
           '-e','x264','-2','-q','21',
           '-a',join(',',@{$titles[$i-1]{audio_tracks}}),
           '-s',join(',',@{$titles[$i-1]{subtitle_tracks}}),