dvd::rip

->ABOUT / NEWS

->DOCUMENTATION
-TABLE OF CONTENTS
-INSTALLATION
-USING THE GUI
-CLUSTER MODE
-FAQ

->KEY FEATURES

->DOWNLOAD

->SUPPORT

->TRANSLATIONS

->MAILING LIST
-SEARCH ARCHIVE

->CHANGE LOG

->CREDITS

->TODO

->LINKS

http://www.exit1.org/


Re: [dvd::rip] Patch: add "auto clip only" as a zoom/clip preset

Subject: Re: [dvd::rip] Patch: add "auto clip only" as a zoom/clip preset
From: Jörn Reder <joern@xxxxxx>
Date: Mon, 14 Jan 2008 22:59:56 +0100
Marc Sherman wrote:

> One thing I was wondering about -- is 720:(480|576) a universal standard 
> for vob files, or should we actually query the real dimensions of the 
> vob file and calculate the proper export_par value? I've never seen a 
> DVD with non-standard size files, but my collection is small.

You are right, but I was too lazy in the first approach ;) There *are* 
different DVD resolutions possible, would be better to calculate the 
exact factor to be sure.

Attached you find a patch (against vanilla 0.98.8) accomplishing this. 
As well the --export_par parameter is now calculated during internal 
transcode command generation instead of adding it visibly to the 
transcode options field. You still can set --export_par there to overide
dvd::rip's opinion of the best value for it ;)

Regards,

Jörn

-- 
LINUX - Linux Is Not gnU linuX
?Index: lib/Video/DVDRip/Config.pm
===================================================================
RCS file: /home/cvsroot/dvdrip/lib/Video/DVDRip/Config.pm,v
retrieving revision 1.67.2.1
diff -u -r1.67.2.1 Config.pm
--- lib/Video/DVDRip/Config.pm  9 Aug 2007 21:34:30 -0000       1.67.2.1
+++ lib/Video/DVDRip/Config.pm  14 Jan 2008 21:51:08 -0000
@@ -306,6 +306,12 @@
             [ 0       => __"Don't grab subtitles" ],
         ],
     },
+    default_preset => {
+        label   => __"Default Clip & Zoom preset",
+        type    => "popup",
+        value   => "auto_medium_fast",
+        presets => [],
+    },
     preferred_lang => {
         label   => __ "Preferred language",
         type    => 'popup',
@@ -363,6 +369,7 @@
             default_container
             ogg_file_ext
             default_bpp
+            default_preset
             default_subtitle_grab
             workaround_nptl_bugs nptl_ld_assume_kernel
             )
