梅麻吕 MP_文件简易转换工具[4号更新部分问题]

昨天 尝试了一下 杉本女医の淫乱痴療,很蛋疼,不能直接用播放器播放,点得都手酸了,而且有点隐藏剧情得loop个5-10遍才能播放。于是乎在新年之际,搞了个这个小工具来转换,据贴吧kakurukia说可以此方法可以用于Intou游戏Ω(前编)只能说是里面大部分,个别的识别的头不太一样,下面会在手工中贴出来,不过再之前是是否是如此的文件结构,还是大家自己去尝试下吧。
原理:
梅麻吕的第十弹不能直接用播放器播放,影像文件为后缀为“mp_”的文件。实际是格式是MPEG-PS的mpg文件,但是梅麻吕把文件分为了2部分(以下假设为A和B),原来mpg文件顺序为AB,但是mp_的文件顺序却是BA。所以我们只要将顺序调转回来就能直接用播放器放。
手工方式
工具:WinHex
方法:搜索 000001B9000001BA
000001B9为mpg结尾
000001BA为mpg开头
所以剪切文件头到000001B9这一块,粘贴到文件末尾
另存为.mpg文件,即可直接播放
---4号更新---
不能被转的文件也是这样的文件格式
不过头尾的16进制应该是 000001B7000001B3
尾:000001B7
头:000001B3
处理方式也和上面一样,小工具就暂不更新了,我先得考试,虽然改下不用几分钟,但是我懒啊...结果我还是蛋疼的更新了小软件
为了欢度新年,我编了个小软件来转换(需要.net framework 2.0)
http://dl.dbank.com/c058aaf773
大家可以尝试。不保证所以版本都能行
操作方法
将Movie文件夹下的".mp_"全选,直接全部拖到此程序图标上面即可。
mpg文件同样生成在Movie文件夹下。
↑已经发表在百度贴吧里面了:http://tieba.baidu.com/f?kz=966651885
同时正因为是新年所以把源码也一并附上,有兴趣的一起来研究(注释掉的判断0xFF的循环有时候会出错)
C#核心源代码:
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; } |
另附改save方法(不完美):
save文件中实际上用16进制的00表示出现过,01表示出现过,这样就简单了,直接全部改成01保存(用16进制编辑器,如WinHex),就能查看几乎所以的视频(第十弹左边2个隐藏的不行)。
左边2个的方法:http://new-umemaro3d.sakura.ne.jp/UmeTop-All.html
左边2个:红色字的播放个5次即可开启
右边2个:红色字的播放个10次即可开启
原创文章,转载请注明: 转载自M-78 星云
本文链接地址: 梅麻吕 MP_文件简易转换工具[4号更新部分问题]
文章的脚注信息由WordPress的wp-posturl插件自动生成

2011年04月02日 00:17
幸苦了
终于可以直接导出视频了^_^
2011年04月02日 00:18
呵呵 不用…举手之劳而已
2011年12月26日 14:36
太感谢了!您真是高人啊,这都办得到!我对您的敬仰犹如滔滔江水呵呵。