800 发表于 2006-5-12 18:56:22

制作预览式抓图的脚本

原来的贴子看这里:

http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=154480&highlight=


直接使用mplayer的filter会有两个问题:一是抓下来的头两到三张图有可能是一模一样的;二是部分文件可能会抓出N张图来,需要手动^C。
针对第一个问题,我想干脆就不要用mplayer的filter了,多抓几张,掐头去尾再用imagemagick来拼。
针对第二个问题,有可能需要用到线程处理。启动一个子进程跑mplayer抓图,然后不停检查抓够了图没有,如果抓够了且mplayer还不退出就把mplayer的进程杀掉。

为此我写了一个初步的ruby脚本,尝试解决第一个问题。就我的测试来看问题不大,虽然比直接用mplayer的filter慢了很多,但总是解决了一部分问题。但我测试中发现,mplayer除了头几张有可能抓出一样的图,影片中间也有可能,希望大家帮忙测试一下。
使用方面把以下代码保存为一个文件如filmstrip,并且chmod +x filmstrip,然后直接filmstrip aaa.avi就可以了。需要安装得有mplayer和imagemagick。用的时候小心点,因为代码最后删除了当前目录下的所有png文件。不太搞得清楚状况的朋友还是慎用的好。

#!/usr/bin/ruby

scale_width = 150
tile_x = 5
tile_y = 6

fn = ARGV[0]
info = `mplayer -quiet -vo null -nosound -frames 0 -identify \"#{fn}\"`

info =~ /ID_LENGTH=(\d+)/
sstep = Integer($~[1].to_i / (tile_x*tile_y + 3))

system("mplayer -quiet -vo png:z=9 -nosound -sstep #{sstep} \"#{fn}\"")

'00000003'.upto(sprintf('%08d',tile_x*tile_y + 2)) do |n|
system("convert -resize #{scale_width} #{n}.png #{n}.png")
end

n = 3
cmd = ''
tile_y.times do |y|
fs = ''
tile_x.times do |x|
    fs += sprintf('%08d',n) + '.png '
    n += 1
end
system("convert -border 2x4 -bordercolor black #{fs} +append y#{y}.png")
puts("convert -border 2x4 -bordercolor black #{fs} +append y#{y}.png")
cmd += "y#{y}.png "
end
system("convert -border 2x4 -bordercolor black #{cmd} -append \"#{File.basename(fn)}.jpg\"")
puts("convert -border 2x4 -bordercolor black #{cmd} -append \"#{File.basename(fn)}.jpg\"")
system("rm *.png")

firefoxxp 发表于 2006-8-5 12:48:34

可以看看效果吗`?~~?

800 发表于 2006-8-7 19:13:57

你自己试试不就知道了,就一个脚本而已。
已经改用xine写了另外一个,这个不打算要了。
页: [1]
查看完整版本: 制作预览式抓图的脚本