X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=rip_movie;h=26e49e05af13d5a2975d2762af14753841794389;hb=1886c7247cb16ed68a78cd5550b152689a465999;hp=207df80c674e83f5cb42daadba7514fc9b9ab2f6;hpb=a526e6136c5c3d16327325dd05d7839149bccad1;p=bin.git diff --git a/rip_movie b/rip_movie index 207df80..26e49e0 100755 --- a/rip_movie +++ b/rip_movie @@ -21,6 +21,10 @@ rip_movie - Rips Movies using HandBrakeCLI 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 @@ -29,6 +33,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 +78,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 +110,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 +118,13 @@ die "no title" if not defined $title; 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; @@ -119,22 +132,31 @@ 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 =~ /(?\s+)\+\s+audio\s+tracks:\n # audio track header - (?(?:\g{leadspace}\s+\+\s+\d+\,.+\n){1,}) # audio track information +# use re qw(debug); + $title_bit =~ /(?\ +)\+\ +audio\ +tracks:\s*\n # audio track header + (?(?:\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 =~ /(?\s+)\+\s+subtitle\s+tracks:\n # subtitle track header - (?(?:\g{leadspace}\s+\+\s+\d+\,.+(?:\n|$)){1,}) # subtitle track information + $title_bit =~ /(?\ +)\+\ +subtitle\ +tracks:\s*\n # subtitle track header + (?(?:\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) { @@ -151,6 +173,7 @@ if (not @titles_to_rip) { 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) { @@ -162,9 +185,15 @@ exit 1 if $invalid_titles; 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}}),