#!/usr/bin/perl -w # # Given a video file as argument, generate a "poster" of screen shots from the # video. Assumes the video has a valid index and I can seek in it. my $newpath=`dirname $0`; chomp($newpath); $newpath=`$newpath/echo-path`; chomp($newpath); $ENV{'PATH'}=$newpath; my $vidfile = $ARGV[0]; my $poster = $ARGV[1]; my $vidwidth; my $vidheight; my $vidsecs; my $idh; open($idh, '-|', "mplayer -frames 0 -identify -vo null -ao null $vidfile 2>/dev/null"); while (<$idh>) { if (/^ID_VIDEO_WIDTH=(\d+)$/) { $vidwidth = $1; } elsif (/^ID_VIDEO_HEIGHT=(\d+)$/) { $vidheight = $1; } elsif (/^ID_LENGTH=(\d+\.\d+)$/) { $vidsecs=$1; } } my $incsec = $vidsecs/17.0; my $ss = $incsec; my $i; my $montage="montage"; for ($i = 0; $i < 16; ++$i) { my $fs = sprintf("%04.6f",$ss); system("mplayer -nosound -ss $fs -frames 1 -vo png:z=1:prefix=mptmp $vidfile"); $fs = sprintf("%02d",$i); system("convert mptmp00000001.png -resize 25\% sstmp$fs.png"); $montage .= " sstmp$fs.png"; unlink("mptmp00000001.png"); $ss += $incsec; } my $qh = int($vidheight / 4); my $qw = int($vidwidth / 4); $montage .= " -tile 4x4 -geometry ${qw}x${qh}+0+0 $poster"; system($montage); system("rm -f mptmp*.png sstmp*.png");