头像
dgwxx
管理猿
帖子: 771
注册时间: 2010-09-19 20:42
联系: 网站

切边与Resize计算器

程序地址:http://www.dgwxx.com/cnr/index.php

本程序是根据“可曾记得爱”写的《DVDRIP制作中Crop&Resize实际操作步骤低理论高精度版》这篇文章写得穷举式计算器。使用前请先阅读他的文章,以便更好地理解本计算器的使用。

使用方法:
1. 首先选择片源制式和屏幕比例。请注意,letter box格式的16:9片子必须按照4:3格式来处理。等到切边、Resize完成之后,在切去画面上下多余的黑边。
2.目标横向/纵向分辨率为最终需要输出的分辨率。
3.左右/上下最少切边共为总共需要切去多少像素才能完全将黑边/卷边/暗边切掉。
4.切边搜寻范围设定穷举的范围。例如,我想让程序计算从切5像素到25像素的全部AE值,那么就在这里设定20。注意,这个之需要根据自己的需要进行配置。一味追求过高的搜寻范围会使计算缓慢、结果过多,不便于筛选。另外,切掉数十、上百像素的画面还会有意义么
5.容忍最大AE设定你能接受的最大AE绝对值。比如我最多能接受2%的AE,那么就在这里填写0.02。
6.输出过滤选择输出结果是否包含奇数切边值。
7.项目前标有“*”的为必选项目,没有标“*”的为可选项目。必选项目必须正确设定,可选项目可以留空,留空程序会按照默认值设定。

结果使用方法:
本程序输出的结果分为两列。左列为按照设定计算出的全部匹配结果,分为横向共切、纵向共切和AE三个项目。左列结果除非数量很少,否则不便单独使用。
因此,程序设置了右侧栏。右侧栏按照AE从小到大的顺序列出全部AE。找到合适的AE之后,只需要选中、用IE在文中搜索,即可找到相应的切边方案。

注意事项:
1.结果数量为切边搜寻范围的平方。比如设定搜寻范围20,那么将会有400个结果产生。所以请慎重设定搜寻范围。
2.本计算器只适用于单次切边、单次Resize,AE完全为0的情况不会很多。想寻求AE=0的711切边方案的朋友可以去找找SSWROOM的帖子。
3.本方案与711方案应为互相补充的关系。尤其是一部分老片当切到711的时候不能完全切除黑边/卷边/暗边的时候,可以考虑使用本方案。另外,当片子上下有黑边需要切除的时候,711方案同样不适用,也可以考虑本方案(有的人喜欢保留上下的黑边 :) 如果希望保留上下黑边的话,可以使用711方案)。

因为是第一次放出,所以肯定会有一些错误、缺点,到时候请大家帮忙指出,我会及时修正。谢谢!

因为不会VB或者C,所以没办法写windows下的应用程序。本程序的主要源代码在下面贴出,如果有谁会写,请尽量拿去用 :) 其实也没什么难的,只是一个嵌套循环而已。
日常推 @dgwxx: 基本没什么技术的话题,欢迎没事看看消遣。
► 显示剧情透露 平庸的rip
► 显示剧情透露 “不知道”的五大理由
头像
dgwxx
管理猿
帖子: 771
注册时间: 2010-09-19 20:42
联系: 网站

Re: 切边与Resize计算器

下面是程序的主要源代码,重要变量、过程上我都加了注释。

代码: 全选

<?php
	elseif ($action == 1):

		$mode = $_POST['mode']; //制式,1为NTSC,2为PAL
	$ar = $_POST['ar']; //屏幕比例,1为16:9,2为4:3
	$a = $_POST['h_rev']; //目标横向分辨率
	$b = $_POST['v_rev']; //目标纵向分辨率
	$e = $_POST['h_crop']; //水平方向最小切边
	$f = $_POST['v_crop']; //垂直方向最小切边
	$i = $_POST['search_range']; //切边搜寻范围
	$j = $_POST['max_ae']; //最大可接受比例失真
	$output = $_POST['output']; //输出过滤,1为输出全部结果,2为只输出偶数切边方案
	$c = 720; //横向输入分辨率,因为NTSC和PAL都是720,所以就在这里设定了
	
	// 输入限制
	if (!$a || !$b) die("输出分辨率为必选参数,必须设定。");
	if ($i > 25) die("搜寻范围过大,请设置在25以下。");
	// 默认值
	if (!$e) $e = 0;
	if (!$f) $f = 0;
	if (!$i) $i = 10;
	if (!$j) $j = 1;
	// 奇偶数判断
	function isodd($num)
	{
		$num = explode(".", $num / 2);
		if ($num[1] != "") {
			return true;
		} else {
			return false;
		} 
	} 
	// 判断纵向输入分辨率,下同
	if ($mode == 1) $d = 480;
	if ($mode == 2) $d = 576;
	// 判断比例因数,16:9为0.75,4:3为1
	if ($ar == 1) $factor2 = 0.75;
	if ($ar == 2) $factor2 = 1;
	// 计算过程开始,下面不要改动!!
	echo "
<p align=\"center\">结果输出</p>
<table width=\"100%\" border=\"1\" align=\"center\">
  <tr>
    <td width=\"50%\"><div align=\"center\">结果输出</div></td>
    <td><div align=\"center\">AE从小到大排列</div></td>
  </tr>
  <tr>
    <td align=\"center\" valign=\"top\">
";
	// 计算因数b,公式为[变形后的宽/变形后的高]
	$bb = $a / $b;

	for($k = $e;$k < $e + $i;$k++) {
		for($l = $f;$l < $f + $i;$l++) {
			// NTSC计算公式
			if ($mode == 1) $aa = (($c - $k) * 72 / 79) / (($d - $l) * $factor2); 
			// PAL计算公式
			if ($mode == 2) $aa = (($c - $k) * 128 / 117) / (($d - $l) * $factor2);

			$cc = $aa / $bb-1;
			$dd = abs($cc);
			if ($output == 1 && $dd < $j) {
				// 显示全部结果
				echo "横共切:" . $k . ",纵共切:" . $l . ",AE:" . $cc . "<br>";
				$out[] = $dd;
			} elseif ($output == 2 && $dd < $j) {
				if (!isodd($k) && !isodd($l)) {
					// 只显示偶数方案
					echo "横共切:" . $k . ",纵共切:" . $l . ",AE:" . $cc . "<br>";
					$out[] = $dd;
				} 
			} 
		} 
	} 
	echo "
</td>
    <td width=\"50%\" align=\"center\" valign=\"top\">
";
	// 对AE列表进行排序
	sort($out);
	// 遍历数组
	for($o = 0;$o < count($out);$o++) {
		echo $out[$o] . "<br>";
	} 
	echo "
</td>
  </tr>
</table>
";
endif;

?>
日常推 @dgwxx: 基本没什么技术的话题,欢迎没事看看消遣。
► 显示剧情透露 平庸的rip
► 显示剧情透露 “不知道”的五大理由

回到 “理论讨论 / Theoratical discussion”