rendered paste body#!/usr/bin/perl -w
use strict;
use File::Find;
use File::Basename;
my $startdir = $ARGV[0];
my $filecounter=1;
my $htmlfile="thumb-index";
my $curdir;
my $curfile;
my $dircounter=1;
my @directoryfiles;
my @directories;
my %tree;
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
# (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -d _ && push @directories, $File::Find::name;
# (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f _ && push @candidates, $File::Find::name;
if(lstat($_) && -f _) {
my $filename = $File::Find::name;
my $candidatefile=dirsubtract($filename, $startdir);
my $candidatedir=&File::Basename::dirname($candidatefile);
push @{ $tree{$candidatedir}{files} },$candidatefile;
if (!$tree{$candidatedir}{dirfile}) { $tree{$candidatedir}{dirfile}=$htmlfile.$dircounter.".html";$dircounter++;}
}
}
sub dirsubtract {
my ($a, $b) = @_;
my @alist = split /\//,$a ;
my @blist = split /\//,$b ;
while (($#blist >=0) && ($alist[0] eq $blist[0])) { shift @alist; shift @blist;};
return join( "/", @alist);
}
sub makethumb {
my ($moviefile, $thumbnailfile) = @_;
my $framefile;
my @runcommand;
my @mplayercommand=("/usr/bin/mplayer","-vo", "png", "-nosound", "-ss", "0:29", "-frames", "6", "-osdlevel", "0","-z","5", "-x", "320","-y","200");
my @convertcommand=("/usr/bin/convert","-resize","320x200");
$framefile="00000005.png";
@runcommand=(@mplayercommand,$moviefile);
system(@runcommand);
if ( (stat($framefile))[7] > 0 ) {
@runcommand=(@convertcommand,$framefile,$thumbnailfile);
system(@runcommand);
unlink($framefile);
# rename "$framefile","$thumbnailfile";
return 1;
} else { return 0 };
}
sub makethumbtable {
my ($topdir,$currentdir,@inputfiles) = @_;
my $thumbfile;
my $colcounter;
my $tablecols=3;
my $filename;
my $basename;
print HTML "<TABLE BORDER=0>\n";
print HTML "<TR><TD>";
$colcounter=1;
foreach $filename (@inputfiles) {
$thumbfile="pix-$filecounter.png";
$basename = File::Basename::basename($filename);
if(&makethumb($topdir.$filename,$thumbfile)){
print HTML "$basename<BR><IMG TITLE=\"$filename\" SRC=\"$thumbfile\"></TD>";
$filecounter++;
if ($colcounter==$tablecols){print HTML "</TR>\n<TR><TD>";$colcounter=1;} else {print HTML "<TD>";$colcounter++;};
} else {
print HTML "$basename</TD>";
if ($colcounter==$tablecols){print HTML "</TR>\n<TR><TD>";$colcounter=1;} else {print HTML "<TD>";$colcounter++;};
};
}
print HTML "</TD></TR></TABLE>";
}
find \&wanted, ($startdir);
foreach $curdir (keys %tree) {
#print $curdir ."\n";
#print $tree{$curdir}{dirfile};
#print "\n";
open HTML,">".$tree{$curdir}{dirfile};
print HTML "<html><head><title>Thumber for $startdir$curdir</title></head><body>\n";
print HTML "<H1>$startdir$curdir</H1>\n";
print HTML "<TABLE BORDER=0 VALIGN=TOP><TR><TD>\n";
foreach $curfile (sort keys %tree) {
print HTML "<A HREF=\"$tree{$curfile}{dirfile}\">$curfile</A><BR>\n";
};
print HTML "</TD><TD>\n";
@directoryfiles=@{ $tree{$curdir}{files} };
#print "\n\n @directoryfiles\n\n";
makethumbtable($startdir, "hmm", @directoryfiles);
print HTML "</TD></TR></TABLE>";
print HTML "</body></html>";
close HTML;
#print @directories;print "\n";
}