use IO::Select;
use Data::Dump qw(dump);
use File::Slurp;
-use YAML;
+use YAML::Syck;
use JSON;
use Graphics::Magick;
use Time::HiRes qw(time);
use File::Path qw(rmtree);
+use Getopt::Long;
use lib 'lib';
use HTML5TV::Slides;
my $debug = $ENV{DEBUG} || 0;
my $generate = $ENV{GENERATE} || 0;
+my $video_url; # override mplayer movie url
+
+GetOptions(
+ 'video-url=s' => \$video_url,
+) || die $!;
+
my $movie = shift @ARGV;
sub base_dir { $1 if $_[0] =~ m{^(.+)/[^/]+$} }
unlink $movie if -e $movie;
symlink base_name($movie_master), $movie;
warn "symlink video.ogv -> $movie_master";
+} elsif ( $video_url ) {
+ warn "video_url: $video_url\n";
} else {
die "Usage: $0 media/conference-Title_of_talk[/video.ogv'\n";
}
sub load_movie {
warn "$movie ", -s $movie, " bytes $edl\n";
- print $to_mplayer qq|loadfile "$movie"\n|;
+ my $url = $video_url || $movie;
+ warn "loadfile $url\n";
+ print $to_mplayer qq|loadfile "$url"\n|;
load_subtitles;
}
mkdir $path;
mkdir $hires;
- my $path = "$media_dir/presentation.pdf";
- $path = $media_dir . '/' . readlink($path) if -l $path;
+ my $nr = 1;
+
+ foreach my $path ( glob "$media_dir/presentation*.pdf" ) {
+ $path = $media_dir . '/' . readlink($path) if -l $path;
- if ( -e $path ) {
warn "render pdf slides from $path\n";
- system "pdftoppm -png -r 100 $path $hires/p";
+ system "pdftoppm -png -r 100 '$path' $hires/p.$nr";
+
+ $nr++;
+ }
+
+ my $slide = 1;
+
+ foreach my $path ( sort glob "$hires/p.*" ) {
+ rename $path, sprintf("$hires/p%03d.png", $slide++);
}
}
if ( @frames ) {
warn "create slides from video frames";
- rmdir $_ foreach glob "$media_dir/s/[124]";
+# rmdir $_ foreach glob "$media_dir/s/[124]";
oggThumb $movie, "$hires/.f%.jpg", map { $_->[0] } @frames;
sub save_subtitles {
+ DumpFile "$subtitles.yaml", sort { $a->[0] <=> $b->[0] } @subtitles if @subtitles;
+
html5tv || return;
my $nr = 0;
warn $srt;
write_file $subtitles, $srt;
- YAML::DumpFile "$subtitles.yaml", sort { $a->[0] <=> $b->[0] } @subtitles;
push @to_mplayer
, "sub_remove\n"
warn "no subtitles $subtitles to load\n";
return;
}
- @subtitles = YAML::LoadFile "$subtitles.yaml";
+ @subtitles = LoadFile "$subtitles.yaml";
warn "subtitles ", dump @subtitles;
annotate_subtitles;
save_subtitles;
my @slide_titles;
-if ( -e "$media_dir/presentation.txt" ) {
- my $slides = read_file "$media_dir/presentation.txt";
+foreach my $path ( sort glob "$media_dir/presentation*.pdf" ) {
+
+ my $txt = $path;
+ $txt =~ s/pdf$/txt/;
+
+ system "pdftotext '$path'" unless -e $txt;
+
+ my $slides = read_file $txt;
my @s = ( map { [ split(/[\n\r]+/, $_) ] } split(/\f/, $slides) );
my $slide_line = 0;
push @to_mplayer, "get_property $_\n" foreach grep { ! $prop->{$_} } @mplayer_prop;
my $t = time;
-my $line;
push @to_mplayer, 'pause' if $generate;
my $dt = time - $t;
if ( abs($dt) > 0.2 ) {
#warn "dt $dt\n";
- $slides->show( $pos, $prop->{length}, @subtitles ) if $prop->{length};
+ $slides->show( $pos, $prop->{length}, @subtitles ) if $prop->{length} && ! $ENV{GENERATE};
$t = time;
}