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

切边与Resize计算器

2010-09-21 15:10

程序地址: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
管理猿
帖子: 770
注册时间: 2010-09-19 20:42
联系: 网站

Re: 切边与Resize计算器

2010-09-21 15:11

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

代码: 全选

<?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: 基本没什么技术的话题,欢迎没事看看消遣。
&#9658; 显示内容 平庸的rip
&#9658; 显示内容 “不知道”的五大理由

回到 “理论讨论 / Theoratical discussion”