I'll have to see how good the Mac port of the commercial skipping portions are.

I've been running my own version of this task as a cron job. I haven't cleaned it up to do anything but exactly what I want it to do, but here it is. There are a few things on my to do list, too

#!/usr/bin/perl use strict; use warnings; use DBM::Deep; use Net::TiVo; my $mak = '...'; my $tivo = Net::TiVo->new( host => '10.0.1.9', mac => $mak, ); my $ua = make_ua(); chdir( "...." ); my $db = DBM::Deep->new( '....' ); for my $folder ( $tivo->folders ) { print "Folder: ", $folder->as_string, "\n"; foreach my $show ( $folder->shows ) { next unless $show->name =~ /..../i; if( exists $db->{ $show->program_id } ) { print "Skipping '" , $show->episode, "'\n"; next; } print show_summary( $show ); fetch_show( $ua, $show ); $db->{ $show->program_id }++; } } sub make_ua { require LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->credentials( '10.0.1.9:443', "TiVo DVR", "tivo", $mak ); $ua->credentials( '10.0.1.9:80', "TiVo DVR", "tivo", $mak ); $ua->cookie_jar( {} ); return $ua; } sub fetch_show { my( $ua, $show ) = @_; my $url = $show->url . "&Format=video/x-tivo-mpeg"; my $file = $show->episode . ".TiVo"; print STDERR "My file is $file\n"; my $start = time; my $response = $ua->get( $url, #":content_cb" => sub { my($d, $r, $p ) = @_; print Dumper( $d +, $r->as_string) }, ":content_file" => $file, ); my $end = time; next unless -e $file; my $diff = $end - $start; print STDERR "Download time was $diff seconds: ", $show->size / $diff, " bytes/s\n"; unless( -s $file != $show->size ) { print STDERR "$file does not have the right size"; unlink $file; return; } tivo_decode( $file ); } sub show_summary { my $show = shift; my $string; $string = "\t" . $show->name . "\n"; $string .= "\t" . $show->url . "\n"; $string .= "\tprogram: " . $show->program_id . "\n"; $string .= "\tepisode: " . $show->episode . "\n"; $string .= "\tseries: ". $show->series_id . "\n"; $string .= "\tsize: ". $show->size . "\n"; $string .= "\n"; return $string; } sub tivo_decode { my $file = shift; ( my $output = $file ) =~ s/\.TiVo$/.mpeg/; unless( my $pid = fork ) { #child print "Exec-ing tivodecode\n"; exec qq|/usr/local/bin/tivodecode -m $mak -o "$output" "$file +"|; die "Could not exec tivodecode!"; } else { #parent return; } }
--
brian d foy <brian@stonehenge.com>
Subscribe to The Perl Review

In reply to Re: Perl app to decrypt and remove commercials from TiVo recordings. by brian_d_foy
in thread Perl app to decrypt and remove commercials from TiVo recordings. by marto

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.