ACFUN上经常有一些考验暂停党的图集视频,内含各种哔哔和◯◯,但是对于反射弧比较长,暂停苦手的人们来说,只得反复折腾得肉牛满面。而我这种暂停四级考试完全不合格的人更是鸭梨很大。于是想到求助perl, imgseekmplayer,把视频中的所有图片提取出来。思路很简单,就是首先用mplayer将视频内容转为一帧一帧的png或jpg图片(视频分帧),再用Image::Seek来通过图片内容的相似度比较去除重复图片。写了一段简单的perl代码(wapauser.pl):

#!/usr/bin/perl

use strict;
use constant SCORE => -30;
use File::Temp qw(tempfile tempdir);
use Image::Imlib2;
use Image::Seek qw(loaddb cleardb add_image query_id remove_id);
use POSIX ':sys_wait_h';

our ($id, $db, $dir);

sub init {
	$id = 0;
	$dir = tempdir('wapauserXXXX', CLEANUP => 1, DIR => '.');
	$db = tempfile('wapauserXXXX', DIE => $dir, SUFFIX => 'db');
	loaddb($db);
	cleardb();
}

sub gao {
	my $file = shift;
	my $img = Image::Imlib2->load($file);
	add_image($img, $id);
	my @result = query_id($id, 2);
	if (!$id || $result[1]->[1] > SCORE) {
		++$id;
		link $file, sprintf './output/%04d.png', $id;	# or `cp`
	} else {
		remove_id($id);	# important
	}
}

sub wapauser {
	my ($file, @args) = @_;
	init();
	if (my $pid = fork) {
		wait;
		opendir(my $dh, $dir);
		my @pngs = grep {/\.png/} readdir($dh);
		closedir($dh);
		for my $png (sort @pngs) {
			gao("$dir/$png");
		}
	} else {
		chomp(my $path = `which mplayer`);
		unshift @args, '-vo', "png:outdir=$dir", '-nosound';
		print STDERR "path = $path\nfile = $file\n", join("  ", @args), "\n";
		close STDOUT;
		close STDERR;
		exec $path, $file, @args;
	}
}

wapauser(@ARGV);

拿某个长度4min的flv视频测试了一下,第一步和第二部分别花了4min的时间,最后从6000多帧中提取了70多张不同的图片。实验表明,SCORE的阀值大概取到-25~-30比较合适,具体的值还是要反复尝试。大多数相同的图结果都在-35以上,但也有可能只有-31。不同的图通常区别都在-15以内,但是只有一些小区别的几张图(你们懂的)之间的区别可能有负的二十多。总的来说还有以下问题:

  • 视频分帧结束后才开始图片去重,实际上两步可以同时进行,分步的结果就是得先消耗很大的临时空间来存储成千上万帧的图片,上面的测试就吃掉了4G的硬盘;
  • 生成的图片是非常大png,这也是为什么会吃掉那么多磁盘的原因,当然这可以通过设置参数z=<0-9>改成压缩较高的png,或者用参数-vo jpeg,并设置参数quality=<0-100>改成较小的jpg;
  • 这种方法只能处理完全静态的图集视频,对其它视频要么无能为力,要么作用很有限;
  • 生成的图片质量取决的视频质量,所有除非是高清视频,否则图片质量不会太好;
  • SCORE阀值的设置……凡是涉及到阀值的问题总是很头疼的,稍微高点低点,效果可能就差很多,这就像调试蓝田的热水一般(典故见附件)。

附件:我刚进浙大不久时的一篇文章《走进浙大—揭开蓝田浴室之谜》,想起来当时我们一看见校医院的救护车从蓝田方向开来就会说“又有人洗澡被烫伤了”……

发信人: botanyh (botany), 信区: Joke
标 题: 走进浙大—揭开蓝田浴室之谜ZZ
发信站: 缥缈水云间 (Mon Oct 30 11:33:02 2006), 站内
Continue reading “暂停党什么的最讨厌了” »

Comments 8 Comments »

ZOJ Monthly, July 2009

[F]ZOJ3227 Perfect Cherry Blossom 0.00% (0/13)
[H]ZOJ3229 Shoot the Bullet 12.12% (4/33)

ZOJ Monthly, November 2009

[E]ZOJ3263 Immaterial and Missing Power 0.00% (0/8)

