说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
用VB6的双通道技术获得影碟片断


   现在计算机多媒体技术的发展,使影碟无需借助解压卡就可以在电脑中播放,而且由于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
  (第三步)运行调试工程,如图2。
  (第四步)编译。
  怎么样,现在一个精致的非常实用的先进的(不是夸口)vcd截取软件已经制作成功了(如图3),你现在可将那些什么avi压缩工具放进回收站了。心动不如行动,此程序在vb6.0中文企业版/windows98中调试通过,如果你用的是vb5.0那么也不用担心,你只用将第一步中对部件的引用改为“MICROSOFT WINDOWS COMMON CONTROLS 5.0"即可。(河南 新天)
Delphi:用FormContainer渐变效果 Delphi4的窗口融合技术 Delphi使用技巧ABC Delphi使用技巧四则 DELPHI中自适应表单的实现 TList的用法-Delphi资料 不规则窗口的实现-Delphi资料 不用标题栏也移动窗体-Delphi资料 窗口建立和关闭时的特效-Delphi资料 窗口中状态行的显示-Delphi资料 动态提示的可视化实现-Delphi资料 动态修改显示器分辨率-Delphi资料 对数据库中的数据进行处理-Delphi资料 改变壁纸-Delphi资料 改变元件的视窗式样-Delphi资料 给MDI主窗口加背景-Delphi资料 更改StatusBar为黑底绿字-Delphi资料 画布的圆拷贝和直线拷贝-Delphi资料 回车替Tab下移控件-Delphi资料 获取系统颜色-Delphi资料 渐变色窗口背景-Delphi资料 控件深度投影和阴影效果的实现-Delphi资料 控制Delphi的窗口显示位置 控制Form不能放大、缩小、移动、关闭-Delphi资料 控制系统菜单-Delphi资料 利用Delphi实现支持窗体的自定义函数 轻轻松松在DELPHI3.0中实现三态按钮 全部窗体可使用鼠标移动-Delphi资料 让按钮连续工作--兼谈Delphi元件开发 让彩色光标出现在Delphi程序中 让彩色光标出现在程序中-Delphi资料 全局函数放在那里 大家聊聊远程控制的优缺点!!!! 怎样用jsp做广播通知?--在线等 如何用不是SA的账户去激活SA级的作业? 关于execl向数据库复制的问题 >一起学习:VFP右键功能!< Tdatabase组件的应用 请问这个检索的SQL语句怎么写? 这样是否就一定安全了,高手进 为什么直接删除不行 asp.net问题,马上给分 在线请教各位一个简单的问题--请问oracle8哪里有的下栽,急!!!!!!! 谁给我Beyond 2003演唱会下载地址! 为什么同一存储文件的程序在win2000个人版下出现:"存储文件时的共享违例"但是在win2000 server下没有,请教各位大师 用什么程序,把用户的安全性调到最低(可以出现警告对话框)??? 在线等待,马上揭贴 谁知到哪里有下载Jbuilder啊。。 如何在Win2000下注册服务程序呢?分不够再加 请问:如何解决“JDBC 服务器”配置不受支持的问题。 万分火急!请大侠指教(100分立即给) 如何在窗体上动态加载图标? MM明天生日放分庆祝(一) 如何进入Java的门? APS.NET下Excel调用:如何让服务器端只运行一个Excel实例?如何结束Excel进程? 快来快来!出事儿啦! 3d效果的正方形!! 惭愧啊!这么简单的数据库问题我都不会,你会吗? 谁告诉我这个马甲“ FrameShare (大城市里的帅哥) ”是谁的,千分不在话下! 在线等待,马上揭贴 再發貼(grid中定位問題) 怎么把长度为8且首位为0的string类型的数据转换成对应的长整型,用什么函数?载线等!!!! 在panel上没有OnKeyPress事件,怎么样实现按键盘某键触发该Panel上的button事件 急急急!高分求解(在线等待) 我有个棘手的问题,不知道高手能否给我解决,关于vc安装的问题 几十万条查循纪录纪录,在WEB页面中分页显示问题?大虾帮忙!!!!! 如何连接SQL数据库 在线等待,马上揭贴 MM明天生日放分庆祝(二)来者有分 Dephi的浏览器控件比VB慢,占用资源也大些! 100分,请大家帮我把下面的文字译成英文,很简单的 parser.parse是什么意思:请看代码(在线等) 菜鸟提问,快请高手解答!谢谢了! 非常值得探讨的问题 VB中的有无现成反三角函数用?函数名是什么? 菜鸟提问,快请高手解答!谢谢了! 上传文件出错误,请问该如何解决 报道 花了两个多月写了一套购物程序,请大家测试测试 ADO操作大字段地问题,急!! 有关C++I/O流库write()和read()函数的问题. 关于线程的简单问题,在线急等 请问一个C#的基本问题! 口技 运用了什么的修辞手法 什么是stock index 如图:等腰直角三角形ABC位于第一象限,AB=AC=2,直角顶点A在直线y=x上,其中A点的横坐标为1,且两条直角边AB、AC分别平行于x轴、y轴,若双曲线(k≠0)若双曲线y=X分之K(K≠0)与△ABC有交点 He is not ( ) to be present at theHe is not ( ) to be present at the meeting tonightA、possibleB、likelyC、probablyD、perhaps选哪个?为什么 He is not __________to be present at the meeting tonight.A.possible B.likely C.probably D.perhaps I'm at present ______ a home.A.search for B.search of C.in search of D.on search for 能不能帮忙查一下EI检索号码:A Study of the Localized Chinese Animation Development Strategies whatever,whoever,whenever是疑问代词吗 帮忙查一下《Status and Future Tasks of Coal Mining Safety in China》ei检索号吧,期刊safety science 事物的正确答案只有一个吗?支持反方观点的名言 天津的韦博英语怎么样? 南亚地区仍有6.75亿人露天排便法国职业足球俱乐部罢赛抗议 不满缴纳24架美军“鱼鹰”运输机落户冲绳 半美国监听行为激怒欧盟 欧盟各国首脑纷德媒翻奥巴马“旧账” 称其冷酷不愿交水池捞2.87美元硬币买食物 穷困智德媒借美监听事件翻奥巴马\"旧账\"欧盟主席谈隐私 被称暗示美国搞监视是美媒解密美国国家安全局监控盟友的方式24架美军“鱼鹰”运输机落户冲绳 半沙特前高官批评美国中东政策 或联手埃埃航称客机在进入埃及领空后消失 搜救北京市公安局公开回应雷洋案:高度重视阿根廷启动大规模可再生能源发展计划埃及当局称失联飞机或已坠海 埃航未收《中国古镇(二)》特种邮票今首发 合徐州一男子摔倒脑出血160毫升 救治埃航:失联客机机长有6000个小时飞外媒:埃及航空A320客机载69人在埃及航空客机在进入埃及10英里后从雷埃及航空高管称失联航班上共66人 其小区一早发现10辆车被砸 无值钱物品
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