迅雷看看xv文件转换器(源码)

基于之前对xv格式较为充分的研究,写了这个小程序,能够提取出其中的各种格式的视频文件。速度非常快,应该可以到5-10MB每秒的样子。我还想说的是,得到的文件格式随缘,完全取决于迅雷在制作xv文件时的设置。这个程序没有真正意义上的转换功能。--但是用起来很高兴就对了是吧:)

截止本文发布时,已测试通过的版本是迅雷看看(Xmp) 3.8.5.520和4.5.3.623,不确保对于之后版本可用,在迅雷绞尽脑汁保护他们的xv文件之时。如果程序检测不能转换,会生成一个错误报告文件,内容是xv文件的前3MB,没有任何个人信息。请您将它发给我(可以压缩下= =),我可以参考它来解决问题。我的邮箱是。另外建议您除非需要,不要更新迅雷看看版本,才能保证继续转换。

目前可以识别的格式是rm, rmvb, wmv, flv, mp4, mpg, avi, mkv,应该差不多了吧。

XVE 通用版 更新4

解包后运行XVE.exe,选择视频文件按“开始”按钮,随后自动识别视频类型,如果成功会显示相关信息。这时会再次提示免责声明,只有同意、输入y后按下回车键,程序才能继续。转换后的视频会存放在原文件的同一目录下,并在文件名后添加相应的扩展名。批量转换:将压缩包中所有文件复制到装有xv文件的文件夹中,双击打开“全部转换.bat”。

网盘下载:

XVE For Vista/Win 7 更新5 测试1

这是为Windows Vista和Windows 7重写的版本,现在两个程序文件合并成了一个,能够减少很多权限问题,速度甚至比原来还快= = 但是据说有可能偶尔出现进度不走的奇怪现象,那样的话请用通用版。支持直接在选择文件时批量选择。这个版本是基于.NET Framework 2.0,Windows XP只有单独安装了.NET框架才能使用。



哦,看到程序这么简单,很多人会失望吧大概。

  XVE & FxxkXVX
  版权所有(C) 2011 伪红学家
  这一程序是自由软件,你可以遵照自由软件基金会出版的GNU通用公共许可证条款来修改和重新发布这一程序。或者用许可证的第三版,或者(根据你的选择)用任何更新的版本。
  发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定目的的隐含的担保。更详细的情况请参阅GNU通用公共许可证。
  你应该已经和程序一起收到一份GNU通用公共许可证的副本。如果还没有,
  写信给:
  The Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
  MA02139, USA

英文版本:注:这是【百木破解】转自其他网站
    Copyright (C) 2011 伪红学家
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.

////// XVE For Vista/Win7 Update 5 Beta 1 //////

////// Visual Studio 2008 + VB.NET + .NET Framework 2.0 //////

     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim fb(&H200010), peek(4) As Byte
        Dim mn, type, l, rl, c, fail As Integer
        Dim ts As String
        Dim fin, fout As System.IO.FileStream
        If MsgBox("请注意,本程序仅供学习之用,请将生成文件立刻删除。" + vbCrLf + "对于使用本程序造成的任何后果,由使用者自行承担法律责任!谢绝跨省。" + vbCrLf + "点击[是],表示您同意自行承担所有责任!", MsgBoxStyle.YesNo) <> MsgBoxResult.Yes Then Exit Sub
        Button2.Enabled = False
        For i = 0 To ListView1.Items.Count - 1
            c = 0
            ListView1.Items(i).SubItems(0).Text = "开始转换"
            Application.DoEvents()
            fin = New System.IO.FileStream(ListView1.Items(i).SubItems(1).Text, IO.FileMode.OpenOrCreate)
            l = fin.Length
            fin.Read(fb, 0, &H200000)
            fin.Read(peek, 0, 4)
            mn = (Asc("R") - peek(1) + &H100) And &HFF
            If (((peek(2) + mn) And &HFF) = Asc("M") And ((peek(3) + mn) And &HFF) = Asc("F")) Then
                type = 1
                GoTo ok
            End If
            mn = (&H26 - peek(1) + &H100) And &HFF
            If (((peek(2) + mn) And &HFF) = &HB2 And ((peek(3) + mn) And &HFF) = &H75) Then
                type = 2
                GoTo ok
            End If
            mn = (Asc("L") - peek(1) + &H100) And &HFF
            If (((peek(2) + mn) And &HFF) = Asc("V")) Then
                type = 3
                GoTo ok
            End If
            mn = (Asc("I") - peek(1) + &H100) And &HFF
            If (((peek(2) + mn) And &HFF) = Asc("F") And ((peek(3) + mn) And &HFF) = Asc("F")) Then
                type = 4
                GoTo ok
            End If
            mn = (-peek(1) + &H100) And &HFF
            If (((peek(2) + mn) And &HFF) = 0) Then
                type = 5
                GoTo ok
            End If
            mn = (-peek(1) + &H100) And &HFF
            If (((peek(2) + mn) And &HFF) = 1 And ((peek(3) + mn) And &HFF) = &HBA) Then
                type = 6
                GoTo ok
            End If
            mn = (&H45 - peek(1) + &H100) And &HFF
            If (((peek(2) + mn) And &HFF) = &HDF And ((peek(3) + mn) And &HFF) = &HA3) Then
                type = 7
                GoTo ok
            End If
            fout = New System.IO.FileStream(ListView1.Items(i).SubItems(1).Text + "1", IO.FileMode.OpenOrCreate)
            fout.Write(fb, 0, &H200000)
            fout.Write(fb, 0, 4)
            fin.Read(fb, 0, &H100000)
            fout.Write(fb, 0, &H100000)
            ListView1.Items(i).SubItems(0).Text = "失败"
            Application.DoEvents()
            fail += 1
            GoTo nxt
