commit:dc082919abf26d87045aea84855ecd84cccd9c4b
author:Chip Black
committer:Chip Black
date:Tue May 19 18:10:58 2009 -0500
parents:
Initial commit
diff --git a/youtube-subrip b/youtube-subrip
line changes: +47/-0
index 0000000..f73c48d
--- /dev/null
+++ b/youtube-subrip
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+use LWP::Simple;
+use XML::Twig;
+use strict;
+
+my $id = shift;
+
+my $xml = get("http://video.google.com/timedtext?hl=en&v=$id&type=track&name=&lang=en");
+
+my $t = XML::Twig->new(
+	twig_roots => { 'text' => \&convert_text }
+);
+
+$t->parse($xml);
+
+my $sub_count = 0;
+
+sub ent_decode {
+	local $_ = shift;
+	s/&#(\d+);/chr($1)/ge;
+	return $_;
+}
+
+sub timecode {
+	my $n = shift;
+	my $in = int($n);
+	my $frac = ($n - $in) * 1000;
+	my $s = $in % 60;
+	my $m = int($in / 60) % 60;
+	my $h = int($in / 3600);
+	return sprintf("%02d:%02d:%02d,%03d", $h, $m, $s, $frac);
+}
+
+sub convert_text {
+	my ($t, $elt) = @_;
+	my $start = $elt->att('start');
+	my $end = $elt->att('start') + $elt->att('dur');
+	
+	$sub_count++;
+
+	print "$sub_count\n";
+	print timecode($start), ' --> ', timecode($end), "\n";
+	print ent_decode($elt->first_child_text);
+	print "\n\n";
+
+	$elt->purge();
+}