梅麻吕 MP_文件简易转换工具
昨天 尝试了一下 杉本女医の淫乱痴療,很蛋疼,不能直接用播放器播放,点得都手酸了,而且有点隐藏剧情得loop个5-10遍才能播放。于是乎在新年之际,搞了个这个小工具来转换,据贴吧@kakurukia说可以此方法可以用于Intou游戏Ω(前编)
只能说是里面大部分,个别的识别的头不太一样,下面会在手工中贴出来,不过再之前是是否是如此的文件结构,还是大家自己去尝试下吧。
原理:
梅麻吕的第十弹不能直接用播放器播放,影像文件为后缀为“mp”的文件。实际是格式是MPEG-PS的mpg文件,但是梅麻吕把文件分为了2部分(以下假设为A和B),原来mpg文件顺序为AB,但是mp的文件顺序却是BA。所以我们只要将顺序调转回来就能直接用播放器放。
手工方式:
- 工具:WinHex
搜索 000001B9000001BA剪切文件头到000001B9这一块,粘贴到文件末尾
另存为.mpg文件,即可直接播放
000001B9为mpg结尾
000001BA为mpg开头
自动小软件
为了欢度新年,我编了个小软件来转换,大家可以尝试。不保证所以版本都能行。
需要.net framework 2.0
http://dl.dbank.com/c058aaf773
操作方法
将Movie文件夹下的”.mp_”全选,直接全部拖到此程序图标上面即可。
mpg文件同样生成在Movie文件夹下。
已经发表在百度贴吧里面了:http://tieba.baidu.com/f?kz=966651885
代码
同时正因为是新年所以把源码也一并附上,有兴趣的一起来研究( 注释掉的判断0xFF的循环有时候会出错 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | private static void ConvertMPG(String Input) { FileStream MP_ = File.Open(Input, FileMode.Open); int ll=Input.Length; String Output = Input; Output=Output.Replace("mp_", "mpg"); long length = MP_.Length; //偏移计数器 int round = 0; long count=0; //MPG开始结尾标志 int[] SearchHex = new int[] { 0x00, 0x00, 0x01, 0xB9, 0x00, 0x00, 0x01, 0xBA }; //MPGStart = new int[] { 0x00, 0x00, 0x01, 0xBA }, // MPGEND = new int[] { 0x00, 0x00, 0x01, 0xBA }; int tp; while(round<2) { if (count == length) { round++; SearchHex = new int[] { 0x00, 0x00, 0x01, 0xB7, 0x00, 0x00, 0x01, 0xB3 }; count = 0; MP_.Seek(0, 0); } tp = MP_.ReadByte(); count++; //if(tp==0xFF) //{ // tp = MP_.ReadByte(); // count++; if (tp == 0x00) { int[] btp = new int[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; for (int i = 1; i < 8; i++) { btp[i] = MP_.ReadByte(); count++; } if (CompareBt(btp, SearchHex)) { count = count - 4; break; } else { //此处为修正读取7位有个可能引起的Bug count = count - 7; MP_.Seek(-7, SeekOrigin.Current); } } //} } if (count != length) { byte[] bpart = new byte[count]; byte[] apart = new byte[length - count]; MP_.Seek(0, 0); MP_.Read(bpart, 0, bpart.Length); MP_.Read(apart, 0, apart.Length); MP_.Flush(); if(File.Exists(Output)) { File.Delete(Output); } FileStream MPG = File.Open(Output, FileMode.CreateNew); MPG.Write(apart, 0, apart.Length); MPG.Write(bpart, 0, bpart.Length); MPG.Flush(); MPG.Close(); } else { Console.WriteLine("不能被转换"); } } /// <summary> /// 比较两个数组是否相等 /// /// <param name="b1">数组1</param> /// <param name="b2">数组2</param> /// <returns>是否相等</returns> private static bool CompareBt(int[] b1, int[] b2) { if (b1.Length != b2.Length) { return false; } if (b1 == null || b2 == null) { return false; } for (int i = 0; i < b1.Length; i++) { if (b1[i] != b2[i]) return false; } return true; } |
Changelog
- 2011-01-04
不能被转的文件也是这样的文件格式,不过头尾的16进制应该是000001B7000001B3
尾:000001B7
头:000001B3
处理方式也和上面一样,小工具就暂不更新了,我先得考试,虽然改下不用几分钟,但是我懒啊…结果我还是蛋疼的更新了小软件
赠品
改save方法(不完美)
save文件中实际上用16进制的00
表示没出现过
,01
表示出现过
,这样就简单了,直接全部改成01
保存,就能查看几乎所以的视频
第十弹左边2个隐藏的不行…
左边2个的方法:http://new-umemaro3d.sakura.ne.jp/UmeTop-All.html
左边2个:红色字的播放个5次即可开启
右边2个:红色字的播放个10次即可开启