Video VB脚本上的转换错误

Video VB脚本上的转换错误,video,vbscript,file-conversion,Video,Vbscript,File Conversion,我正在使用VB脚本将ARF文件转换为MP4和WMV格式。该脚本使用来自网络录制播放器的API(用于查看和转换ARF格式的Web Ex视频)。然而,我遇到了一个非常奇怪的错误。WMV转换在我试过的任何机器上都可以正常工作,但这与MP4不同,MP4只在我的一台机器上工作,但在我试过的另外两台机器上不工作 该脚本的工作原理是将位于特定文件夹中的所有ARF文件(在我的例子中是C驱动器中名为“Webex”的文件夹)转换为MP4和WMV,并将它们保存在同一文件夹中。 当我在运行脚本后打开文件夹时,我可以看到

我正在使用VB脚本将ARF文件转换为MP4和WMV格式。该脚本使用来自网络录制播放器的API(用于查看和转换ARF格式的Web Ex视频)。然而,我遇到了一个非常奇怪的错误。WMV转换在我试过的任何机器上都可以正常工作,但这与MP4不同,MP4只在我的一台机器上工作,但在我试过的另外两台机器上不工作

该脚本的工作原理是将位于特定文件夹中的所有ARF文件(在我的例子中是C驱动器中名为“Webex”的文件夹)转换为MP4和WMV,并将它们保存在同一文件夹中。 当我在运行脚本后打开文件夹时,我可以看到在转换过程中创建的某些文件,一旦完成,只剩下WMV视频。MP4开始转换,然后在某些机器上停止。您可以看到正在创建的“videoname”-mp4.cfg文件,但随后它立即消失

我真的不知道问题出在哪里,任何帮助都将不胜感激

以下是我的想法:

Option Explicit

'Main

Sub Main
    Dim Path
    Dim a: a = ListDir("C:\Webex\*.arf")
    Dim FileName
    Dim FileName1
    Dim FileName2
    Dim mp4
    Dim wmv
    Dim objFSO
    Dim objFile
    Dim objTextFile
    Dim WSHShell
    Dim StrCMDLine
    Dim d: d = ListDir("C:\Webex\*.cfg")
    Set WSHShell = CreateObject("WScript.Shell")
    For Each FileName In d
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        objFSO.DeleteFile(Filename)
    Next
    For Each FileName In a
        mp4 = 0
        wmv = 0
        'WScript.Echo FileName
        'WScript.Echo Left(Filename,(Len(Filename)-4))
        Dim b: b = ListDir(Left(Filename,(Len(Filename)-4))+".mp4")
        For Each FileName1 In b
            'WScript.Echo FileName1
            mp4 = 1
        Next
        Dim c: c = ListDir(Left(Filename,(Len(Filename)-4))+".wmv")
        For Each FileName2 In c
            'WScript.Echo FileName2
            wmv = 1
        Next
        If mp4 = 0 Then
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Set objTextFile = objFSO.CreateTextFile(Left(Filename,(Len(Filename)-4))+"-mp4.cfg")
            objTextFile.WriteLine("")
            objTextFile.WriteLine("[Console]")
            objTextFile.WriteLine("inputfile="+Filename)
            objTextFile.WriteLine("media=MP4")
            objTextFile.WriteLine("showui=0")
            objTextFile.WriteLine("[UI]")
            objTextFile.WriteLine("chat=0")
            objTextFile.WriteLine("qa=0")
            objTextFile.WriteLine("largeroutline=1")
            objTextFile.WriteLine("[MP4]")
            objTextFile.WriteLine("outputfile="+Left(Filename,(Len(Filename)-4))+".mp4")
            objTextFile.WriteLine("width=1024")
            objTextFile.WriteLine("height=768")
            objTextFile.WriteLine("framerate=8")
            objTextFile.Close
        End If
        If wmv = 0 Then
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Set objTextFile = objFSO.CreateTextFile(Left(Filename,(Len(Filename)-4))+"-wmv.cfg")
            objTextFile.WriteLine("[Console]")
            objTextFile.WriteLine("inputfile="+Filename)
            objTextFile.WriteLine("media=WMV")
            objTextFile.WriteLine("showui=0")
            objTextFile.WriteLine("PCAudio=0")
            objTextFile.WriteLine("[UI]")
            objTextFile.WriteLine("largeroutline=0")
            objTextFile.WriteLine("[WMV]")
            objTextFile.WriteLine("outputfile="+Left(Filename,(Len(Filename)-4))+".wmv")
            objTextFile.WriteLine("width=1024")
            objTextFile.WriteLine("height=768")
            objTextFile.WriteLine("videocodec=Windows Media Video 9")
            objTextFile.WriteLine("audiocodec=Windows Media Audio 9.2 Lossless")
            objTextFile.WriteLine("videoformat=default")
            objTextFile.WriteLine("audioformat=default")
            objTextFile.WriteLine("videokeyframes=4")
            objTextFile.WriteLine("maxstream=1000")
            objTextFile.Close
        End If
    Next
    Dim e: e = ListDir("c:\Webex\*.cfg")
    For Each FileName In e
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        StrCMDLine = "cmd /c C: & CD %windir% & C:\ProgramData\WebEx\WebEx\500\nbrplay.exe -Convert " + """" + FileName + """" + " & exit"
        'WScript.Echo StrCMDLine
        wshShell.run StrCMDLine ,0,True
        objFSO.DeleteFile(Filename)
    Next

