分享
 
 
 

用VB6的双通道技术获得影碟片断

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

用VB6的双通道技术获得影碟片断

8/23/2001 9:8:59· ·--··vbeden

现在计算机多媒体技术的发展,使影碟无需借助解压卡就可以在电脑中播放,而且由于vcd2.0标准的普及,影碟已经完成了向数字文件化的过渡,完全可以轻松的将任何vcd拷贝到自己的硬盘上欣赏,而无须辛苦娇嫩的光驱.这也为我们截取任何影碟的片断提供了可能.但是目前普遍采用的压缩成AVI文件的办法不仅体积庞大、画面停滞而且速度非常慢。笔者在总结编写文件分割软件的经验基础上,辟出了一条蹊径,即采用双通道技术直接截取影碟文件片断,从根本上克服了上述弊端。

(一)编程原理;

一般来说VCD的实际影音文件放在光盘根目录下“MPEGAV”子目录下,文件名为music001.dat或者依次排序,通过对该文件的截取操作,使用户可以保存任何精彩的影碟片断,据作者测算,每十兆字节大约可以播放一分钟,这样,用户可以使用该软件截取任意时间段内的vcd,不过要使用“超级解霸”5.02以上版本播放。

由于影音文件体积非常大,普通vcd2.0格式60分钟的影音文件长度在600兆以上,因此采用单通道定义二进制数组的办法不仅可靠性差,而且截取较长片断时势必难以实现.笔者采用了双通道技术,即通过定义较小的固定二进制数组,一个通道用来读取,另一个通道用来写入的方法来实现.这其中涉及了复杂的二进制定位技术。

(二)编程实例;

(第一步)启动vb6中文版建立一个标准exe工程,将窗体命名为“form1",单击“工程"菜单项目,选择“部件",在部件对话框的“控件"栏目中选择“MICROSOFT WINDOWS COMMON CONTROLS 6.0",确认在它前面的复选框中有一个黑色的对号,单击“确认",添加对该控件的引用.添加6个标签框,4个文本框(由上直下依次排列),3个按钮,一个进度条命名为ba1,一个公用对话框控件命名为cog1,拖动控件到适当位置,界面设计完成后大致如图1所示。其中, “影音文件名称:"标签对应text1,“影音文件长度:"标签对应text2,“截取起始位置:”标签对应text3,“截取长度:”标签对应text4,“截取后文件保存路径:”标签对应text5.设置Label6的BorderStyle = 1,“浏览(*.dat)”按钮对应Command1 ,“保存为(*.dat)"按钮对应Command2 ,“开始截取"按钮对应Command3 。

双击窗体添加以下代码:

Private Sub Command1_Click() 注释:浏览选择文件

Cog1.FileName = “" 注释:清空过期文件名称

Cog1.Filter =“vcd影碟文件(*.dat)|*.dat" 注释:只保留影碟文件

Cog1.ShowOpen 注释:执行打开操作

If Cog1.FileName <> "" Then 注释:如果放弃就忽略操作

Text1.Text = Cog1.FileName 注释:得到被截取文件名

Label6.Caption = CInt(FileLen(Text1.Text) / 2 ^ 20)

注释:将文件长度转化为兆字节

End If

End Sub

Private Sub Command2_Click() 注释:保存为

If Text1.Text = “" Then

注释:如果未选定影音文件就拒绝操作,显示提示信息

MsgBox “请首先选择一个被截取的文件!", vbOKOnly + vbExclamation

Exit Sub 注释:中断操作

End If

Cog1.FileName = “"

Cog1.ShowSave

If Cog1.FileName <> “" Then

Text4.Text = Cog1.FileName 注释:保存路径名称

End If

End Sub

Private Sub Command3_Click() 注释:开始截取操作

Dim err_descr As String

If Text1.Text = “" Or Text2.Text = “" Or Text3.Text = “" Or Text4.Text = “" Then

注释:再次验证参数正确性

MsgBox “请依次输入正确的信息,不要有所遗漏!", vbOKOnly + vbExclamation

Exit Sub 注释:如果参数不完整忽略操作

End If

If Not jieQU(Text1.Text, Text2.Text, Text3.Text, Text4.Text) Then

