X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=rip_movie;h=26e49e05af13d5a2975d2762af14753841794389;hb=56c8d8b286ae38e170ce915472f9aa86fabf9fee;hp=680e8bb672c065f919835cbc87b163ca9b0681a1;hpb=2c65b02710b56df11eccd0c841f21a9e327cc045;p=bin.git diff --git a/rip_movie b/rip_movie index 680e8bb..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,35 +118,45 @@ die "no title" if not defined $title; my $filename = lc($title); $filename =~ s/[\s_-]+/_/; -use Data::Dumper; +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; # HH:MM:SS, so (HH*60 + MM) * 60 + SS - $duration = reduce {$a * 60 + $b } split /:/, $duration; + $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) { @@ -153,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) { @@ -164,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}}),