M-78 星云 凹凸曼就是打这里出来的

1一/113

梅麻吕 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插件自动生成

评论 (3) 引用 (0)
  1. 幸苦了
    终于可以直接导出视频了^_^

  2. 太感谢了!您真是高人啊,这都办得到!我对您的敬仰犹如滔滔江水呵呵。


Leave a comment

(required)

还没有引用.