注释:执行截取失败

MsgBox “红箭提示信息:" & err_descr, vbOKOnly + vbExclamation

注释:返回错误信息

Else 注释:执行截取成功

MsgBox“红箭提示信息:文件截取操作已经圆满完成!", vbOKOnly + vbExclamation

End If

End Sub

Private Sub Form_Load()

Me.Caption = App.Title

Me.Left = (Screen.Width - Me.Width) / 2

Me.Top = (Screen.Height - Me.Height) / 2 注释:窗体居中

End Sub

Private Sub Form_Unload(Cancel As Integer)

End 注释:结束工程

End Sub

(第二步)添加一个模块,输入以下代码:

Option Explicit 注释:变量检查

Type FileSection

Bytes() As Byte 注释:定义关键数组

End Type

Type SectionedFile

Files() As FileSection 注释:定义辅助数组

End Type

Public Function jieQU(Yname As String, Kshi As Long, CHang As Long, Bname As String) As Boolean 注释:定义截取操作函数

Form1.MousePointer = 11 注释:设置鼠标指针为漏斗型

jieQU = True 注释:函数成功标志

Dim mlp As Integer, i As Integer, zhi As Long, fnum As Integer, fnum1 As Integer

Dim shuZU As Long, myfile As SectionedFile

shuZU = 2000000 注释:定义内存固定数组,长度为2兆

Kshi = Kshi * 2 ^ 20

注释:转换文件指针单位为字节

CHang = CHang * 2 ^ 20

注释:转换文件长度单位为字节

If CHang < shuZU Then

注释:如果截取长度太小

MsgBox “截取的文件长度不能小于2兆字节!", vbOKOnly + vbExclamation

jieQU = False

注释:返回操作失败标志,退出操作

Exit Function

End If

If CInt(CHang / shuZU) >= CHang / shuZU Then

mlp = CInt(CHang / shuZU)

Else

mlp = CInt(CHang / shuZU) + 1

End If

注释:计算需要进行操作的次数

fnum1 = FreeFile注释:返回第一个空闲文件通道

Open Bname For Binary As #fnum1 注释:以二进制方式打开影音文件

ReDim myfile.Files(1) 注释:重新分配内存辅助数组

With Form1.Ba1

.Visible = True

.Value = 0

.Max = mlp

.Min = 0 注释:展示进度条,提示操作进度

For i = 1 To mlp 注释:读取和写入数据

zhi = Kshi + (-1 + i) * shuZU 注释:计算第一个二进制通道指针

If i < mlp Then 注释:如果不是最后一次操作

ReDim myfile.Files(1).Bytes(1 To shuZU)

注释:定义主要内存数组2兆字节

fnum = FreeFile 注释:打开第二个空闲文件通道

Open Yname For Binary As #fnum

注释:以二进制方式打开被截取的影音文件

Seek #fnum, zhi 注释:指针定位

Get #fnum, , myfile.Files(1).Bytes 注释:获取数据

Close #fnum

Else 注释:如果是最后一次操作

ReDim myfile.Files(1).Bytes(1 To (CHang - (mlp - 1) * shuZU))

注释:分配主要内存数组大小为最后遗留数据大小

fnum = FreeFile

Open Yname For Binary As #fnum

Seek #fnum, zhi 注释:定位指针

Get #fnum, , myfile.Files(1).Bytes

Close #fnum

End If

Put #fnum1, , myfile.Files(1).Bytes 注释:以二进制方式写入保存文件

.Value = i 注释:进度条开始运行

Next 注释:循环直到操作次数全部执行

Close #fnum1 注释:关闭文件通道

.Visible = False 注释:隐藏进度条

End With

Form1.MousePointer = 0 注释:还原鼠标指针指针

End Function

(第三步)运行调试工程。

(第四步)编译。

怎么样,现在一个精致的非常实用的先进的(不是夸口)vcd截取软件已经制作成功了(如图3),你现在可将那些什么avi压缩工具放进回收站了。心动不如行动,此程序在vb6.0中文企业版/windows98中调试通过,如果你用的是vb5.0那么也不用担心,你只用将第一步中对部件的引用改为“MICROSOFT WINDOWS COMMON CONTROLS 5.0"即可。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有