ok:
            ts = Split("rmvb wmv flv avi mp4 mpg mkv")(type - 1)
            fout = New System.IO.FileStream(ListView1.Items(i).SubItems(1).Text + "." + ts, IO.FileMode.OpenOrCreate)
            peek(0) = CByte(Val(Split("46 48 70 82 0 0 26")(type - 1)))
            For j = 1 To 3
                peek(j) = CByte((CInt(peek(j)) + mn) And &HFF)
            Next
            fout.Write(peek, 0, 4)
            fin.Read(fb, 0, &H3FC)
            For j = 1 To &H3FC
                fb(j - 1) = CByte((CInt(fb(j - 1)) + mn) And &HFF)
            Next
            fout.Write(fb, 0, &H3FC)
            While fin.Position <= l
                rl = fin.Read(fb, 0, &H40000)
                If rl = 0 Then Exit While
                fout.Write(fb, 0, rl)
                c = c + 1
                If c = 10 Then
                    ListView1.Items(i).SubItems(0).Text = "转换" + Trim(Str(Format(fout.Position / (l - &H200000) * 100, "0"))) + "%"
                    Application.DoEvents()
                    ProgressBar1.Value = Int(Math.Round(fout.Position / (l - &H200000) * 100))
                    c = 0
                End If
            End While
            ListView1.Items(i).SubItems(0).Text = "完成转换"
            Application.DoEvents()
nxt:
            fin.Close()
            fout.Close()
        Next
        MsgBox("转换结束" + vbCrLf + Trim(Str(ListView1.Items.Count - fail)) + "成功," + Trim(Str(fail)) + "失败" + IIf(fail <> 0, "请将目标文件下生成的错误信息文件%s发给作者,以便及时解决问题。" + vbCrLf + "注:该文件为xv文件的前3MB内容,不含有任何涉及您的隐私的信息。" + vbCrLf + "作者的电子邮件:[email protected]", ""))
        ProgressBar1.Value = 0
        Button2.Enabled = True
    End Sub



////// FxxkXVX For Vista/Win7 Update 4 Beta 1 //////

////// Visual Studio 2008 + VB.NET + .NET Framework 2.0 //////

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim fin, fout, f1 As System.IO.FileStream
        Dim rl, c As Integer
        Dim tb(&H100010), t1(1024) As Byte
        If MsgBox("请注意,本程序仅供学习之用,请将生成文件立刻删除。" + vbCrLf + "对于使用本程序造成的任何后果,由使用者自行承担法律责任!谢绝跨省。" + vbCrLf + "点击[是],表示您同意自行承担所有责任!", MsgBoxStyle.YesNo) <> MsgBoxResult.Yes Then Exit Sub
        Button2.Enabled = False
        For i = 0 To ListView1.Items.Count - 1
            c = 0
            fin = New System.IO.FileStream(ListView1.Items(i).SubItems(1).Text, IO.FileMode.OpenOrCreate)
            fout = New System.IO.FileStream(ListView1.Items(i).SubItems(1).Text + ".flv", IO.FileMode.OpenOrCreate)
            f1 = New System.IO.FileStream(pth, IO.FileMode.OpenOrCreate)
            fout.WriteByte(CByte(Asc("F")))
            fout.WriteByte(CByte(Asc("L")))
            fout.WriteByte(CByte(Asc("V")))
            fin.Read(tb, 0, 3)
            f1.Read(tb, 0, 3)
            fin.Read(tb, 0, 1024)
            f1.Read(t1, 0, 1024)
            For j = 0 To 1023
                tb(j) = tb(j) Xor t1(j)
            Next
            fout.Write(tb, 0, 1024)
            While fin.Position <= fin.Length
                rl = fin.Read(tb, 0, &H40000)
                If rl = 0 Then Exit While
                fout.Write(tb, 0, rl)
                c = c + 1
                If c = 10 Then
                    ListView1.Items(i).SubItems(0).Text = "转换" + Trim(Str(Format(fout.Position / fin.Length * 100, "0"))) + "%"
                    Application.DoEvents()
                    ProgressBar1.Value = Int(Math.Round(fout.Position / (fin.Length) * 100))
                    c = 0
                End If
            End While
            ListView1.Items(i).SubItems(0).Text = "完成转换"
            Application.DoEvents()
            fin.Close()
            fout.Close()
            f1.Close()
        Next
        MsgBox("转换结束")
        ProgressBar1.Value = 0
        Button2.Enabled = True
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        pth = Application.StartupPath
        If Not pth.EndsWith("\") Then pth = pth + "\"
        If System.IO.File.Exists(pth + "1.xvx") Then
            pth = pth + "1.xvx"
        ElseIf System.IO.File.Exists("1.xvx") Then
            pth = "1.xvx"
        Else
            MsgBox("需要先从网盘用迅雷下载1.xvx文件,并放置于同目录下!" + vbCrLf + "详见我的博客。")
            Button2.Enabled = False
            Exit Sub
        End If
        Dim fin As New System.IO.FileStream(pth, IO.FileMode.OpenOrCreate)
        Dim tb(3) As Byte
        fin.Read(tb, 0, 3)
        If tb(0) <> Asc("X") Or tb(1) <> Asc("V") Or tb(2) <> Asc("X") Then
            MsgBox("提供的1.xvx不符合要求。可能是目前的研究不完善造成的。" + vbCrLf + "您可以尝试[在线播放],生成的xv格式文件便于转换。" + vbCrLf + "详见我的博客")
            Button2.Enabled = False
        End If
        fin.Close()
    End Sub

你可能感兴趣的:(转换器)