基于之前对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