http://moviebarcode.tumblr.com/
header中的图片就是用到上面的方法,写了段代码生成的EVA破剧场版的moviebarcode,效果还不错,不过方法和网站中所说的有点区别,校正一下。
整理完毕,效果有所提高。主要方法如下,使用mediainfo读取视频文件信息,主要读长宽和视频时长。然后使用mplayer截取图片,然后把图片压到1px宽,然后全叠起来。代码如下:
#!/usr/bin/perl use strict; use warnings; use Image::Magick; my $movie_name = shift @ARGV; my @media_info = mediainfo $movie_name; my ($hours, $minus, $secs, $height, $width); my $image_width = 1000; my $image_height = 288; foreach (@media_info) { if(/Duration\s+:\s?(?:(\d+)h)?\s?(?:(\d+)mn)?\s?(?:(\d+)s)?/) { $hours = $1 ? $1 : 0; $minus = $2 ? $2 : 0; $secs = $3 ? $3 : 0; } if(/^Width\s+:\s(\d?\s?\d+)\spixels/) { $width = $1; $width =~ s/\s//g; } if(/^Height\s+:\s(\d?\s?\d+)\spixels/) { $height = $1; $height =~ s/\s//g; } } $secs = $hours * 3600 + $minus * 60 + $secs; my $per_secs = $secs / $width; my $image = new Image::Magick; my $size = $width."x".$height; $image->Set(size => $size); $image->Read('NULL:blank'); my $finish_percent = 0; print "finish:$finish_percent%\n"; foreach (1..$width) { my $sec = $per_secs * $_; my $cur_per = int($_/$width*100); mplayer -ss $sec -noframedrop -nosound -vo png -frames 1 $movie_name 2>/dev/null; my $img = new Image::Magick; $img->Read("00000001.png"); $img->Scale(width => 1, height => $height); $image->Composite(image => $img, compose => 'Over', x => $_, y => 0); if($cur_per > $finish_percent) { $finish_percent = $cur_per; print "finish:$finish_percent%\n"; } } $image->Write("pic.png");
这是确切信息我要找的,谢谢! Arron