End Sub

Public Function ListDir (ByVal Path)
    Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
    If Path = "" Then Path = "*.*"
    Dim Parent, Filter
    If fso.FolderExists(Path) Then ' Path is a directory
        Parent = Path
        Filter = "*"
    Else
        Parent = fso.GetParentFolderName(Path)
        If Parent = "" Then If Right(Path,1) = ":" Then Parent = Path: Else Parent = "."
        Filter = fso.GetFileName(Path)
        If Filter = "" Then Filter = "*"
    End If
    ReDim a(10)
    Dim n: n = 0
    Dim Folder: Set Folder = fso.GetFolder(Parent)
    Dim Files: Set Files = Folder.Files
    Dim File
    For Each File In Files
        If CompareFileName(File.Name,Filter) Then
            If n > UBound(a) Then ReDim Preserve a(n*2)
            a(n) = File.Path
            n = n + 1
        End If
    Next
    ReDim Preserve a(n-1)
    ListDir = a
End Function

Private Function CompareFileName (ByVal Name, ByVal Filter) ' (recursive)
    CompareFileName = False
    Dim np, fp: np = 1: fp = 1
    Do
        If fp > Len(Filter) Then CompareFileName = np > Len(name): Exit Function
        If Mid(Filter,fp) = ".*" Then ' special case: ".*" at end of filter
            If np > Len(Name) Then CompareFileName = True: Exit Function
        End If
        If Mid(Filter,fp) = "." Then ' special case: "." at end of filter
            CompareFileName = np > Len(Name): Exit Function
        End If
        Dim fc: fc = Mid(Filter,fp,1): fp = fp + 1
        Select Case fc
            Case "*"
            CompareFileName = CompareFileName2(name,np,Filter,fp)
            Exit Function
            Case "?"
            If np <= Len(Name) And Mid(Name,np,1) <> "." Then np = np + 1
            Case Else
            If np > Len(Name) Then Exit Function
            Dim nc: nc = Mid(Name,np,1): np = np + 1
            If StrComp(fc,nc,vbTextCompare)<>0 Then Exit Function
        End Select
    Loop
End Function

Private Function CompareFileName2 (ByVal Name, ByVal np0, ByVal Filter, ByVal fp0)
    Dim fp: fp = fp0
    Dim fc2
    Do ' skip over "*" and "?" characters in filter
        If fp > Len(Filter) Then CompareFileName2 = True: Exit Function
        fc2 = Mid(Filter,fp,1): fp = fp + 1
        If fc2 <> "*" And fc2 <> "?" Then Exit Do
    Loop
    If fc2 = "." Then
        If Mid(Filter,fp) = "*" Then ' special case: ".*" at end of filter
            CompareFileName2 = True: Exit Function
        End If
        If fp > Len(Filter) Then ' special case: "." at end of filter
            CompareFileName2 = InStr(np0,Name,".") = 0: Exit Function
        End If
    End If
    Dim np
    For np = np0 To Len(Name)
        Dim nc: nc = Mid(Name,np,1)
        If StrComp(fc2,nc,vbTextCompare)=0 Then
            If CompareFileName(Mid(Name,np+1),Mid(Filter,fp)) Then
                CompareFileName2 = True: Exit Function
            End If
        End If
    Next
    CompareFileName2 = False