标题是照着vls的《我出过的题目》取的,确切的说是我出过的以東方Project为背景的,已经公开的题目。因为今年Summer2010暑期集训新手上路选拔和七月校队选拔中,我又出了11道东方系列的题目,以在这个月办好一场东方专场ZOJ月赛(详情:acm_x_touhou),用把力,把去年暑假的yy变成现实。去年出的这三题当然离办一场Monthly还有无限远,不过今年提前准备,再加上vout和猛犸的强力支持,现在已经有了充足的各种难度,各种类型的东方系列备选题目能够支援ZOJ八月的月赛了。届时希望广大acmer和touhou fans捧场 :D

ZOJ3229 Shoot the Bullet (文花帖)

downloadsource code (ZOJ3229.cpp) [FlowNetwork, 上下界最大流]

在未来的n天中,文文要强拍幻想乡的mm们为《文々。新闻》增加8g素材。但是每天她只能对某些mm拍照,并且所拍照片数不能过多或过少,每天总的照相数也有上限,而n天内她所拍某个mm的相片也有最低要求。在满足所有这些要求的前提下,希望最后拍的照要尽量多,求任意一个最优方案。

很裸的上下界最大流,构图算法都没什么需要多说的了,有模块就直接秒杀了。ZOJ上就这题的AC数到了三位数,不知道有没有人用来测模块。

ZOJ3227 Perfect Cherry Blossom (妖々夢)

downloadsource code (ZOJ3227.cpp) [DP, SegmentTree]

 暖和的季节结束了,边境被银白色的幻想所封闭。
 人们在这不知道什么时候结束的漫长冬天中,也变得安分起来了。
 Continue reading “我出过的东方系列题目”  »

Comments 5 Comments »


Andrew Stankevich’s Contest #6
ZOJ2595 Ackerman’s Function 14.93% (99/663)
ZOJ2596 The Minimal Angle 11.07% (65/587)
ZOJ2597 Yellow Code 38.21% (146/382)
ZOJ2598 Yet Another Digit 23.79% (138/580)
ZOJ2599 Graduated Lexicographical Ordering 20.99% (80/381)
ZOJ2600 GSM 20.00% (55/275)
ZOJ2601 Warehouse Keeper 14.69% (117/796)
ZOJ2602 Don’t Go Left 24.13% (49/203)
ZOJ2603 Railroad Sort 46.76% (123/263)

稿好久,趁着集训间隙前来填坑。大妈题就是好啊就是好,于是顺便广告一下,8月14日,ZOJ将办一场Andrew Stankevich’s Contest, Warmup的Practice,用的题目是Andrew Stankevich’s Contest #11,年代有点久远,不过对绝大多数人来讲应该应该是一套非常不错的新题,去年我们也拿来组队训练过,欢迎捧场。

ZOJ2595 Ackerman’s Function