@@ -373,13 +380,11 @@
 
 sub new {
     my $type             = shift;
-    my %config_parameter = %CONFIG_PARAMETER;
-    my @config_order     = @CONFIG_ORDER;
 
     my @presets = (
         Video::DVDRip::Preset->new(
             name              => "nopreset",
-            title             => __ "- No Modifications -",
+            title             => __ "- No Modifications (anamorph) -",
             tc_clip1_top      => 0,
             tc_clip1_bottom   => 0,
             tc_clip1_left     => 0,
@@ -394,6 +399,11 @@
             tc_fast_bisection => 0,
         ),
         Video::DVDRip::Preset->new(
+            name           => "auto_clip",
+            title          => __ "Autoadjust, Clipping only (anamorph)",
+            auto_clip      => 1,
+        ),
+        Video::DVDRip::Preset->new(
             name           => "auto_big",
             title          => __ "Autoadjust, Big Frame Size, HQ Resize",
             tc_fast_resize => 0,
@@ -629,6 +639,16 @@
         ),
     );
 
+    my $default_presets_lref = $CONFIG_PARAMETER{"default_preset"}->{presets};
+    
+    foreach my $preset ( @presets ) {
+        push @{$default_presets_lref}, 
+            [ $preset->name, $preset->title ];
+    }
+
+    my %config_parameter = %CONFIG_PARAMETER;
+    my @config_order     = @CONFIG_ORDER;
+
     my $self = {
         config  => \%config_parameter,
         order   => \@config_order,
Index: lib/Video/DVDRip/Preset.pm
===================================================================
RCS file: /home/cvsroot/dvdrip/lib/Video/DVDRip/Preset.pm,v
retrieving revision 1.11
diff -u -r1.11 Preset.pm
--- lib/Video/DVDRip/Preset.pm  16 Aug 2006 19:34:38 -0000      1.11
+++ lib/Video/DVDRip/Preset.pm  14 Jan 2008 21:51:08 -0000
@@ -19,6 +19,7 @@
 sub name                       { shift->{name}                         }
 sub title                      { shift->{title}                        }
 sub auto                       { shift->{auto}                         }
+sub auto_clip                  { shift->{auto_clip}                    }
 sub frame_size                 { shift->{frame_size}                   }
 
 sub tc_clip1_top               { shift->{tc_clip1_top}                 }
@@ -36,6 +37,7 @@
 sub set_name                   { shift->{name}                 = $_[1] }
 sub set_title                  { shift->{title}                = $_[1] }
 sub set_auto                   { shift->{auto}                 = $_[1] }
+sub set_auto_clip              { shift->{auto_clip}            = $_[1] }
 sub set_frame_size             { shift->{frame_size}           = $_[1] }
 sub set_tc_clip1_top           { shift->{tc_clip1_top}         = $_[1] }
 sub set_tc_clip1_bottom                { shift->{tc_clip1_bottom}      = $_[1] 
}
@@ -68,12 +70,13 @@
         'tc_clip2_top',  'tc_clip2_bottom',
         'tc_clip2_left', 'tc_clip2_right'
         };
-    my ( $auto, $frame_size ) = @par{ 'auto', 'frame_size' };
+    my ( $auto, $auto_clip, $frame_size ) = @par{ 'auto', 'auto_clip', 
'frame_size' };
 
     my $self = {
         name            => $name,
         title           => $title,
         auto            => $auto,
+        auto_clip       => $auto_clip,
         frame_size      => $frame_size,
         tc_clip1_top    => $tc_clip1_top,
         tc_clip1_bottom => $tc_clip1_bottom,
Index: lib/Video/DVDRip/Title.pm
===================================================================
RCS file: /home/cvsroot/dvdrip/lib/Video/DVDRip/Title.pm,v
retrieving revision 1.180.2.5
diff -u -r1.180.2.5 Title.pm
--- lib/Video/DVDRip/Title.pm   5 Aug 2007 16:59:15 -0000       1.180.2.5
+++ lib/Video/DVDRip/Title.pm   14 Jan 2008 21:51:08 -0000
@@ -680,6 +680,15 @@
     return $self->tc_container eq 'vcd';
 }
 
+sub is_resized {
+    my $self = shift;
+    
+    my $clip_size = $self->preview_label(type => "clip1", size_only => 1);
+    my $zoom_size = $self->preview_label(type => "zoom",  size_only => 1);
+    
+    return $clip_size ne $zoom_size;
+}
+
 sub has_vbr_audio {
     my $self = shift;
 
@@ -940,7 +949,7 @@
 sub preview_label {
     my $self = shift;
     my %par = @_;
-    my ($type, $details) = @par{'type','details'};
+    my ($type, $details, $size_only) = @par{'type','details','size_only'};
 
     my ( $width, $height, $warn_width, $warn_height, $text, $ratio,
         $phys_ratio );
@@ -1022,6 +1031,7 @@
         );
     }
 
+    return "${width}x${height}" if $size_only;
     return $text;
 }
 
@@ -1107,21 +1117,24 @@
 
     $self->set_last_applied_preset( $preset->name );
 
-    if ( $preset->auto ) {
+    if ( $preset->auto_clip ) {
+        $self->auto_adjust_clip_only;
+    }
+    elsif ( $preset->auto ) {
         $self->auto_adjust_clip_zoom(
             frame_size  => $preset->frame_size,
             fast_resize => $preset->tc_fast_resize,
         );
-        return 1;
     }
-
-    my $attributes = $preset->attributes;
-    my $set_method;
-    foreach my $attr ( @{$attributes} ) {
-        $set_method = "set_$attr";
-        $self->$set_method( $preset->$attr() );
+    else {
+        my $attributes = $preset->attributes;
+        my $set_method;
+        foreach my $attr ( @{$attributes} ) {
+            $set_method = "set_$attr";
+            $self->$set_method( $preset->$attr() );
+        }
     }
-
+    
     1;
 }
 
@@ -1236,6 +1249,51 @@
     return ( $clip2_width, $clip2_height, $zoom_ratio );
 }
 
+sub calc_export_par {
+    my $self = shift;
+
+    my $width  = $self->width;
+    my $height = $self->height;
+    
+    my $source_aspect = $width/$height;
+    my $target_aspect = $self->aspect_ratio;
+    my ($w, $h) = split(":", $target_aspect);
+    $target_aspect = $w/$h;
+    
+    my $export_par = sprintf("%d,100", 100 * $target_aspect / $source_aspect);
+
+    return $export_par;
+}
+
+sub auto_adjust_clip_only {
+    my $self = shift;
+
+    $self->set_tc_fast_resize(1);
+
+    my $result = $self->get_zoom_parameters(
+        target_width        => undef,
+        target_height       => undef,
+        fast_resize_align   => 16,
+        result_align        => 16,
+        result_align_clip2  => 1,
+        auto_clip           => 1,
+        use_clip1           => 0,
+    );
+
+    $self->set_tc_zoom_width( undef );
+    $self->set_tc_zoom_height( undef );
+    $self->set_tc_clip1_left( 0 );
+    $self->set_tc_clip1_right( 0 );
+    $self->set_tc_clip1_top( 0 );
+    $self->set_tc_clip1_bottom( 0 );
+    $self->set_tc_clip2_left( $result->{clip2_left} );
+    $self->set_tc_clip2_right( $result->{clip2_right} );
+    $self->set_tc_clip2_top( $result->{clip2_top} );
+    $self->set_tc_clip2_bottom( $result->{clip2_bottom} );
+
+    1;
+}
+
 sub auto_adjust_clip_zoom {
     my $self = shift;
     my %par  = @_;
@@ -2060,7 +2118,7 @@
         $self->set_tc_container('vcd');
     }
 