End Function
选项显式
“主要的
副总管
幽径
Dim a:a=ListDir(“C:\Webex\*.arf”)
暗文件名
Dim文件名1
Dim文件名2
Dim mp4
Dim wmv
Dim objFSO
Dim objFile
Dim objTextFile
昏暗的地狱
暗线
Dim d:d=ListDir(“C:\Webex\*.cfg”)
设置WSHShell=CreateObject(“WScript.Shell”)
对于d中的每个文件名
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
objFSO.DeleteFile(文件名)
下一个
对于文件中的每个文件名
mp4=0
wmv=0
'WScript.Echo文件名
'WScript.Echo左(文件名,(Len(文件名)-4))
Dim b:b=ListDir(左(文件名)(Len(文件名)-4))+“.mp4”)
对于b中的每个文件名1
'WScript.Echo文件名1
mp4=1
下一个
Dim c:c=ListDir(左(文件名)(Len(文件名)-4))+“.wmv”)
对于c中的每个文件名2
'WScript.Echo文件名2
wmv=1
下一个
如果mp4=0,则
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
设置objTextFile=objFSO.CreateTextFile(左(文件名,(Len(文件名)-4))+“-mp4.cfg”)
objTextFile.WriteLine(“”)
objTextFile.WriteLine(“[Console]”)
objTextFile.WriteLine(“inputfile=“+Filename”)
objTextFile.WriteLine(“media=MP4”)
objTextFile.WriteLine(“showui=0”)
objTextFile.WriteLine(“[UI]”)
objTextFile.WriteLine(“chat=0”)
objTextFile.WriteLine(“qa=0”)
objTextFile.WriteLine(“largeroutline=1”)
objTextFile.WriteLine(“[MP4]”)
objTextFile.WriteLine(“outputfile=“+Left(Filename),(Len(Filename)-4))+”.mp4)
objTextFile.WriteLine(“宽度=1024”)
objTextFile.WriteLine(“高度=768”)
objTextFile.WriteLine(“帧速率=8”)
objTextFile.Close
如果结束
如果wmv=0,则
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
设置objTextFile=objFSO.CreateTextFile(左(文件名,(Len(文件名)-4))+“-wmv.cfg”)
objTextFile.WriteLine(“[Console]”)
objTextFile.WriteLine(“inputfile=“+Filename”)
objTextFile.WriteLine(“media=WMV”)
objTextFile.WriteLine(“showui=0”)
objTextFile.WriteLine(“PCAudio=0”)
objTextFile.WriteLine(“[UI]”)
objTextFile.WriteLine(“largeroutline=0”)
objTextFile.WriteLine(“[WMV]”)
objTextFile.WriteLine(“outputfile=“+Left(Filename),(Len(Filename)-4))+”.wmv)
objTextFile.WriteLine(“宽度=1024”)
objTextFile.WriteLine(“高度=768”)
objTextFile.WriteLine(“videocodec=WindowsMediaVideo 9”)
objTextFile.WriteLine(“audiocodec=WindowsMediaAudio9.2无损”)
objTextFile.WriteLine(“videoformat=default”)
objTextFile.WriteLine(“audioformat=default”)
WriteLine(“视频关键帧=4”)
objTextFile.WriteLine(“maxstream=1000”)
objTextFile.Close
如果结束
下一个
Dim e:e=ListDir(“c:\Webex\*.cfg”)
对于e中的每个文件名
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
StrCMDLine=“cmd/c:&CD%windir%&c:\ProgramData\WebEx\WebEx\500\nbrlay.exe-转换“+”+文件名+”+“+”&退出”
'WScript.Echo StrCMDLine
wshShell.run StrCMDLine,0,True
objFSO.DeleteFile(文件名)
下一个
端接头
公共函数ListDir(ByVal路径)
Dim fso:Set fso=CreateObject(“Scripting.FileSystemObject”)
如果路径为“”,则路径为“”
变暗父项、筛选器
如果fso.FolderExists(Path),则“Path”是一个目录
父=路径
过滤器=“*”
其他的
Parent=fso.GetParentFolderName(路径)
如果Parent=“”则如果Right(路径,1)=:“则Parent=Path:Else Parent=“”
Filter=fso.GetFileName(路径)
如果Filter=“”,则Filter=“*”
如果结束
雷迪姆a(10)
尺寸n:n=0
Dim文件夹:Set Folder=fso.GetFolder(父级)
Dim文件:设置文件=文件夹.Files
暗文件
对于文件中的每个文件
如果是CompareFileName(File.Name,Filter),则
如果n>UBound(a),则ReDim保留a(n*2)
a(n)=文件路径
n=n+1
如果结束
下一个
重拨保留a(n-1)
ListDir=a
端函数
私有函数CompareFileName(ByVal名称,ByVal筛选器)'(递归)
CompareFileName=False
尺寸np,fp:np=1:fp=1
做
如果fp>Len(过滤器),则CompareFileName=np>Len(名称):退出函数
如果Mid(Filter,fp)=“*”,则“特殊情况:”*”位于过滤器末尾
如果np>Len(Name),则CompareFileName=True:Exit函数
如果结束
如果Mid(过滤器,fp)=“,则过滤器末尾的“特殊情况:”
CompareFileName=np>Len(名称):退出函数
如果结束
尺寸fc:fc=中间(过滤器
StrCMDLine = "cmd /c C: & CD %windir% & C:\ProgramData\WebEx\WebEx\500\nbrplay.exe -Convert " + """" + FileName + """" + " & exit"
dim timelog : timelog = replace(replace(formatdatetime(Now, 3), ":", "-"), " ", "-")
StrCMDLine = "cmd /c C: & CD %windir% & C:\ProgramData\WebEx\WebEx\500\nbrplay.exe -Convert " + """" + FileName + """" + " > C:\dumplog-" + timelog + ".txt & exit"