downloadsource code (ZOJ2595.cpp) [recursion, number theory, Euler's theorem]

求Ackerman函数A(n, m)模t的值。

n\m 1 2 3 4 5
1 2 4 6 8 10 … (2m) 2 \times m
2 2 4 8 16 32 … (2m) 2 \uparrow m
3 2 4 16 2222 22222 … (m2) 2 \uparrow\uparrow m
4 2 4 \begin{matrix}\underbrace{2^{2^{\cdot^{\cdot^{\cdot^2}}}}} \\ 65536 \end{matrix} overflow .. 2 \uparrow\uparrow\uparrow m
5 2 4 overflow .. 2 \uparrow\uparrow\uparrow\uparrow m ..

上表中用到了Knuth’s up-arrow notation。从上面的表中可以看出n=1, n=2, m=1, m=2的时候问题都很简单,而事实上n和m只要稍稍大一点,这个数就大得不得了,而它关于t的余数就是定值。证明就是利用欧拉定理,可以参考在Andrew Stankevich’s Contest #8解题报告中,ZOJ2674 Strange Limit这题的解题报告。对于n=3&&m<32和n==4&&m==3的时候,结果未必收敛到了ZOJ2674中定义的那个极限,所以也要特殊处理,方法类似求那个极限的递归。

ZOJ2596 The Minimal Angle

Continue reading “Andrew Stankevich’s Contest #6解题报告” »

Comments 3 Comments »

由于原定明天的 Contest 17 by Group S 因题数不足取消了,随着的今天 Contest 16 by CC98 的结束,今年7月的暑期集训也顺利结束了。整个7月都同asmn借宿在vout寝室,三个人每天一同早起去218参加集训,如果谁遇到自己组出题,可能就得彻夜不归,留在218验题了。整个月一共4轮16场比赛下来,很辛苦,也很欢乐。

4号的火车回家,10天后再回到学校的时候,就要组好校队,开始分组训练了,似乎 Regional 前能够训练时间也很紧张了。今年集训参加的12场比赛,在 Contest 3 by BoMb 排在第二,其余都是第一,其中8场有题数优势,最后两个rating都是360+,不知道理论上rating最大能升到多少-,-

    最后的Ranklist After Round 4 (官方山寨版) :

  • 算罚时

        Ranklist After Round 4
        Rank ID               Rating
        --------------------------------
        1    anotherpeg       368.293909
        2    dd_engi          320.433879
        3    moondy           318.681716
        4    t__nt            316.503848
        5    navi             306.962851
        6    oldjunyi         297.957195
        7    asmn             294.495900
        8    Fanazhe          230.525902
        9    czy              228.785346
        10   sxstar           211.344396
    	11   quark            201.799062
    	...
    
  • 不算罚时

    	Ranklist After Round 4
        Rank ID               Rating
        --------------------------------
        1    anotherpeg       363.515919
        2    dd_engi          316.707688
        3    t__nt            315.771751
        4    moondy           312.302907
        5    asmn             298.339357
        6    oldjunyi         293.780154
        7    navi             287.420962
        8    Fanazhe          231.832573
        9    czy              230.991767
        10   sxstar           200.022544
    	...
    

组队的事情还很头痛,几天前就开始拿不定主意了,回家好好考虑一下吧。

晚上集训队集体到王子酒楼fb,美中不足的是彩票哥没能赶来,momo彩票哥。

(席间聊到保研直博)
灿哥:现在直博很难了……
衆人:直博很容易啊,想直博就直博
灿哥:……毕业很难
衆人:(同情地看着王博)……

最后贴一下今天最新更新的Rank,仰慕帖数超过其它三组总和,甚至超越了Summer 2010的Doraemon。不过四个组里我们ACFun的主题数是最多的,哈哈。

Summer Camp 2010 222 Topics 4744 Posts
ACFun 110 Topics 1838 Posts
BoMb 67 Topics 1113 Posts
CC98 45 Topics 333 Posts
Doraemon 77 Topics 5709 Posts

Comments 7 Comments »

通宵验题,结果还是各种悲剧。同navi和dd一起夜宵归后,发现满打满算只有五道题,于是只好临时yy一个idea,出了个以东方为背景的图论题,顺便补了一下目前预定中的Touhou-specific ZOJ Monthly还没有图论题的空白。出好题已经是早饭时间了,于是干脆和navi走到食堂吃了个早饭,顺便到银行取了个钱,这几天荷包空空,四处欠债。

hangzhou-sanming

回到218,离比赛还有1个小时,实在扛不牢,躺下睡了。比赛开始的时候醒来,拿到了范叔替我买的回家火车票,范叔是好人(不过学生证好像忘记还我了……)。然后继续睡,比赛过了90分钟后,被navi叫醒,回答Clarification,结果悲剧的发现全场只有三个AC,其中两个是我临时出的那题。虽然题目有点小自然,没有水题,不过主要原因似乎是集体跳错坑了……最后ranklist惨不忍睹 :oops: 我错了

下午困了,所以不打算呆在218,回了vout的寝室,打开电脑后悲剧的发现201卡过期了。无奈的通过范叔在Summer2010版上发贴求空网卡。首先不管为什么,感谢郭嘉;然后感谢给了我经常求空网卡机会的,正在跑步奔向世界一流大学的三墩大学;最后还是要感谢提供空网卡的frozen童鞋和yaac童鞋(顺带感谢上回在编程答疑求空网卡的时候,慷慨应求的小tp童鞋)。无力去羡慕那些有免费公网或是廉价高速公网的学校,但连接入校内的4M局域网都得花钱买容易过期的201卡的,恐怕只有我生活四年的紫金港了。

Comments 10 Comments »