-    $self->set_preset("auto_medium_fast")
+    $self->set_preset($self->config("default_preset"))
         unless $self->last_applied_preset;
 
     my $subtitle_langs = $self->get_subtitle_languages;
@@ -2476,44 +2534,50 @@
         if $clip2 =~ /^-?\d+,-?\d+,-?\d+,-?\d+$/
         and $clip2 ne '0,0,0,0';
 
-    if ( $self->tc_fast_bisection ) {
-        $command .= " -r 2,2";
-
-    }
-    elsif ( not $self->tc_fast_resize ) {
-        my $zoom = $self->tc_zoom_width . "x" . $self->tc_zoom_height;
-        $command .= " -Z $zoom"
-            if $zoom =~ /^\d+x\d+$/;
-
+    if ( not $self->is_resized ) {
+        my $export_par = $self->calc_export_par;
+        $command .= " --export_par $export_par";
     }
     else {
-        my $multiple_of = 8;
-
-        my ( $width_n, $height_n, $err_div32, $err_shrink_expand )
-            = $self->get_fast_resize_options;
+        if ( $self->tc_fast_bisection ) {
+            $command .= " -r 2,2";
 
-        if ($err_div32) {
-            croak __x(
-                "When using fast resize: Clip1 and Zoom size must be divisible 
by {multiple_of}",
-                multiple_of => $multiple_of
-            );
         }
+        elsif ( not $self->tc_fast_resize ) {
+            my $zoom = $self->tc_zoom_width . "x" . $self->tc_zoom_height;
+            $command .= " -Z $zoom"
+                if $zoom =~ /^\d+x\d+$/;
 
-        if ($err_shrink_expand) {
-            croak __
-                "When using fast resize: Width and height must both shrink or 
expand";
         }
+        else {
+            my $multiple_of = 8;
+
+            my ( $width_n, $height_n, $err_div32, $err_shrink_expand )
+                = $self->get_fast_resize_options;
+
+            if ($err_div32) {
+                croak __x(
+                    "When using fast resize: Clip1 and Zoom size must be 
divisible by {multiple_of}",
+                    multiple_of => $multiple_of
+                );
+            }
+
+            if ($err_shrink_expand) {
+                croak __
+                    "When using fast resize: Width and height must both shrink 
or expand";
+            }
 
-        if ( $width_n * $height_n >= 0 ) {
-            if ( $width_n > 0 or $height_n > 0 ) {
-                $command .= " -X $height_n,$width_n";
-                $command .= ",$multiple_of" if $multiple_of != 32;
-            }
-            elsif ( $width_n < 0 or $height_n < 0 ) {
-                $width_n  = abs($width_n);
-                $height_n = abs($height_n);
-                $command .= " -B $height_n,$width_n";
-                $command .= ",$multiple_of" if $multiple_of != 32;
+            if ( $width_n * $height_n >= 0 ) {
+                if ( $width_n > 0 or $height_n > 0 ) {
+                    $command .= " -X $height_n,$width_n";
+                    $command .= ",$multiple_of" if $multiple_of != 32;
+                }
+                elsif ( $width_n < 0 or $height_n < 0 ) {
+                    $width_n  = abs($width_n);
+                    $height_n = abs($height_n);
+                    $command .= " -B $height_n,$width_n";
+                    $command .= ",$multiple_of" if $multiple_of != 32;
+                }
             }
         }
     }
@@ -4038,7 +4102,7 @@
     croak "msg:" . __ "No subtitle selected" if not $subtitle;
 
     my $clip2_bottom = $self->tc_clip2_bottom;
-    my $zoom_height  = $self->tc_zoom_height;
+    my $zoom_height  = $self->tc_zoom_height || $self->height;
     my $pre_zoom_height
         = $self->height - $self->tc_clip1_top - $self->tc_clip1_bottom;
     my $scale = $pre_zoom_height / $zoom_height;

Attachment: pgpDWtGPAS6ki.pgp
Description: PGP signature

 

Archive powered by MHonArc. Search powered by ht://dig.

[ top ]