home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / Chip_2003-01_cd2.bin / formats / WMA / WMEncoder.exe / RCDATA / CABINET / WMEncoder.msi / WMCmd.vbs < prev    next >
Text File  |  2002-10-28  |  107KB  |  3,535 lines

  1. 'The build number is 9.00.2926
  2. '*****************************************************************************
  3. '
  4. ' Microsoft Windows Media
  5. ' Copyright (C) Microsoft Corporation. All rights reserved.
  6. '
  7. ' FileName:            WMCMD.VBS
  8. '
  9. ' Abstract:            Windows Media Command Line Script Utility
  10. '                      Use Cscript.exe wmcmd.vbs /? for Help
  11. '
  12. '*****************************************************************************
  13.  
  14. Option Explicit
  15.  
  16. ' Check to see if script is run within cscript host.
  17. if instr( LCase(WScript.Fullname),"cscript.exe" ) = 0 then
  18.     WshShell.Popup "This script must be run using cscript.exe from a command window." , 0 , "Windows Media Encoder Command Script" , 64
  19.     WScript.Quit()
  20. end if
  21.  
  22. ' These variables are part of encoder idl. However vbs cannot use them directly. So these are redefined
  23. dim WMENC_ENCODER_STARTING
  24. dim WMENC_ENCODER_RUNNING
  25. dim WMENC_ENCODER_PAUSED
  26. dim WMENC_ENCODER_STOPPING
  27. dim WMENC_ENCODER_STOPPED
  28. dim WMENC_ENCODER_END_PREPROCESS
  29.  
  30. dim WMENC_ARCHIVE_LOCAL
  31. dim WMENC_ARCHIVE_RUNNING
  32. dim WMENC_ARCHIVE_PAUSED
  33. dim WMENC_ARCHIVE_STOPPED
  34.  
  35. dim WMENC_AUDIO
  36. dim WMENC_VIDEO
  37. dim WMENC_SCRIPT
  38. dim WMENC_FILETRANSFER
  39.  
  40. dim WMENC_SOURCE_START
  41. dim WMENC_SOURCE_STOP
  42. dim WMENC_SOURCE_PREPARE
  43. dim WMENC_SOURCE_UNPREPARE
  44. dim WMENC_START_FILETRANSFER
  45. dim WMENC_STOP_FILETRANSFER
  46.  
  47. dim WMENC_PROTOCOL_HTTP
  48. dim WMENC_PROTOCOL_PUSH_DISTRIBUTION
  49.  
  50. dim WMENC_PVM_NONE
  51. dim WMENC_PVM_PEAK
  52. dim WMENC_PVM_UNCONSTRAINED
  53. dim WMENC_PVM_BITRATE_BASED
  54.  
  55. dim WMA9STD_FOURCC
  56. dim WMA9PRO_FOURCC
  57. dim WMA9LSL_FOURCC
  58. dim WMSPEECH_FOURCC
  59. dim PCM_FOURCC
  60.  
  61. dim WMV7_FOURCC
  62. dim WMV8_FOURCC
  63. dim WMV9_FOURCC
  64. dim WMS9_FOURCC
  65. dim MP41_FOURCC
  66. dim UNCOMP_FOURCC
  67.  
  68. dim WMA9STD
  69. dim WMA9PRO
  70. dim WMA9LSL
  71. dim WMSPEECH
  72. dim PCM
  73.  
  74. dim WMV7
  75. dim WMV8
  76. dim WMV9
  77. dim WMS9
  78. dim MP41
  79. dim UNCOMP
  80.  
  81. dim WMENC_CONTENT_ONE_AUDIO
  82. dim WMENC_CONTENT_ONE_VIDEO
  83. dim WMENC_CONTENT_ONE_AUDIO_ONE_VIDEO
  84.  
  85. dim WMENC_VIDEO_STANDARD
  86. dim WMENC_VIDEO_DEINTERLACE
  87. dim WMENC_VIDEO_INVERSETELECINE
  88. dim WMENC_VIDEO_PROCESS_INTERLACED
  89. dim WMENC_VIDEO_TELECINE_AUTO
  90. dim WMENC_VIDEO_TELECINE_AA_TOP
  91. dim WMENC_VIDEO_TELECINE_BB_TOP
  92. dim WMENC_VIDEO_TELECINE_BC_TOP
  93. dim WMENC_VIDEO_TELECINE_CD_TOP
  94. dim WMENC_VIDEO_TELECINE_DD_TOP
  95. dim WMENC_VIDEO_TELECINE_AA_BOTTOM
  96. dim WMENC_VIDEO_TELECINE_BB_BOTTOM
  97. dim WMENC_VIDEO_TELECINE_BC_BOTTOM
  98. dim WMENC_VIDEO_TELECINE_CD_BOTTOM
  99. dim WMENC_VIDEO_TELECINE_DD_BOTTOM
  100. dim WMENC_VIDEO_INTERLACED_AUTO
  101. dim WMENC_VIDEO_INTERLACED_TOP_FIRST
  102. dim WMENC_VIDEO_INTERLACED_BOTTOM_FIRST
  103. dim WMENC_PIXELFORMAT_IYUV
  104. dim WMENC_PIXELFORMAT_I420
  105. dim WMENC_PIXELFORMAT_YV12
  106. dim WMENC_PIXELFORMAT_YUY2
  107. dim WMENC_PIXELFORMAT_UYVY
  108. dim WMENC_PIXELFORMAT_YVYU
  109. dim WMENC_PIXELFORMAT_YVU9
  110. dim WMENC_PIXELFORMAT_RGB24
  111. dim WMENC_PIXELFORMAT_RGB32
  112. dim WMENC_PIXELFORMAT_RGB555
  113. dim WMENC_PIXELFORMAT_RGB565
  114. dim WMENC_PIXELFORMAT_RGB8
  115.  
  116. WMENC_ENCODER_STARTING = 1
  117. WMENC_ENCODER_RUNNING = 2
  118. WMENC_ENCODER_PAUSED = 3
  119. WMENC_ENCODER_STOPPING = 4
  120. WMENC_ENCODER_STOPPED = 5
  121. WMENC_ENCODER_END_PREPROCESS = 6
  122.  
  123. WMENC_ARCHIVE_LOCAL = 1
  124.  
  125. WMENC_ARCHIVE_RUNNING = 1
  126. WMENC_ARCHIVE_PAUSED = 2
  127. WMENC_ARCHIVE_STOPPED = 3
  128.  
  129. WMENC_AUDIO = 1
  130. WMENC_VIDEO = 2
  131. WMENC_SCRIPT = 4
  132. WMENC_FILETRANSFER = 8
  133.  
  134. WMENC_SOURCE_START = 1
  135. WMENC_SOURCE_STOP = 2
  136. WMENC_SOURCE_PREPARE = 3
  137. WMENC_SOURCE_UNPREPARE = 4
  138. WMENC_START_FILETRANSFER = 5
  139. WMENC_STOP_FILETRANSFER = 6
  140.  
  141. WMENC_PROTOCOL_HTTP = 1
  142. WMENC_PROTOCOL_PUSH_DISTRIBUTION = 2
  143.  
  144. WMENC_PVM_NONE = 1
  145. WMENC_PVM_PEAK = 2
  146. WMENC_PVM_UNCONSTRAINED = 3
  147. WMENC_PVM_BITRATE_BASED = 4
  148.  
  149. WMA9STD_FOURCC = 353
  150. WMA9PRO_FOURCC = 354
  151. WMA9LSL_FOURCC = 355
  152. WMSPEECH_FOURCC = 10
  153. PCM_FOURCC = 0
  154.  
  155. WMV7_FOURCC = 827739479
  156. WMV8_FOURCC = 844516695
  157. WMV9_FOURCC = 861293911
  158. WMS9_FOURCC = 844321613
  159. MP41_FOURCC = 1395937357
  160. UNCOMP_FOURCC = 0
  161.  
  162. WMA9STD = "WMA9STD"
  163. WMA9PRO = "WMA9PRO"
  164. WMA9LSL = "WMA9LSL"
  165. WMSPEECH = "WMSP9"
  166. PCM = "PCM"
  167.  
  168. WMV7 = "WMV7"
  169. WMV8 = "WMV8"
  170. WMV9 = "WMV9"
  171. WMS9 = "WMS9"
  172. MP41 = "MP41"
  173. UNCOMP = "UNCOMP"
  174.  
  175. WMENC_CONTENT_ONE_AUDIO = 1
  176. WMENC_CONTENT_ONE_VIDEO = 16
  177. WMENC_CONTENT_ONE_AUDIO_ONE_VIDEO = 17
  178.  
  179. WMENC_VIDEO_STANDARD = 1
  180. WMENC_VIDEO_DEINTERLACE = 2
  181. WMENC_VIDEO_INVERSETELECINE = 3
  182. WMENC_VIDEO_PROCESS_INTERLACED = 4
  183. WMENC_VIDEO_TELECINE_AA_TOP = &H23
  184. WMENC_VIDEO_TELECINE_BB_TOP = &H33
  185. WMENC_VIDEO_TELECINE_BC_TOP = &H43
  186. WMENC_VIDEO_TELECINE_CD_TOP = &H53
  187. WMENC_VIDEO_TELECINE_DD_TOP = &H63
  188. WMENC_VIDEO_TELECINE_AA_BOTTOM = &H73
  189. WMENC_VIDEO_TELECINE_BB_BOTTOM = &H83
  190. WMENC_VIDEO_TELECINE_BC_BOTTOM = &H93
  191. WMENC_VIDEO_TELECINE_CD_BOTTOM = &HA3
  192. WMENC_VIDEO_TELECINE_DD_BOTTOM = &HB3
  193. WMENC_VIDEO_INTERLACED_AUTO = 4
  194. WMENC_VIDEO_INTERLACED_TOP_FIRST = &H2004
  195. WMENC_VIDEO_INTERLACED_BOTTOM_FIRST = &H3004
  196.  
  197. WMENC_PIXELFORMAT_IYUV = &H56555949
  198. WMENC_PIXELFORMAT_I420 = &H30323449
  199. WMENC_PIXELFORMAT_YV12 = &H32315659
  200. WMENC_PIXELFORMAT_YUY2 = &H32595559
  201. WMENC_PIXELFORMAT_UYVY = &H59565955
  202. WMENC_PIXELFORMAT_YVYU = &H55595659
  203. WMENC_PIXELFORMAT_YVU9 = &H39555659
  204. WMENC_PIXELFORMAT_RGB24 = &HE436EB7D
  205. WMENC_PIXELFORMAT_RGB32 = &HE436EB7E
  206. WMENC_PIXELFORMAT_RGB555 = &HE436EB7C
  207. WMENC_PIXELFORMAT_RGB565 = &HE436EB7B
  208. WMENC_PIXELFORMAT_RGB8 = &HE436EB7A
  209.  
  210. dim g_strInput
  211. dim g_strOutput
  212. dim g_strOutputString
  213. dim g_intSessionType
  214. dim g_strProfile
  215. dim g_strTitle
  216. dim g_strAuthor
  217. dim g_strCopyright
  218. dim g_strDescription
  219. dim g_strRating
  220. dim g_strWMEFile
  221. dim g_strProfileSave
  222. dim g_strProfileLoad
  223.  
  224. dim g_intAudioDevice
  225. dim g_intVideoDevice
  226. dim g_intProfile
  227. dim g_intBroadcast
  228. dim g_strPushServer
  229. dim g_strPublishingPoint
  230. dim g_strPushTemplate
  231. dim g_intMarkInTime
  232. dim g_intMarkOutTime
  233. dim g_intDuration
  234. dim g_intVerbose
  235.  
  236. dim g_objEncoder
  237. dim g_objSourceGroup
  238. dim g_objAudioSource
  239. dim g_objVideoSource
  240. dim g_objProfile
  241. dim g_objFileSystem
  242.  
  243. dim g_blnEncoderStarted
  244. dim g_blnEndPreProcess
  245. dim g_blnEncoderStopped
  246. dim g_intErrorCode
  247. dim g_intRunningSource
  248. dim g_blnDevice
  249. dim g_blnAudioOnly
  250. dim g_blnVideoOnly
  251. dim g_blnSilent
  252.  
  253. dim g_intAudioVBRMode
  254. dim g_strAudioCodec
  255. dim g_strAudioSetting
  256. dim g_intAudioPeakBitrate
  257. dim g_intAudioPeakBuffer
  258. dim g_intAudioSpeechContent
  259. dim g_strAudioSpeechEdl
  260. dim g_intAudioSurroundMix
  261. dim g_intAudioCenterMix
  262. dim g_intAudioLEFMix
  263. dim g_strAudioCodecName
  264.  
  265. dim g_intVideoVBRMode
  266. dim g_strVideoCodec
  267. dim g_intVideoBitrate
  268. dim g_intVideoWidth
  269. dim g_intVideoHeight
  270. dim g_intVideoFramerate
  271. dim g_intVideoKeydist
  272. dim g_intVideoBuffer
  273. dim g_intVideoQuality
  274. dim g_intVideoPeakBitrate
  275. dim g_intVideoPeakBuffer
  276. dim g_intVideoPreprocess
  277. dim g_strPixelFormat
  278. dim g_intPixelAspectRatioX
  279. dim g_intPixelAspectRatioY
  280. dim g_intVideoPerformance
  281. dim g_strVideoCodecName
  282. dim g_strVideoDevConf
  283.  
  284. dim i
  285. dim j
  286. dim g_blnCreateCustomProfile
  287.  
  288. dim g_tStartTime
  289. dim g_tStopTime
  290.  
  291. dim g_intClipLeft
  292. dim g_intClipRight
  293. dim g_intClipTop
  294. dim g_intClipBottom
  295.  
  296. g_strInput = ""
  297. g_strOutput = ""
  298. g_strOutputString = ""
  299. g_intSessionType = WMENC_CONTENT_ONE_AUDIO
  300. g_strProfile = ""
  301. g_strTitle = ""
  302. g_strAuthor = ""
  303. g_strCopyright = ""
  304. g_strDescription = ""
  305. g_strRating = ""
  306. g_strWMEFile = ""
  307. g_strProfileSave = ""
  308. g_strProfileLoad = ""
  309. g_strProfile = ""
  310.  
  311. g_intAudioDevice = -1
  312. g_intVideoDevice = -1
  313. g_intProfile = -1
  314. g_intBroadcast = -1
  315. g_strPushServer = ""
  316. g_strPublishingPoint = ""
  317. g_strPushTemplate = ""
  318. g_intMarkInTime = -1
  319. g_intMarkOutTime = -1
  320. g_intDuration = -1
  321. g_intVerbose = 2
  322.  
  323. g_blnEncoderStarted = false
  324. g_blnEncoderStopped = false
  325. g_blnEndPreProcess = false
  326. g_blnDevice = false
  327. g_intErrorCode = 0
  328. g_intRunningSource = 0
  329. g_blnAudioOnly = false
  330. g_blnVideoOnly = false
  331.  
  332. g_intAudioVBRMode = -1
  333. g_strAudioCodec = ""
  334. g_strAudioSetting = ""
  335. g_intAudioPeakBitrate = -1
  336. g_intAudioPeakBuffer = -1
  337. g_intAudioSpeechContent = -1
  338. g_strAudioSpeechEdl = ""
  339. g_intAudioSurroundMix = -1
  340. g_intAudioCenterMix = -1
  341. g_intAudioLEFMix = -1
  342. g_strAudioCodecName = ""
  343.  
  344. g_intVideoVBRMode = -1
  345. g_strVideoCodec = ""
  346. g_intVideoBitrate = -1
  347. g_intVideoWidth = -1
  348. g_intVideoHeight = -1
  349. g_intVideoFramerate = -1
  350. g_intVideoKeydist = -1
  351. g_intVideoBuffer = -1
  352. g_intVideoQuality = -1
  353. g_intVideoPeakBitrate = -1
  354. g_intVideoPeakBuffer = -1
  355. g_intVideoPreprocess = -1
  356. g_strPixelFormat = ""
  357. g_intPixelAspectRatioX = -1
  358. g_intPixelAspectRatioY = -1
  359. g_intVideoPerformance = -1
  360. g_strVideoCodecName = ""
  361. g_strVideoDevConf = ""
  362.  
  363. g_intClipLeft = -1
  364. g_intClipRight = -1
  365. g_intClipTop = -1
  366. g_intClipBottom = -1
  367.  
  368. g_blnCreateCustomProfile = true
  369.  
  370. ' Create an encoder object.
  371. set g_objEncoder = WScript.CreateObject( "WMEncEng.WMEncoder" )
  372. WScript.ConnectObject g_objEncoder, "Encoder_"        ' Setup call back events
  373.     
  374. set g_objFileSystem = WScript.CreateObject( "Scripting.FileSystemObject" )
  375. g_objSourceGroup = Null
  376. g_objAudioSource = Null
  377. g_objVideoSource = Null
  378. g_objProfile = NULL
  379.  
  380. ' Read a integer value from the paramters list.
  381. ' args is the paramters list to be read.
  382. ' intIndex1 is the position of the parameter name.
  383. ' intIndex2 is the position of the parameter value.
  384. ' It will return the integer if it can read a integer value from the parameter list
  385. ' It will return -1 if it can not get a integer value from the paramters list.
  386. function ReadInteger( args, intIndex1, intIndex2 )
  387.     on error resume next
  388.     dim strTypeName
  389.  
  390.     ' Check the range of index.
  391.     if intIndex2 > UBound(args) or Left( args(intIndex2), 1 ) = "-" then
  392.         OutputInfo "Invalid format for parameter " & args(intIndex1)
  393.         ReadInteger = -1
  394.         exit function
  395.     end if
  396.  
  397.     strTypeName = typename( eval( args(intIndex2) ) )
  398.  
  399.     ' Convert it to an integer value.
  400.     ReadInteger = CLng( args(intIndex2) )
  401.  
  402.     ' The value is not in integer fommat.
  403.     if err.number <> 0 or ( strTypeName <> "Integer" and strTypeName <> "Long" )  then
  404.         OutputInfo "Expect integer value for parameter " & args(intIndex1)
  405.         ReadInteger = -1
  406.         err.Clear
  407.     end if
  408.  
  409. end function
  410.  
  411. ' Read a float value from the paramters list.
  412. ' args is the paramters list to be read.
  413. ' intIndex1 is the position of the parameter name.
  414. ' intIndex2 is the position of the parameter value.
  415. ' It will return the float if it can read a float value from the parameter list
  416. ' It will return -1 if it can not get a float value from the paramters list.
  417. function ReadFloat( args, intIndex1, intIndex2 )
  418.     on error resume next
  419.     dim strTypeName
  420.  
  421.     ' Check the range of index.
  422.     if intIndex2 > UBound(args) or Left( args(intIndex2), 1 ) = "-" then
  423.         OutputInfo "Invalid format for parameter " & args(intIndex1)
  424.         ReadFloat = -1
  425.         exit function
  426.     end if
  427.  
  428.     strTypeName = typename( eval( args(intIndex2) ) )
  429.  
  430.     ' Convert it to an integer value.
  431.     ReadFloat = CSng( args(intIndex2) )
  432.  
  433.     ' The value is not in integer fommat.
  434.     if err.number <> 0 or ( strTypeName <> "Integer" and strTypeName <> "Long" and strTypeName <> "Single" and strTypeName <> "Double" )  then
  435.         OutputInfo "Expect float value for parameter " & args(intIndex1)
  436.         ReadFloat = -1
  437.         err.Clear
  438.     end if
  439.  
  440. end function
  441.  
  442. ' Read a var value from the paramters list.
  443. ' args is the paramters list to be read.
  444. ' intIndex1 is the position of the parameter name.
  445. ' intIndex2 is the position of the parameter value.
  446. ' It will return the var if it can not get a var value from the paramters list.
  447. ' It will return "" if it can not get a var value from the paramters list.
  448. function ReadString( args, intIndex1, intIndex2 )
  449.     ' Check the range of index.
  450.     if intIndex2 > UBound(args) or Left( args(intIndex2), 1 ) = "-" then
  451.         OutputInfo "Invalid format for parameter " & args(intIndex1)
  452.         ReadString = ""
  453.         exit function
  454.     end if
  455.  
  456.     ReadString = args(intIndex2)
  457. end function
  458.  
  459. function ConvertStringToInteger( strInput )
  460.     on error resume next
  461.     dim strTypeName
  462.  
  463.     strTypeName = typename( eval( strInput ) )
  464.  
  465.     ' Convert it to an integer value.
  466.     ConvertStringToInteger = CLng( strInput )
  467.  
  468.     ' The value is not in integer fommat.
  469.     if err.number <> 0 or ( strTypeName <> "Integer" and strTypeName <> "Long" )  then
  470.         OutputInfo "Invalid format " & strInput & " expecting integer value"
  471.         ConvertStringToInteger = -1
  472.         err.Clear
  473.     end if
  474.  
  475. end function
  476.  
  477. ' Parse parameters.
  478.  
  479. if wscript.arguments.Length = 0 then
  480.     ShowHelp()
  481.     wscript.quit()
  482. end if
  483.  
  484. dim colStrArgs()
  485. reDim colStrArgs( wscript.arguments.Length-1 )
  486. for i = 0 to wscript.arguments.Length-1
  487.     colStrArgs(i) = wscript.arguments(i)
  488. next
  489.  
  490. if ParseParameters( colStrArgs ) then
  491.     ' Do different things depending on whether input is wme, directory encoding or file encoding
  492.     if g_strInput <> "" and g_objFileSystem.FolderExists(g_strInput) then
  493.         DoDirectoryModeEncoding()
  494.     elseif SetupEncoder() then
  495.         ' Transcode and show statistics information
  496.         if Transcode() and not g_blnSilent then 
  497.             ShowStatistics()
  498.         end if 
  499.     end if
  500. end if
  501.  
  502. WScript.Quit()
  503.  
  504. ' Output information
  505. function OutputInfo( strInfo )
  506.     WScript.Echo( strInfo )
  507. end function
  508.  
  509. ' Event handler for encoder state
  510. function Encoder_OnStateChange( enumState )
  511.     dim strState
  512.     ' Translate encoder state
  513.     select case  enumState
  514.         case WMENC_ENCODER_STARTING
  515.             strState = "Starting"
  516.  
  517.         case WMENC_ENCODER_RUNNING
  518.             strState = "Running"
  519.             g_blnEncoderStarted = true
  520.  
  521.         case WMENC_ENCODER_PAUSED
  522.             strState = "Paused"
  523.  
  524.         case WMENC_ENCODER_STOPPING
  525.             strState = "Stopping"
  526.  
  527.         case WMENC_ENCODER_STOPPED
  528.             g_tStopTime = Now()
  529.             strState = "Stopped"
  530.             g_blnEncoderStopped = true
  531.  
  532.         case WMENC_ENCODER_END_PREPROCESS
  533.             strState = "End Preprorocess"
  534.             g_blnEndPreProcess = true
  535.  
  536.         case else
  537.             strState = "Unknown State"
  538.     end select
  539.  
  540.     Encoder_OnStateChange = 1
  541. end function
  542.  
  543. ' Event handler for encoder error
  544. function Encoder_OnError( intResult )
  545.     g_intErrorCode = intResult
  546.  
  547.     Encoder_OnError = 0
  548. end function
  549.  
  550. ' Parse the parameters of this program.
  551. function ParseParameters( args )
  552.     dim strMarkOutTime
  553.     dim strArguments
  554.     dim strSaveToCfgFile
  555.     dim strLoadFromCfgFile
  556.     dim strCfgFileArguments
  557.     dim colStrConfigArgs
  558.     dim objTextFile
  559.  
  560.     for i=0 to UBound(args)
  561.         if args(i) = "-s_config" then
  562.             i = i + 1
  563.         else
  564.             strArguments = strArguments & args(i) & " "
  565.         end if
  566.  
  567.         if args(i) = "-config" then
  568.             strLoadFromCfgFile = ReadString( args, i, i+1 )
  569.             if strLoadFromCfgFile = "" then
  570.                 ParseParameters = false
  571.                 exit function
  572.             end if
  573.         
  574.             i = i + 1
  575.  
  576.             strLoadFromCfgFile = g_objFileSystem.GetAbsolutePathName( strLoadFromCfgFile )
  577.             set objTextFile = g_objFileSystem.OpenTextFile( strLoadFromCfgFile, 1 )
  578.             strCfgFileArguments = objTextFile.ReadLine
  579.             objTextFile.Close
  580.             
  581.             strCfgFileArguments = Trim( strCfgFileArguments )
  582.             if strCfgFileArguments = "" then
  583.                 OutputInfo "Configuration file " & strLoadFromCfgFile & " is empty"
  584.                 ParseParameters = false
  585.                 exit function
  586.             end if
  587.             colStrConfigArgs = Split( strCfgFileArguments )
  588.             if ParseParameters( colStrConfigArgs ) = false then
  589.                 ParseParameters = false
  590.                 exit function
  591.             end if
  592.         end if
  593.     next
  594.  
  595.     ' OutputInfo "Args = " & strArguments
  596.  
  597.     if UBound(args) = 0 then
  598.         ' If it has only has one parameter, check the content of this parameter.
  599.         select case LCase( args(0) )     
  600.             case "-devices":
  601.                 ' List all audio and video devices.
  602.                 ListDevices()
  603.                 ParseParameters = false
  604.                 exit function
  605.  
  606.             case "-a_codecs":
  607.                 ' List all audio codecs.
  608.                 ListAudioCodecs()
  609.                 ParseParameters = false
  610.                 exit function
  611.  
  612.             case "-a_formats"
  613.                 ' List audio formats
  614.                 ListAudioFormats()
  615.                 ParseParameters = false
  616.                 exit function
  617.             
  618.             case "-v_codecs":
  619.                 ' List all video codecs.
  620.                 ListVideoCodecs()
  621.                 ParseParameters = false
  622.                 exit function
  623.             
  624.             case "-help":
  625.                 ' Show help information.
  626.                 ShowHelp()
  627.                 ParseParameters = false
  628.                 exit function
  629.  
  630.             case "-?":
  631.                 ' Show help information.
  632.                 ShowHelp()
  633.                 ParseParameters = false
  634.                 exit function
  635.  
  636.             case "-all?":
  637.                 ' Show help information.
  638.                 ShowHelp()
  639.                 ParseParameters = false
  640.                 exit function
  641.             
  642.             case "/?":
  643.                 ' Show help information.
  644.                 ShowHelp()
  645.                 ParseParameters = false
  646.                 exit function
  647.             
  648.             case "-help?"
  649.                 ' Being up the encoder util chm
  650.                 ShowHelpChm()
  651.                 ParseParameters = false
  652.                 exit function
  653.  
  654.         end select
  655.     end if
  656.  
  657.     if UBound(args) = 1 then
  658.         select case LCase( args(0) ) 
  659.             case "-input"
  660.             ' Print out info about file specified
  661.             g_strInput = ReadString( args, 0, 1 )
  662.             if g_strInput = ""  then
  663.                 ParseParameters = false
  664.                 exit function
  665.             end if
  666.  
  667.             PrintFileInfo()
  668.             ParseParameters = false
  669.             exit function
  670.         end select
  671.     end if
  672.  
  673.     ' Check all parameters.
  674.     for i=0 to UBound(args)
  675.     
  676.         select case LCase( args(i) )
  677.             ' Parse all input related stuff
  678.             case "-wme"
  679.                 ' Get the WME file name to be load.
  680.                 g_strWMEFile = ReadString( args, i, i+1 )
  681.                 if g_strWMEFile = "" then
  682.                     ParseParameters = false
  683.                     exit function
  684.                 end if
  685.         
  686.                 i = i + 1
  687.  
  688.             case "-input"                        
  689.                 ' Get input source file name.
  690.                 g_strInput = ReadString( args, i, i+1 )
  691.                 if g_strInput = ""  then
  692.                     ParseParameters = false
  693.                     exit function
  694.                 end if
  695.         
  696.                 i = i + 1
  697.  
  698.             case "-audioonly"
  699.                 g_blnAudioOnly = true
  700.  
  701.             case "-videoonly"
  702.                 g_blnVideoOnly = true
  703.  
  704.             case "-adevice"
  705.                 g_blnDevice = true
  706.                 ' Get audio device index.
  707.                 if i+1 <= UBound(args) and Left( args(i+1), 1 ) <> "-" then
  708.                     g_intAudioDevice = ReadInteger( args, i, i+1 )
  709.                     if g_intAudioDevice = -1 then
  710.                         ParseParameters = false
  711.                         exit function
  712.                     end if
  713.                     
  714.                     i = i + 1
  715.                 else
  716.                     g_intAudioDevice = 0     ' default audio device
  717.                 end if
  718.  
  719.             case "-vdevice"
  720.                 g_blnDevice = true
  721.                 ' Get video device index.
  722.                 if i+1 <= UBound(args) and Left( args(i+1), 1 ) <> "-" then
  723.                     g_intVideoDevice = ReadInteger( args, i, i+1 )
  724.                     if g_intVideoDevice = -1 then
  725.                         ParseParameters = false
  726.                         exit function
  727.                     end if
  728.                 
  729.                     i = i + 1
  730.                 else
  731.                     g_intVideoDevice = 0     ' default video device
  732.                 end if
  733.  
  734.             ' Parse all profile related stuff
  735.             case "-profile"
  736.                 ' Get input source file name.
  737.                 g_strProfile = ReadString( args, i, i+1 )
  738.                 if g_strProfile = ""  then
  739.                     ParseParameters = false
  740.                     exit function
  741.                 end if
  742.         
  743.                 i = i + 1
  744.  
  745.             ' Parse audio related stuff
  746.             case "-a_mode"
  747.                 g_intAudioVBRMode = ReadInteger( args, i, i+1 )
  748.                 if g_intAudioVBRMode = -1 then
  749.                     ParseParameters = false
  750.                     exit function
  751.                 end if
  752.         
  753.                 i = i + 1
  754.  
  755.             case "-a_codec"
  756.                 'Get audio codec name
  757.                 g_strAudioCodec = ReadString( args, i, i+1 )
  758.                 g_strAudioCodec = UCase( g_strAudioCodec )
  759.  
  760.                 if g_strAudioCodec <> WMA9STD and g_strAudioCodec <> WMA9PRO and g_strAudioCodec <> WMA9LSL and g_strAudioCodec <> WMSPEECH and g_strAudioCodec <> PCM then
  761.                     OutputInfo "Please enter correct audio codec index only"
  762.                     ParseParameters = false
  763.                     exit function
  764.                 end if
  765.  
  766.                 if g_strAudioCodec = ""  then
  767.                     ParseParameters = false
  768.                     exit function
  769.                 end if
  770.         
  771.                 i = i + 1
  772.  
  773.             case "-a_setting"
  774.                 'Get audio setting
  775.                 g_strAudioSetting = ReadString( args, i, i+1 )
  776.                 if g_strAudioSetting = ""  then
  777.                     ParseParameters = false
  778.                     exit function
  779.                 end if
  780.         
  781.                 i = i + 1
  782.  
  783.             case "-a_peakbitrate"
  784.                 'Get audio peakbitrate size
  785.                 g_intAudioPeakBitrate = ReadInteger( args, i, i+1 )
  786.                 if g_intAudioPeakBitrate = -1  then
  787.                     ParseParameters = false
  788.                     exit function
  789.                 end if
  790.         
  791.                 i = i + 1
  792.  
  793.             case "-a_peakbuffer"
  794.                 'Get audio peakbuffer size
  795.                 g_intAudioPeakBuffer = ReadInteger( args, i, i+1 )
  796.                 if g_intAudioPeakBuffer = -1  then
  797.                     ParseParameters = false
  798.                     exit function
  799.                 end if
  800.         
  801.                 i = i + 1
  802.  
  803.             case "-a_content"
  804.                 'Get content type for speech
  805.                 g_intAudioSpeechContent = ReadInteger( args, i, i+1 )
  806.                 if g_intAudioSpeechContent = -1 then
  807.                     ParseParameters = false
  808.                     exit function
  809.                 elseif g_intAudioSpeechContent < 0 or g_intAudioSpeechContent > 2 then
  810.                     OutputInfo "Invalid range for parameter " & args(i)
  811.                     ParseParameters = false
  812.                     exit function
  813.                 end if
  814.         
  815.                 i = i + 1
  816.  
  817.             case "-a_contentedl"
  818.                 'Get EDL file for speech content
  819.                 g_strAudioSpeechEdl = ReadString( args, i, i+1 )
  820.                 if g_strAudioSpeechEdl = ""  then
  821.                     ParseParameters = false
  822.                     exit function
  823.                 end if
  824.         
  825.                 i = i + 1
  826.  
  827.             case "-a_folddown6to2"
  828.                 'Get EDL file for speech content
  829.                 g_intAudioSurroundMix = ReadInteger( args, i, i+1 )
  830.                 if g_intAudioSurroundMix = -1  then
  831.                     ParseParameters = false
  832.                     exit function
  833.                 end if
  834.                 g_intAudioCenterMix = ReadInteger( args, i, i+2 )
  835.                 if g_intAudioCenterMix = -1  then
  836.                     ParseParameters = false
  837.                     exit function
  838.                 end if    
  839.                 g_intAudioLEFMix = ReadInteger( args, i, i+3 )
  840.                 if g_intAudioLEFMix = -1  then
  841.                     ParseParameters = false
  842.                     exit function
  843.                 end if
  844.         
  845.                 i = i + 3
  846.  
  847.             ' Parse video related stuff
  848.             case "-v_mode"
  849.                 g_intVideoVBRMode = ReadInteger( args, i, i+1 )
  850.                 if g_intVideoVBRMode = -1 then
  851.                     ParseParameters = false
  852.                     exit function
  853.                 end if
  854.         
  855.                 i = i + 1
  856.  
  857.             case "-v_codec"
  858.                 'Get video codec name
  859.                 g_strVideoCodec = ReadString( args, i, i+1 )
  860.                 g_strVideoCodec = UCase( g_strVideoCodec )
  861.                 if g_strVideoCodec <> WMV7 and g_strVideoCodec <> WMV8 and g_strVideoCodec <> WMV9 and g_strVideoCodec <> WMS9 and g_strVideoCodec <> MP41 and g_strVideoCodec <> UNCOMP then
  862.                     OutputInfo "Please enter correct video codec index only"
  863.                     ParseParameters = false
  864.                     exit function
  865.                 end if
  866.  
  867.                 if g_strVideoCodec = ""  then
  868.                     ParseParameters = false
  869.                     exit function
  870.                 end if
  871.         
  872.                 i = i + 1
  873.  
  874.             case "-v_bitrate"
  875.                 'Get video bitrate
  876.                 g_intVideoBitrate = ReadInteger( args, i, i+1 )
  877.                 if g_intVideoBitrate = -1  then
  878.                     ParseParameters = false
  879.                     exit function
  880.                 end if
  881.         
  882.                 i = i + 1
  883.  
  884.             case "-v_buffer"
  885.                 'Get video buffer
  886.                 g_intVideoBuffer = ReadInteger( args, i, i+1 )
  887.                 if g_intVideoBuffer = -1  then
  888.                     ParseParameters = false
  889.                     exit function
  890.                 end if
  891.         
  892.                 i = i + 1
  893.  
  894.             case "-v_width"
  895.                 'Get video width
  896.                 g_intVideoWidth = ReadInteger( args, i, i+1 )
  897.                 if g_intVideoWidth = -1  then
  898.                     ParseParameters = false
  899.                     exit function
  900.                 end if
  901.         
  902.                 i = i + 1
  903.  
  904.             case "-v_height"
  905.                 'Get video height
  906.                 g_intVideoHeight = ReadInteger( args, i, i+1 )
  907.                 if g_intVideoHeight = -1  then
  908.                     ParseParameters = false
  909.                     exit function
  910.                 end if
  911.         
  912.                 i = i + 1
  913.  
  914.             case "-v_framerate"
  915.                 'Get video framerate
  916.                 g_intVideoFramerate = ReadFloat( args, i, i+1 )
  917.                 if g_intVideoFramerate = -1  then
  918.                     ParseParameters = false
  919.                     exit function
  920.                 end if
  921.                 g_intVideoFramerate = 1000 * g_intVideoFramerate
  922.         
  923.                 i = i + 1
  924.  
  925.             case "-v_keydist"
  926.                 'Get video keyframe distance
  927.                 g_intVideoKeydist = ReadInteger( args, i, i+1 )
  928.                 if g_intVideoKeydist = -1  then
  929.                     ParseParameters = false
  930.                     exit function
  931.                 end if
  932.  
  933.                 g_intVideoKeydist = 1000 * g_intVideoKeydist
  934.         
  935.                 i = i + 1
  936.  
  937.             case "-v_quality"
  938.                 'Get video bufferwindow size
  939.                 g_intVideoQuality = ReadInteger( args, i, i+1 )
  940.                 if g_intVideoQuality = -1  then
  941.                     ParseParameters = false
  942.                     exit function
  943.                 end if
  944.         
  945.                 i = i + 1
  946.  
  947.             case "-v_peakbitrate"
  948.                 'Get video peakbitrate size
  949.                 g_intVideoPeakBitrate = ReadInteger( args, i, i+1 )
  950.                 if g_intVideoPeakBitrate = -1  then
  951.                     ParseParameters = false
  952.                     exit function
  953.                 end if
  954.         
  955.                 i = i + 1
  956.  
  957.             case "-v_peakbuffer"
  958.                 'Get video peakbuffer size
  959.                 g_intVideoPeakBuffer = ReadInteger( args, i, i+1 )
  960.                 if g_intVideoPeakBuffer = -1  then
  961.                     ParseParameters = false
  962.                     exit function
  963.                 end if
  964.         
  965.                 i = i + 1
  966.  
  967.             case "-v_performance"
  968.                 'Get video complexity setting
  969.                 g_intVideoPerformance = ReadInteger( args, i, i+1 )
  970.                 if g_intVideoPerformance <> 0 and g_intVideoPerformance <> 20 and g_intVideoPerformance <> 40 and g_intVideoPerformance <> 60 and g_intVideoPerformance <> 80 and g_intVideoPerformance <> 100 then
  971.                     ParseParameters = false
  972.                     exit function
  973.                 end if
  974.  
  975.                 i = i + 1
  976.  
  977.             case "-v_preproc"
  978.                 'Get video preprocess setting
  979.                 g_intVideoPreprocess = ReadInteger( args, i, i+1 )
  980.                 if g_intVideoPreprocess = -1  or g_intVideoPreprocess > 18 then
  981.                     OutputInfo "Invalid preproc value: " & args(i+1)
  982.                     ParseParameters = false
  983.                     exit function
  984.                 end if
  985.     
  986.                 i = i + 1
  987.  
  988.             case "-pixelformat"
  989.                 ' Get pixelformat.
  990.                 g_strPixelFormat = ReadString( args, i, i+1 )
  991.                 if g_strPixelFormat = "" then
  992.                     ParseParameters = false
  993.                     exit function
  994.                 end if
  995.         
  996.                 i = i + 1
  997.  
  998.             case "-pixelratio"
  999.                 ' Get pixelformat.
  1000.                 g_intPixelAspectRatioX = ReadInteger( args, i, i+1 )
  1001.                 g_intPixelAspectRatioY = ReadInteger( args, i, i+2 )
  1002.  
  1003.                 if g_intPixelAspectRatioX = -1 or g_intPixelAspectRatioY = -1 then
  1004.                     ParseParameters = false
  1005.                     exit function
  1006.                 end if
  1007.         
  1008.                 i = i + 2
  1009.  
  1010.             case "-v_clip"
  1011.                 ' Get clipping values.
  1012.                 g_intClipLeft   = ReadInteger( args, i, i+1 )
  1013.                 g_intClipTop    = ReadInteger( args, i, i+2 )
  1014.                 g_intClipRight  = ReadInteger( args, i, i+3 )
  1015.                 g_intClipBottom = ReadInteger( args, i, i+4 )
  1016.  
  1017.                 if g_intClipLeft = -1 or g_intClipTop = -1 or g_intClipRight = -1 or g_intClipBottom = -1 then
  1018.                     ParseParameters = false
  1019.                     exit function
  1020.                 end if
  1021.  
  1022.                 i = i + 4
  1023.  
  1024.             case "-v_profile"
  1025.                 ' Get video device conformance value
  1026.                 g_strVideoDevConf = ReadString( args, i, i+1 )
  1027.                 g_strVideoDevConf = UCase( g_strVideoDevConf )
  1028.  
  1029.                 if g_strVideoDevConf = ""  then
  1030.                     ParseParameters = false
  1031.                     exit function
  1032.                 end if
  1033.         
  1034.                 i = i + 1
  1035.  
  1036.             ' Parse all output related stuff
  1037.             case "-output"                        
  1038.                 ' Get output file name.
  1039.                 g_strOutput = ReadString( args, i, i+1 )
  1040.                 if g_strOutput = "" then
  1041.                     ParseParameters = false
  1042.                     exit function
  1043.                 end if
  1044.         
  1045.                 i = i + 1
  1046.  
  1047.             case "-outputstring"
  1048.                 ' Read in the string that is to be appended to output file name
  1049.                 g_strOutputString = ReadString( args, i, i+1 )
  1050.                 if g_strOutputString = "" then
  1051.                     ParseParameters = false
  1052.                     exit function
  1053.                 end if
  1054.         
  1055.                 i = i + 1
  1056.  
  1057.             case "-broadcast"
  1058.                 ' Get broadcast port number.
  1059.                 if i+1 <= UBound(args) and Left( args(i+1), 1 ) <> "-" then
  1060.                     g_intBroadcast = ReadInteger( args, i, i+1 )
  1061.                     if g_intBroadcast = -1 then
  1062.                         ParseParameters = false
  1063.                         exit function
  1064.                     end if
  1065.         
  1066.                     i = i + 1
  1067.                 else
  1068.                     g_intBroadcast = 8080
  1069.                 end if
  1070.  
  1071.             case "-push"
  1072.                 ' Get push server, pub point and template name (optional)
  1073.                 g_strPushServer = ReadString( args, i, i+1 )
  1074.                 g_strPublishingPoint = ReadString( args, i, i+2 )
  1075.  
  1076.                 if g_strPushServer = "" or g_strPublishingPoint = "" then
  1077.                     ParseParameters = false
  1078.                     exit function
  1079.                 end if
  1080.  
  1081.                 ' Check if template name is specified
  1082.                 if i+1 <= UBound(args) and Left( args(i+3), 1 ) <> "-" then
  1083.                     g_strPushTemplate = ReadString( args, i, i+3 )
  1084.                     i = i + 3
  1085.                 else
  1086.                     i = i + 2
  1087.                 end if
  1088.  
  1089.             case "-time"
  1090.                 ' Get the mark in time of the source file.
  1091.                 g_intMarkInTime = ReadInteger( args, i, i+1 )
  1092.  
  1093.                 ' Get the markout time of the source file
  1094.                 strMarkOutTime = ReadString( args, i, i+2 )
  1095.                 if strMarkOutTime <> "end" then
  1096.                     g_intMarkOutTime = ConvertStringToInteger( strMarkOutTime )
  1097.                 else
  1098.                     g_intMarkOutTime = 0
  1099.                 end if
  1100.  
  1101.                 if g_intMarkInTime = -1 or g_intMarkOutTime = -1 then
  1102.                     ParseParameters = false
  1103.                     exit function
  1104.                 end if
  1105.         
  1106.         
  1107.                 i = i + 2
  1108.  
  1109.             case "-duration"
  1110.                 ' Get the duration of the encoding session.
  1111.                 g_intDuration = ReadInteger( args, i, i+1 )
  1112.                 if g_intDuration = -1 then
  1113.                     ParseParameters = false
  1114.                     exit function
  1115.                 end if
  1116.         
  1117.                 i = i + 1
  1118.  
  1119.             case "-silent"
  1120.                 g_blnSilent = true
  1121.  
  1122.             ' Parse all attributes
  1123.             case "-title"
  1124.                 ' Get the title of the output file.
  1125.                 g_strTitle = ReadString( args, i, i+1 )
  1126.                 if g_strTitle = "" then
  1127.                     ParseParameters = false
  1128.                     exit function
  1129.                 end if
  1130.  
  1131.                 i = i + 1
  1132.  
  1133.             case "-author"                        
  1134.                 ' Get the author of the output file.
  1135.                 g_strAuthor = ReadString( args, i, i+1 )
  1136.                 if g_strAuthor = "" then
  1137.                     ParseParameters = false
  1138.                     exit function
  1139.                 end if
  1140.         
  1141.                 i = i + 1
  1142.  
  1143.             case "-copyright"                        
  1144.                 ' Get the copyright information of the output file.
  1145.                 g_strCopyright = ReadString( args, i, i+1 )
  1146.                 if g_strCopyright = "" then
  1147.                     ParseParameters = false
  1148.                     exit function
  1149.                 end if
  1150.         
  1151.                 i = i + 1
  1152.  
  1153.             case "-description"
  1154.                 ' Get the descrption of the output file.
  1155.                 g_strDescription = ReadString( args, i, i+1 )
  1156.                 if g_strDescription = "" then
  1157.                     ParseParameters = false
  1158.                     exit function
  1159.                 end if
  1160.         
  1161.                 i = i + 1
  1162.  
  1163.             case "-rating"                        
  1164.                 ' Get the rating of the output file.
  1165.                 g_strRating = ReadString( args, i, i+1 )
  1166.                 if g_strRating = "" then
  1167.                     ParseParameters = false
  1168.                     exit function
  1169.                 end if
  1170.         
  1171.                 i = i + 1
  1172.  
  1173.             case "-saveprofile"                            
  1174.                 ' Get the profile file name to be saved.
  1175.                 g_strProfileSave = ReadString( args, i, i+1 )
  1176.                 if g_strProfileSave = "" then
  1177.                     ParseParameters = false
  1178.                     exit function
  1179.                 end if
  1180.         
  1181.                 i = i + 1
  1182.         
  1183.             case "-loadprofile"                            
  1184.                 ' Get the profile file name to be loaded.
  1185.                 g_strProfileLoad = ReadString( args, i, i+1 )
  1186.                 if g_strProfileLoad = "" then
  1187.                     ParseParameters = false
  1188.                     exit function
  1189.                 end if
  1190.         
  1191.                 i = i + 1
  1192.  
  1193.             case "-verbose"
  1194.                 ' Get the verbose mode.
  1195.                 g_intVerbose = ReadInteger( args, i, i+1 )
  1196.                 if g_intVerbose = -1 then
  1197.                     ParseParameters = false
  1198.                     exit function
  1199.                 end if
  1200.  
  1201.                 i = i + 1
  1202.  
  1203.             case "-s_config"
  1204.                 ' Save the WEU configuration file
  1205.                 strSaveToCfgFile = ReadString( args, i, i+1 )
  1206.                 if strSaveToCfgFile = "" then
  1207.                     ParseParameters = false
  1208.                     exit function
  1209.                 end if
  1210.  
  1211.                 i = i + 1
  1212.             case "-config"
  1213.                 if strLoadFromCfgFile = "" then
  1214.                     ParseParameters = false
  1215.                     exit function
  1216.                 end if
  1217.         
  1218.                 i = i + 1
  1219.  
  1220.             case else
  1221.                 ' Show an error information for unrecognized parameter.
  1222.                 OutputInfo "Invalid parameter: " & args(i)
  1223.                 ParseParameters = false
  1224.                 exit function
  1225.         end select
  1226.     
  1227.     next
  1228.  
  1229.     if strSaveToCfgFile <> "" then
  1230.         strSaveToCfgFile = g_objFileSystem.GetAbsolutePathName( strSaveToCfgFile )
  1231.  
  1232.         ' Add extension if necessary
  1233.         if Right( LCase( strSaveToCfgFile ), 4 ) <>  ".weu" then
  1234.             strSaveToCfgFile = strSaveToCfgFile & ".weu"
  1235.         end if
  1236.  
  1237.         CreateOutputFolder( g_objFileSystem.GetParentFolderName( strSaveToCfgFile ) )    
  1238.         set objTextFile = g_objFileSystem.OpenTextFile( strSaveToCfgFile, 2, True )
  1239.         objTextFile.Write( strArguments )
  1240.         objTextFile.close
  1241.     end if
  1242.  
  1243.     ParseParameters = true
  1244. end function
  1245.  
  1246. ' Show help information of this program.
  1247. function ShowHelp()
  1248.     OutputInfo "Encode from files or devices to Windows Media files or streams. Supported"
  1249.     OutputInfo "source file formats are .wmv, .wma, .asf, .avi., .wav. .mpg, .mp3, .bmp,"
  1250.     OutputInfo "and .jpg."
  1251.     OutputInfo ""
  1252.     OutputInfo ""
  1253.     OutputInfo "Usage for I/O and statistics."
  1254.     OutputInfo ""
  1255.     OutputInfo "[-wme] <Windows Media Encoder session file>"
  1256.     OutputInfo "    Loads an existing Windows Media Encoder session file."
  1257.     OutputInfo "[-input] <file or directory name>"
  1258.     OutputInfo "    The file or directory to be encoded."
  1259.     OutputInfo "    Specify a file or directory name. If you specify a directory, supported"
  1260.     OutputInfo "    files in the directory will be encoded to the output directory, using"
  1261.     OutputInfo "    the same encoding settings. "
  1262.     OutputInfo "    Enclose file and directory names that have spaces in quotations."
  1263.     OutputInfo "    For example: -input ""c:\my sample.wmv"""
  1264.     OutputInfo "[-adevice] <audio device number>"
  1265.     OutputInfo "    The audio capture device to encode from."
  1266.     OutputInfo "    Use -devices to list all available capture devices."  
  1267.     OutputInfo "    When encoding from devices, you must specify a duration using -duration."      
  1268.     OutputInfo "[-vdevice] <video device number>"
  1269.     OutputInfo "    The video capture device to encode from."
  1270.     OutputInfo "    Use -devices to list all available capture devices."  
  1271.     OutputInfo "    When capturing from devices, you must specify a duration using -duration."      
  1272.     OutputInfo "[-output] <file or directory name>"
  1273.     OutputInfo "    The name of the output file or directory."
  1274.     OutputInfo "    If the input is a file, -output corresponds to a file name. If the input"
  1275.     OutputInfo "    is a directory, -output corresponds to a directory name."
  1276.     OutputInfo "    The output directory will be created if it doesn't already exist."
  1277.     OutputInfo "    An extension is automatically appended to output files."
  1278.     OutputInfo "    (.wma for audio-only Windows Media files, and .wmv for video-only or"
  1279.     OutputInfo "    audio and video Windows Media files.)"
  1280.     OutputInfo "[-outputstring] <string>"
  1281.     OutputInfo "    The string to be attached to every output file name for directory mode."
  1282.     OutputInfo "[-broadcast] <port>"
  1283.     OutputInfo "    Broadcasts via HTTP on the port specified. The default port is 8080."
  1284.     OutputInfo "[-time] <start time> <end time>"
  1285.     OutputInfo "    Specify the time segment (in msec) to be encoded. Use 'end' for"
  1286.     OutputInfo "    <end time> if you want to encode to the end of the file."
  1287.     OutputInfo "[-silent]"
  1288.     OutputInfo "    Prevents statistics from being displayed after encoding is finished."
  1289.     OutputInfo "[-config] <input configuration file>"
  1290.     OutputInfo "    Inputs arguments from a configuration file. The default extension is .weu."
  1291.     OutputInfo "    Parameters in the file can be overridden by later arguments."
  1292.     OutputInfo "[-s_config] <output configuration file>"
  1293.     OutputInfo "    Creates a configuration file. The file name extension .weu is appended"
  1294.     OutputInfo "    automatically."
  1295.     OutputInfo ""
  1296.     OutputInfo ""
  1297.     OutputInfo "Usage for profiles."
  1298.     OutputInfo "    You can override parameters in a profile by appending arguments to a"
  1299.     OutputInfo "    command."
  1300.     OutputInfo ""
  1301.     OutputInfo "[-profile] <profile code>"
  1302.     OutputInfo "    Specifies a predefined profile to use in the session."
  1303.     OutputInfo ""
  1304.     OutputInfo "Codes and basic descriptions for the predefined profiles:"
  1305.     OutputInfo "Audio/Video:"
  1306.     OutputInfo "    av20: Profile_AudioVideo_Modem_28K (actual rate: 20Kbps)"
  1307.     OutputInfo "    av32: Profile_AudioVideo_Modem_56K (32 Kbps)"
  1308.     OutputInfo "    av100: Profile_AudioVideo_LAN_100K (100 Kbps)"
  1309.     OutputInfo "    av225: Profile_AudioVideo_LAN_256K (225 Kbps)"
  1310.     OutputInfo "    av350: Profile_AudioVideo_LANDSL_384K (350 Kbps)"
  1311.     OutputInfo "    av450: Profile_AudioVideo_LANDSL_768K (450 Kbps)"
  1312.     OutputInfo "    av700: Profile_AudioVideo_NearBroadcast_700K (700 Kbps)"
  1313.     OutputInfo "    av1400: Profile_AudioVideo_NearBroadcast_1400K (1400 Kbps)"
  1314.     OutputInfo "    av350pal: Profile_AudioVideo_Broadband_PAL_384K (350 Kbps)"
  1315.     OutputInfo "    av700pal: Profile_AudioVideo_NearBroadcast_PAL_700K (700 Kbps)"
  1316.     OutputInfo "    av100_2p: Profile_AudioVideo_LAN_100K_2Pass (100 Kbps)"
  1317.     OutputInfo "    av350_2p: Profile_AudioVideo_LANDSL_384K_2Pass (350 Kbps)"
  1318.     OutputInfo "    av600vbr: Profile_AudioVideo_FilmVBR_600K (600 Kbps)"
  1319.     OutputInfo "    avq97vbr: Profile_AudioVideo_FilmVBR_Quality97 (Quality 97)"
  1320.     OutputInfo ""
  1321.     OutputInfo "Audio-only:"
  1322.     OutputInfo "    a20_1: Profile_AudioOnly_FMRadioMono_28K (20 Kbps)"
  1323.     OutputInfo "    a20_2: Profile_AudioOnly_FMRadioStereo_28K (20 Kbps)"
  1324.     OutputInfo "    a32: Profile_AudioOnly_Modem_56K (32 Kbps)"
  1325.     OutputInfo "    a48: Profile_AudioOnly_NearCDQuality_48K (48 Kbps)"
  1326.     OutputInfo "    a64: Profile_AudioOnly_CDQuality_64K (64 Kbps)"
  1327.     OutputInfo "    a96: Profile_AudioOnly_CDAudiophileQuality_96K (96 Kbps)"
  1328.     OutputInfo "    a128: Profile_AudioOnly_CDAudiophileQuality_128K (128 Kbps)"
  1329.     OutputInfo ""
  1330.     OutputInfo "Video-only:"
  1331.     OutputInfo "    v20: Profile_VideoOnly_Modem_28K (20 Kbps)"
  1332.     OutputInfo "    v32: Profile_VideoOnly_Modem_56K (32 Kbps)"
  1333.     OutputInfo ""
  1334.     OutputInfo "[-loadprofile] <profile file name>"
  1335.     OutputInfo "    Specifies a Windows Media Encoder or custom profile to use."
  1336.     OutputInfo ""
  1337.     OutputInfo ""
  1338.     OutputInfo "Usage for audio settings."
  1339.     OutputInfo ""
  1340.     OutputInfo "[-a_codec] <codec index>"
  1341.     OutputInfo "    Audio codec to be used. Use -a_codecs to list available codecs."
  1342.     OutputInfo "    Specify codec index:"
  1343.     OutputInfo "    WMA9STD: Windows Media Audio 9 (default)."
  1344.     OutputInfo "    WMA9PRO: Windows Media Audio 9 Professional"
  1345.     OutputInfo "    WMSP9:   Windows Media Audio 9 Voice"
  1346.     OutputInfo "    WMA9LSL:  Windows Media Audio 9 Lossless; -a_mode 2 required"
  1347.     OutputInfo "    PCM: No compression"
  1348.     OutputInfo "[-a_codecs]"
  1349.     OutputInfo "    Lists all audio codecs."
  1350.     OutputInfo "[-a_content] <mode>"
  1351.     OutputInfo "    Audio content mode for the Windows Media Audio v9 Voice codec."
  1352.     OutputInfo "    0 = No special mode for the audio content (default)"
  1353.     OutputInfo "    1 = Speech mode"
  1354.     OutputInfo "    2 = Mixed (speech and music) mode (also requires -a_contentedl)"
  1355.     OutputInfo "    You must also specify the Windows Media Audio v9 Voice codec."
  1356.     OutputInfo "[-a_contentedl] <file name>"
  1357.     OutputInfo "    Specifies the places in audio content where music starts and ends. To do"
  1358.     OutputInfo "    this, you must first create an optimization definition file. You"
  1359.     OutputInfo "    must specify the Windows Media Audio Voice codec and -a_content 2 when"
  1360.     OutputInfo "    when you use the -a_contentedl option."
  1361.     OutputInfo "[-a_folddown6to2] <surround mix> <center mix> <LFE>"
  1362.     OutputInfo "    Fold-down coefficients for multichannel audio. Use whole numbers only."
  1363.     OutputInfo "    Values will be converted to negative numbers. Valid numbers are 0 to 144."
  1364.     OutputInfo "    For example, -a_folddown6to2 10 3 3"
  1365.     OutputInfo "[-a_formats]"
  1366.     OutputInfo "    Lists all audio formats for each codec."
  1367.     OutputInfo "[-a_mode] <mode_number>"
  1368.     OutputInfo "    Audio encoding to be used."
  1369.     OutputInfo "    0: 1-pass CBR (default)."
  1370.     OutputInfo "    1: 2-pass CBR."
  1371.     OutputInfo "    2: Quality-based VBR."
  1372.     OutputInfo "    3: Bit rate-based VBR (two-pass)."
  1373.     OutputInfo "    4: Bit rate-based peak VBR (two-pass)." 
  1374.     OutputInfo "[-a_peakbitrate] <peak bit rate>"
  1375.     OutputInfo "    Specifies the peak bit rate in bits per second for peak bit rate-based"
  1376.     OutputInfo "    VBR for audio. If not specified, the peak bit rate is 1.5 times the"
  1377.     OutputInfo "    audio bit rate."
  1378.     OutputInfo "[-a_peakbuffer] <peak buffer>"
  1379.     OutputInfo "    Buffer in msec for audio with peak bit rate-based VBR. If not specified,"
  1380.     OutputInfo "    the default of 3000 msec is used."
  1381.     OutputInfo "[-a_setting] <setting>"
  1382.     OutputInfo "    Specifies the formats for audio setting."
  1383.     OutputInfo "    Use -a_formats to list supported audio formats for each codec."
  1384.     OutputInfo ""
  1385.     OutputInfo "    -a_setting Bitrate_SamplingRate_Channels. For example, -a_setting 48_44_2"
  1386.     OutputInfo "    specifies 48 Kbps, 44 kHz, and two channels. The default is 64_44_2."
  1387.     OutputInfo ""
  1388.     OutputInfo "    If you use quality-based VBR: -a_setting Qxx_SamplingRate_Channels."
  1389.     OutputInfo "    For example, -a_setting Q90_44_2 specifies a quality level of 90, 44 kHz,"
  1390.     OutputInfo "    and 2 channels."
  1391.     OutputInfo ""
  1392.     OutputInfo "    If you use the Windows Media Audio Professional 9:" 
  1393.     OutputInfo "    -a_setting Bitrate_SamplingRate_Channels_BitDepth."
  1394.     OutputInfo "    For example, -a_setting 250_44_2_24 specifies 250 Kbps, 44 kHz, "
  1395.     OutputInfo "    two channels, and 24-bit encoding. Use either 16- or 24-bit encoding."
  1396.     OutputInfo "    24-bit is the default."
  1397.     OutputInfo ""
  1398.     OutputInfo "    If you use the Windows Media Audio 9 Lossless codec:"
  1399.     OutputInfo "    -a_setting Qxx_SamplingRate_Channels_BitDepth. For example,"
  1400.     OutputInfo "    -a_setting Q100_44_2_24 specifies VBR Quality 100, 44 kHz, two channel,"
  1401.     OutputInfo "    24-bit encoding. (Quality-based VBR and a quality level of 100 is"
  1402.     OutputInfo "    required with this codec.)"
  1403.     OutputInfo "[-audioonly]"
  1404.     OutputInfo "    Encodes the audio portion of the stream only."
  1405.     OutputInfo ""
  1406.     OutputInfo ""
  1407.     OutputInfo ""
  1408.     OutputInfo ""
  1409.     OutputInfo "Usage for video settings."
  1410.     OutputInfo ""
  1411.     OutputInfo "[-v_codec] <codec index>"
  1412.     OutputInfo "    Video codec to be used. Use -v_codecs to list available video codecs."
  1413.     OutputInfo "    Specify codec index:"
  1414.     OutputInfo "       WMV7: Windows Media Video 7."
  1415.     OutputInfo "       WMV8: Windows Media Video 8.1."
  1416.     OutputInfo "       WMV9: Windows Media Video 9 (default)."
  1417.     OutputInfo "       WMS9: Windows Media Video Screen 9."
  1418.     OutputInfo "       MP41: ISO MPEG-4 Video v1"
  1419.     OutputInfo "       UNCOMP: Full frames (uncompressed)"
  1420.     OutputInfo "[-v_width] <width>"
  1421.     OutputInfo "    Video frame width in pixels to be encoded. Default: Source video width."
  1422.     OutputInfo "[-v_height] <height>"
  1423.     OutputInfo "    Video frame height in pixels to be encoded. Default: Source video height."
  1424.     OutputInfo "[-v_framerate] <rate>"
  1425.     OutputInfo "    Video frame rate in floating point to be encoded. Default: 30 fps."
  1426.     OutputInfo "[-v_keydist] <time>"
  1427.     OutputInfo "    Key frame distance in seconds for video. Default: 10 seconds."
  1428.     OutputInfo "[-v_preproc] <filter number>"
  1429.     OutputInfo "    Video preprocessing for certain input sources."
  1430.     OutputInfo "    0: None (for progressive video input)."
  1431.     OutputInfo "    1: Deinterlace but preserve the size."
  1432.     OutputInfo "       For example, 640x480x30 interlace to 640x480x30 progressive."
  1433.     OutputInfo "    2: Deinterlace but halve the size."
  1434.     OutputInfo "       For example, 640x480x30 interlace to 320x240x30 progressive."
  1435.     OutputInfo "    3: Deinterlace, halve the size, and double the frame rate."
  1436.     OutputInfo "       For example, 640x480x30 interlace to 320x240x60 progressive."
  1437.     OutputInfo "    4: Deinterlace, halve vertical size, and double frame rate."
  1438.     OutputInfo "       For example, 320x480x30 interlace to 320x240x60 progressive."
  1439.     OutputInfo "    5: Inverse telecine from 30fps to 24fps."
  1440.     OutputInfo "    6: Inverse telecine - First field is top field with AA telecine pattern."
  1441.     OutputInfo "    7: Inverse telecine - First field is top field with BB telecine pattern."
  1442.     OutputInfo "    8: Inverse telecine - First field is top field with BC telecine pattern."
  1443.     OutputInfo "    9: Inverse telecine - First field is top field with CD telecine pattern."
  1444.     OutputInfo "    10:Inverse telecine - First field is top field with DD telecine pattern."
  1445.     OutputInfo "    11:Inverse telecine - First field is bottom field with AA telecine "
  1446.     OutputInfo "       pattern."
  1447.     OutputInfo "    12:Inverse telecine - First field is bottom field with BB telecine"
  1448.     OutputInfo "       pattern."
  1449.     OutputInfo "    13:Inverse telecine - First field is bottom field with BC telecine"
  1450.     OutputInfo "       pattern."
  1451.     OutputInfo "    14:Inverse telecine - First field is bottom field with CD telecine"
  1452.     OutputInfo "      pattern."
  1453.     OutputInfo "    15:Inverse telecine - First field is bottom field with DD telecine"
  1454.     OutputInfo "       pattern."
  1455.     OutputInfo "    16:Interlaced encoding."
  1456.     OutputInfo "    17:Interlaced encoding - First field is top field."
  1457.     OutputInfo "    18:Interlaced encoding - First field is bottom field."
  1458.     OutputInfo "    Default: 0: None."
  1459.     OutputInfo "[-v_clip] <left> <top> <right> <bottom>"
  1460.     OutputInfo "    The region of the image (with respect to source) to be clipped/encoded."
  1461.     OutputInfo "    If the right is 0 or greater than width, it is ignored and re-assigned"
  1462.     OutputInfo "    to width. If the bottom is 0 or greater than height, it is ignored and"
  1463.     OutputInfo "    re-assigned to height."
  1464.     OutputInfo "[-v_mode] <mode number>"
  1465.     OutputInfo "    Video encoding to be used."
  1466.     OutputInfo "    0: 1-pass CBR (default)."
  1467.     OutputInfo "    1: 2-pass CBR."
  1468.     OutputInfo "    2: Quality-based VBR."
  1469.     OutputInfo "    3: Bit rate-based VBR (two-pass)."
  1470.     OutputInfo "    4: Peak bit rate-based VBR (two-pass)."
  1471.     OutputInfo "[-v_bitrate] <bit rate>"
  1472.     OutputInfo "    Video bit rate in bits per second to be encoded. Default: 250000 bps."
  1473.     OutputInfo "    Set this to 0 for audio-only coding."
  1474.     OutputInfo "[-v_buffer] <buffer>"
  1475.     OutputInfo "    Delay buffer in milliseconds for video. Default: 5000 msec."
  1476.     OutputInfo "[-v_quality] <quality>"
  1477.     OutputInfo "    CBR: Quality/smoothness tradeoff. 0 to 100, 0 being the smoothest."
  1478.     OutputInfo "    Default: 75."
  1479.     OutputInfo "    Quality-based VBR: Image quality for the video. Encode video to the"
  1480.     OutputInfo "    specified quality, regardless of bit rate. Default: 95"
  1481.     OutputInfo "[-v_peakbitrate] <peak bit rate>"
  1482.     OutputInfo "    Peak bit rate in bits per second for peak bit rate-based VBR for video."
  1483.     OutputInfo "    If not specified, the peak bit rate is 1.5 times the video bit rate."
  1484.     OutputInfo "[-v_peakbuffer] <peak buffer>"
  1485.     OutputInfo "    Buffer in msec for video, with peak bit rate-based VBR. If not specified,"
  1486.     OutputInfo "    the default of 5000 msec is used."
  1487.     OutputInfo "[-v_performance] <performance>"
  1488.     OutputInfo "    Use to adjust hardware performance settings. Possible values: 0, 20, 40,"
  1489.     OutputInfo "    60, 80, and 100, with 100 representing the highest quality. If you do not"
  1490.     OutputInfo "    specify a value, codec defaults are used."
  1491.     OutputInfo "[-v_profile] <device conformance>"
  1492.     OutputInfo "    Specifies the category of complexity of the encoded content. Use if you"
  1493.     OutputInfo "    are targeting your content for playback on a hardware device other than"
  1494.     OutputInfo "    a computer. Some hardware devices only support certain categories. (Refer"
  1495.     OutputInfo "    to the documentation for your device for more information.) If you do not"
  1496.     OutputInfo "    add the -v_profile option to a command, the correct complexity setting is"
  1497.     OutputInfo "    selected automatically during encoding. Possible values are SP (Simple),"
  1498.     OutputInfo "    MP (main), or CP (complex)."
  1499.     OutputInfo "[-duration] <seconds>"
  1500.     OutputInfo "    Amount of time in seconds to encode. Use when sourcing from devices."
  1501.     OutputInfo "[-saveprofile] <file name>"
  1502.     OutputInfo "    Saves current settings to a file for later reuse. Default file name"
  1503.     OutputInfo "    extension is .prx."
  1504.     OutputInfo "[-devices]"
  1505.     OutputInfo "    Lists audio and video capture devices."
  1506.     OutputInfo "[-v_codecs]"
  1507.     OutputInfo "    Lists all video codecs."
  1508.     OutputInfo "[-videoonly]"
  1509.     OutputInfo "    Encodes video stream only."
  1510.     OutputInfo "[-pixelratio] <x y>"
  1511.     OutputInfo "    Specifies the video pixel aspect ratio."
  1512.     OutputInfo "[-pixelformat] <format>"
  1513.     OutputInfo "    Specifies the video pixel format. Possible values:"
  1514.     OutputInfo "    I420"
  1515.     OutputInfo "    IYUV"
  1516.     OutputInfo "    RGB24"
  1517.     OutputInfo "    RGB32"
  1518.     OutputInfo "    RGB555"
  1519.     OutputInfo "    RGB565"
  1520.     OutputInfo "    RGB8"
  1521.     OutputInfo "    UYVY"
  1522.     OutputInfo "    YUY2"
  1523.     OutputInfo "    YV12"
  1524.     OutputInfo "    YVU9"
  1525.     OutputInfo "    YVYU"
  1526.     OutputInfo ""
  1527.     OutputInfo "[-title] <string>"
  1528.     OutputInfo "    Title of the content. Enclose strings with spaces in quotations. For"
  1529.     OutputInfo "    example: -title ""Windows Media Sample"""
  1530.     OutputInfo "[-author] <string>"
  1531.     OutputInfo "[-copyright] <string>"
  1532.     OutputInfo "[-description] <string>    "
  1533.     OutputInfo "[-rating] <string>"
  1534.     OutputInfo "NOTE: The maximum string length for each one is 255.    "
  1535. end function
  1536.  
  1537. ' Brings up the encoder utility chm file
  1538. function ShowHelpChm()
  1539.     dim strChmFileName, strExeName, strCommandLine
  1540.     dim RetVal
  1541.     dim objShell, objDir
  1542.  
  1543.     'Create a shell object. we will use this to execute the command
  1544.     Set objShell = WScript.CreateObject("WScript.Shell")
  1545.  
  1546.     'Get the Windows directory object
  1547.     set objDir = g_objFileSystem.GetSpecialFolder( 0 )
  1548.  
  1549.     'make the executable name ( %windir%\hh.exe ) form the windows dir object
  1550.     strExeName = objDir.drive & "\" & objDir.name & "\"
  1551.     strExeName = strExeName & "hh.exe" 
  1552.  
  1553.     'make the full path name for the chm file to be shown
  1554.     strChmFileName = """" & ObjDir.drive & "\program files\windows media components\encoder\wmencutil.chm" & """"
  1555.  
  1556.     'make the command line
  1557.     strCommandLine = strExeName & " " & strChmFileName
  1558.  
  1559.     'run the command and dont wait for the app to finish
  1560.     RetVal = objShell.Run( strCommandLine, 4, FALSE )
  1561. end function
  1562.  
  1563. ' Print out info about the input file
  1564. function PrintFileInfo()
  1565.     dim objFileInfo
  1566.     dim strFileInfo
  1567.     dim strInput2
  1568.         
  1569.     strInput2 = g_objFileSystem.GetAbsolutePathName( g_strInput )
  1570.  
  1571.     set objFileInfo = WScript.CreateObject( "FileInfo.MediaInfo" )
  1572.  
  1573.     objFileInfo.FileName = strInput2
  1574.  
  1575.     strFileInfo = objFileInfo.MediaInfo
  1576.  
  1577.     OutputInfo strFileInfo
  1578. end function
  1579.  
  1580. ' List audio codecs.
  1581. function ListAudioCodecs()
  1582.     dim objProfile
  1583.     dim objName
  1584.     dim intFourCC
  1585.     dim intVBRMode
  1586.     dim strCodecId
  1587.     dim intCount
  1588.     
  1589.     set objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  1590.  
  1591.     OutputInfo vbCrLf & "Audio Codecs: "
  1592.  
  1593.     ' For all VBR modes    
  1594.     for intVBRMode = 1 to 4
  1595.         objProfile.VBRMode(WMENC_AUDIO, 0) = intVBRMode
  1596.  
  1597.         select case intVBRMode
  1598.             case WMENC_PVM_NONE
  1599.                 OutputInfo "CBR Mode :"
  1600.  
  1601.             case WMENC_PVM_PEAK
  1602.                 OutputInfo "Peak Bit Rate-Based VBR Audio Mode :"
  1603.  
  1604.             case WMENC_PVM_UNCONSTRAINED
  1605.                 OutputInfo "Quality-Based VBR Audio Mode :"
  1606.  
  1607.             case WMENC_PVM_BITRATE_BASED
  1608.                 OutputInfo "Bit Rate-Based VBR Audio Mode :"
  1609.     
  1610.             case else
  1611.                 OutputInfo "Unknown Mode"
  1612.         end select
  1613.  
  1614.         intCount = 0
  1615.         ' Enum all audio codecs
  1616.         for i=0 to objProfile.AudioCodecCount-1
  1617.             objProfile.EnumAudioCodec i, objName
  1618.  
  1619.             'Check and display fourcc
  1620.             intFourCC = objProfile.GetCodecFourCCFromIndex(WMENC_AUDIO, i)
  1621.             select case intFourCC
  1622.                 case WMA9STD_FOURCC
  1623.                     strCodecId = WMA9STD
  1624.  
  1625.                 case WMA9PRO_FOURCC
  1626.                     strCodecId = WMA9PRO
  1627.  
  1628.                 case WMA9LSL_FOURCC
  1629.                     strCodecId = WMA9LSL
  1630.  
  1631.                 case WMSPEECH_FOURCC
  1632.                     strCodecId = WMSPEECH
  1633.  
  1634.                 case PCM_FOURCC
  1635.                     strCodecId = PCM
  1636.  
  1637.                 case else
  1638.                     strCodecId = ""
  1639.             end select
  1640.  
  1641.             if( strCodecId <> "" ) then  
  1642.                 OutputInfo vbTab &  "[" & intCount & "] "  & strCodecId & " : " & objName
  1643.                 intCount = intCount + 1
  1644.             end if
  1645.         next
  1646.  
  1647.         OutputInfo vbCrLf
  1648.     next
  1649.     
  1650. end function
  1651.  
  1652. ' List video codecs.
  1653. function ListVideoCodecs()
  1654.     dim objProfile
  1655.     dim objName
  1656.     dim intFourCC
  1657.     dim intVBRMode
  1658.     dim strCodecId
  1659.     dim intCount
  1660.     
  1661.     set objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  1662.  
  1663.     OutputInfo vbCrLf & "Video Codecs: "
  1664.  
  1665.     ' For all VBR modes    
  1666.     for intVBRMode = 1 to 4
  1667.         objProfile.VBRMode(WMENC_VIDEO, 0) = intVBRMode
  1668.  
  1669.         select case intVBRMode
  1670.             case WMENC_PVM_NONE
  1671.                 OutputInfo "CBR Mode :"
  1672.  
  1673.             case WMENC_PVM_PEAK
  1674.                 OutputInfo "Peak Bit Rate-Based VBR Audio Mode :"
  1675.  
  1676.             case WMENC_PVM_UNCONSTRAINED
  1677.                 OutputInfo "Quality-Based VBR Audio Mode :"
  1678.  
  1679.             case WMENC_PVM_BITRATE_BASED
  1680.                 OutputInfo "Bit Rate-Based VBR Audio Mode :"
  1681.     
  1682.             case else
  1683.                 OutputInfo "Unknown Mode"
  1684.         end select
  1685.  
  1686.         intCount = 0
  1687.         ' Enum all video codecs
  1688.         for i=0 to objProfile.VideoCodecCount-1
  1689.             objProfile.EnumVideoCodec i, objName
  1690.  
  1691.             'Check and display fourcc
  1692.             intFourCC = objProfile.GetCodecFourCCFromIndex(WMENC_VIDEO, i)
  1693.             select case intFourCC
  1694.                 case WMV7_FOURCC
  1695.                     strCodecId = WMV7
  1696.  
  1697.                 case WMV8_FOURCC
  1698.                     strCodecId = WMV8
  1699.  
  1700.                 case WMV9_FOURCC
  1701.                     strCodecId = WMV9
  1702.  
  1703.                 case WMS9_FOURCC
  1704.                     strCodecId = WMS9
  1705.  
  1706.                 case MP41_FOURCC
  1707.                     strCodecId = MP41
  1708.  
  1709.                 case UNCOMP_FOURCC
  1710.                     strCodecId = UNCOMP
  1711.  
  1712.                 case else
  1713.                     strCodecId = ""
  1714.             end select
  1715.  
  1716.             if( strCodecId <> "" ) then  
  1717.                 OutputInfo vbTab &  "[" & i & "] "  & strCodecId & " : " & objName
  1718.                 intCount = intCount + 1
  1719.             end if
  1720.         next
  1721.         OutputInfo vbCrLf
  1722.     next
  1723.  
  1724.  
  1725. end function
  1726.  
  1727. ' List audio formats.
  1728. function ListAudioFormats()
  1729.     dim objProfile
  1730.     dim objName
  1731.     dim intFourCC
  1732.     dim intVBRMode
  1733.     dim strCodecId, strAudFormatName, strSetting
  1734.     dim intAudioSampleRate, intAudioChannels, intAudioBitsPerSample, intAudioBitrate 
  1735.     dim intArgSpaceCount, intBitrateSpaceCount, intSamplingRateSpaceCount, intChannelSpaceCount
  1736.     
  1737.     intArgSpaceCount = 24
  1738.     intBitrateSpaceCount = 16
  1739.     intSamplingRateSpaceCount = 20
  1740.     intChannelSpaceCount = 10
  1741.  
  1742.     set objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  1743.  
  1744.     OutputInfo vbCrLf & "Audio Codecs: "
  1745.  
  1746.     ' For all VBR modes    
  1747.     for intVBRMode = 1 to 4
  1748.         objProfile.VBRMode(WMENC_AUDIO, 0) = intVBRMode
  1749.  
  1750.         select case intVBRMode
  1751.             case WMENC_PVM_NONE
  1752.                 OutputInfo "CBR Mode :"
  1753.  
  1754.             case WMENC_PVM_PEAK
  1755.                 OutputInfo "Peak Bit Rate-Based VBR Audio Mode :"
  1756.  
  1757.             case WMENC_PVM_UNCONSTRAINED
  1758.                 OutputInfo "Quality-Based VBR Audio Mode :"
  1759.  
  1760.             case WMENC_PVM_BITRATE_BASED
  1761.                 OutputInfo "Bit Rate-Based VBR Audio Mode :"
  1762.     
  1763.             case else
  1764.                 OutputInfo "Unknown Mode"
  1765.         end select
  1766.  
  1767.         ' Enum all audio codecs
  1768.         for i=0 to objProfile.AudioCodecCount-1
  1769.             objProfile.EnumAudioCodec i, objName
  1770.  
  1771.             'Check and display fourcc
  1772.             intFourCC = objProfile.GetCodecFourCCFromIndex(WMENC_AUDIO, i)
  1773.             select case intFourCC
  1774.                 case WMA9STD_FOURCC
  1775.                     strCodecId = WMA9STD
  1776.  
  1777.                 case WMA9PRO_FOURCC
  1778.                     strCodecId = WMA9PRO
  1779.  
  1780.                 case WMA9LSL_FOURCC
  1781.                     strCodecId = WMA9LSL
  1782.  
  1783.                 case WMSPEECH_FOURCC
  1784.                     strCodecId = WMSPEECH
  1785.  
  1786.                 case PCM_FOURCC
  1787.                     strCodecId = PCM
  1788.             end select
  1789.  
  1790.             if( strCodecId <> "" ) then  
  1791.                 OutputInfo vbTab & strCodecId & " : " & objName & " (" & strCodecId & "):"
  1792.             else
  1793.                 OutputInfo vbTab & objName & ":"
  1794.             end if
  1795.  
  1796.             OutputInfo vbCrLf
  1797.  
  1798.             if intVBRMode = WMENC_PVM_UNCONSTRAINED then
  1799.                 if strCodecId <> WMA9PRO then
  1800.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Quality", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & "Channel"
  1801.                 else
  1802.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Quality", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & PadSpaces("Channel", intChannelSpaceCount) & "BitsPerSample"
  1803.                 end if
  1804.             else
  1805.                 if strCodecId <> WMA9PRO and strCodecId <> WMA9LSL then
  1806.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Bitrate", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & "Channel"
  1807.                 else
  1808.                     OutputInfo vbTab & vbTab & PadSpaces("Argument", intArgSpaceCount) & PadSpaces("Bitrate", intBitrateSpaceCount) & PadSpaces("Sampling rate", intSamplingRateSpaceCount) & PadSpaces("Channel", intChannelSpaceCount) & "BitsPerSample"
  1809.                 end if
  1810.             end if
  1811.  
  1812.             OutputInfo vbTab & vbTab & "------------------------------------------------------------------------------------"
  1813.  
  1814.             For j=0 To objProfile.audioFormatCount(i) - 1
  1815.                 intAudioBitrate = objProfile.EnumAudioFormat(i, j, strAudFormatName, intAudioSampleRate, intAudioChannels, intAudioBitsPerSample)
  1816.  
  1817.                 if intVBRMode <> WMENC_PVM_UNCONSTRAINED then
  1818.                     intAudioBitrate = CLng(intAudioBitrate / 1000)
  1819.                 else
  1820.                     intAudioBitrate = "Q" & intAudioBitrate
  1821.                 end if
  1822.  
  1823.                 if intAudioSampleRate = 88200 then
  1824.                     intAudioSampleRate = 88
  1825.                 elseif intAudioSampleRate = 44100 then
  1826.                     intAudioSampleRate = 44
  1827.                 elseif intAudioSampleRate = 22050 then
  1828.                     intAudioSampleRate = 22
  1829.                 elseif intAudioSampleRate = 11025 then
  1830.                     intAudioSampleRate = 11
  1831.                 else
  1832.                     intAudioSampleRate = Clng(intAudioSampleRate / 1000)
  1833.                 end if
  1834.  
  1835.                 if strCodecId <> WMA9PRO and strCodecId <> WMA9LSL then
  1836.                     strSetting = intAudioBitrate & "_" & intAudioSampleRate & "_" & intAudioChannels
  1837.                     OutputInfo vbTab & vbTab & PadSpaces(strSetting, intArgSpaceCount) & PadSpaces(intAudioBitrate, intBitrateSpaceCount) & PadSpaces(intAudioSampleRate, intSamplingRateSpaceCount) & intAudioChannels
  1838.                 else 
  1839.                     strSetting = intAudioBitrate & "_" & intAudioSampleRate & "_" & intAudioChannels & "_" & intAudioBitsPerSample
  1840.                     OutputInfo vbTab & vbTab & PadSpaces(strSetting, intArgSpaceCount) & PadSpaces(intAudioBitrate, intBitrateSpaceCount) & PadSpaces(intAudioSampleRate, intSamplingRateSpaceCount) & PadSpaces(intAudioChannels, intChannelSpaceCount) & intAudioBitsPerSample
  1841.                 end if
  1842.  
  1843.             next 
  1844.     
  1845.             OutputInfo vbCrLf & vbCrLf
  1846.  
  1847.         next
  1848.         OutputInfo vbCrLf
  1849.     next
  1850.     
  1851. end function
  1852.  
  1853.  
  1854. ' Add spaces to the end of arg to create intCount characters string
  1855. function PadSpaces( arg, intCount )
  1856.  
  1857.     if Len(arg) >= intCount then
  1858.         PadSpaces = arg
  1859.         exit function
  1860.     end if
  1861.  
  1862.     PadSpaces = arg & Space( intCount - Len(arg) )
  1863. end function
  1864.  
  1865.  
  1866.  
  1867. ' List all audio and video devices.
  1868. function ListDevices()
  1869.     dim objManager, objPlugin, i, j, k, count
  1870.  
  1871.     set objManager = g_objEncoder.SourcePluginInfoManager
  1872.  
  1873.     for i=0 to 1
  1874.         if i = 0 then
  1875.             OutputInfo "audio device:"
  1876.         elseif i = 1 then
  1877.             OutputInfo "video device:"
  1878.         end if
  1879.         count = 0
  1880.         for j=0 to objManager.Count-1
  1881.             set objPlugin = objManager.Item(j)
  1882.  
  1883.             if objPlugin.Resources = true then
  1884.                 if i = 0 then
  1885.                     if objPlugin.MediaType = 1 or objPlugin.MediaType = 3 then
  1886.                         ' Enum all devices in this type
  1887.                         for k=0 to objPlugin.Count-1
  1888.                             OutputInfo vbTab & count & " : " & objPlugin.Item(k)
  1889.                             count = count + 1
  1890.                         next
  1891.                     end if
  1892.                 elseif i = 1 then
  1893.                     if objPlugin.MediaType = 2 or objPlugin.MediaType = 3 or objPlugin.MediaType = 6 then
  1894.                         ' Enum all devices in this type
  1895.                         for k=0 to objPlugin.Count-1
  1896.                             OutputInfo vbTab & count & " : " & objPlugin.Item(k)
  1897.                             count = count + 1
  1898.                         next
  1899.                     end if
  1900.                 end if
  1901.             end if
  1902.         next
  1903.     next
  1904. end function
  1905.  
  1906.  
  1907. ' Setup encoder using the current settings.
  1908. function SetupEncoder( )
  1909.     
  1910.     if not CreateSourceGroup() then
  1911.         SetupEncoder = false
  1912.         exit function
  1913.     end if
  1914.  
  1915.     if not SetupInput() then
  1916.         SetupEncoder = false
  1917.         exit function
  1918.     end if
  1919.  
  1920.     if not SetupProfile() then
  1921.         SetupEncoder = false
  1922.         exit function
  1923.     end if
  1924.  
  1925.     if not SetupOutput()  then
  1926.         SetupEncoder = false
  1927.         exit function
  1928.     end if
  1929.  
  1930.     if not SetupTime() then
  1931.         SetupEncoder = false
  1932.         exit function
  1933.     end if
  1934.  
  1935.     if not SetupDisplayInfo() then
  1936.         SetupEncoder = false
  1937.         exit function
  1938.     end if
  1939.  
  1940.     g_objEncoder.AutoStop = true
  1941.  
  1942.     SetupEncoder = true
  1943. end function
  1944.  
  1945. ' Create Source group by loading from wme or adding a new one
  1946. function CreateSourceGroup()
  1947.  
  1948.     dim objProfile
  1949.     dim intCodecIndex
  1950.  
  1951.     ' If a WME file is provided, load the encoding configuration from this WME file.
  1952.     if g_strWMEFile <> "" then
  1953.         on error resume next
  1954.  
  1955.         ' Load enocder session from a WME file
  1956.         g_objEncoder.Load( g_objFileSystem.GetAbsolutePathName( g_strWMEFile ) )
  1957.  
  1958.         ' Add a new source group.
  1959.         set g_objSourceGroup = g_objEncoder.SourceGroupCollection.Item(0)
  1960.  
  1961.         set objProfile = g_objSourceGroup.Profile
  1962.         set g_objProfile = WScript.CreateObject( "WMENCENG.WMEncProfile2" )
  1963.         g_objProfile.LoadFromIWMProfile( objProfile )
  1964.  
  1965.         ' If source file has an auido stream, get the audio source.
  1966.         if g_objSourceGroup.SourceCount( WMENC_AUDIO ) > 0 then
  1967.             set g_objAudioSource = g_objSourceGroup.Source( WMENC_AUDIO, 0 )
  1968.             intCodecIndex = g_objProfile.Audience(0).AudioCodec( 0 )
  1969.             g_objProfile.EnumAudioCodec intCodecIndex, g_strAudioCodecName
  1970.         end if
  1971.  
  1972.         ' If source file has a video stream, get the video source.
  1973.         if g_objSourceGroup.SourceCount( WMENC_VIDEO ) > 0 then
  1974.             set g_objVideoSource = g_objSourceGroup.Source( WMENC_VIDEO, 0 )
  1975.             intCodecIndex = g_objProfile.Audience(0).VideoCodec( 0 )
  1976.             g_objProfile.EnumVideoCodec intCodecIndex, g_strVideoCodecName
  1977.         end if
  1978.  
  1979.         g_blnCreateCustomProfile = false
  1980.  
  1981.         if err.number <> 0 then
  1982.             OutputInfo "Loading the session (.wme) file failed: " & g_strWMEFile
  1983.             err.Clear
  1984.             CreateSourceGroup = false
  1985.             exit function
  1986.         end if
  1987.     else
  1988.         ' Create a new source group for this session
  1989.         set g_objSourceGroup = g_objEncoder.SourceGroupCollection.Add( "SG_1" )
  1990.     end if
  1991.  
  1992.     CreateSourceGroup = true
  1993. end function
  1994.  
  1995. ' Setup profile configuration
  1996. function SetupProfile()
  1997.     on error resume next
  1998.  
  1999.     dim objProfile
  2000.     dim objAudience
  2001.     dim blnRet
  2002.     dim strProfileLoad
  2003.     dim objFileInfo
  2004.     dim intVideoFramerateTemp
  2005.     dim intSourceVideoFramerate
  2006.     dim strInput2
  2007.  
  2008.     ' save the global frame rate, since we might over-write it based on the input files frame rate
  2009.     intVideoFramerateTemp = g_intVideoFramerate
  2010.  
  2011.     if IsNull(g_objProfile) then
  2012.         Set g_objProfile = WScript.CreateObject( "WMENCEng.WMEncProfile2" )
  2013.         g_objProfile.ContentType = g_intSessionType
  2014.         g_objProfile.ProfileName = "WMCMDProfile"
  2015.  
  2016.         Set objAudience = g_objProfile.AddAudience( 10000000 )
  2017.     else
  2018.         g_objProfile.ContentType = g_intSessionType
  2019.         Set objAudience = g_objProfile.Audience( 0 )
  2020.  
  2021.     end if
  2022.  
  2023.  
  2024.     if g_intVideoFramerate = -1 then
  2025.         ' Assume 30 fps unless we can get the input files framerate
  2026.         g_intVideoFramerate = 30000
  2027.     end if
  2028.  
  2029.     strInput2 = g_objFileSystem.GetAbsolutePathName( g_strInput )
  2030.     set objFileInfo = WScript.CreateObject( "FileInfo.MediaInfo" )
  2031.     objFileInfo.FileName = strInput2
  2032.     intSourceVideoFramerate = 100000
  2033.     intSourceVideoFramerate = objFileInfo.FrameRate * 1000
  2034.     if intSourceVideoFramerate = 0 then
  2035.         intSourceVideoFramerate = 100000
  2036.     end if
  2037.  
  2038.     ' Set the video frame rate to lower of the source input or user specified frame rate for better quality
  2039.     if intSourceVideoFramerate < g_intVideoFramerate then
  2040.         g_intVideoFramerate = intSourceVideoFramerate
  2041.     end if
  2042.  
  2043.     ' if profile string is specified load it
  2044.     if g_strProfile <> "" then
  2045.         blnRet = SetupPredefinedProfile( objAudience )
  2046.  
  2047.         g_blnCreateCustomProfile = false
  2048.  
  2049.         if not blnRet then
  2050.             SetupProfile = false
  2051.             exit function
  2052.         end if
  2053.     end if
  2054.  
  2055.     if g_strProfileLoad <> "" then
  2056.         strProfileLoad = g_objFileSystem.GetAbsolutePathName( g_strProfileLoad )
  2057.         g_objProfile.LoadFromFile strProfileLoad
  2058.         g_blnCreateCustomProfile = false
  2059.         Set objAudience = g_objProfile.Audience( 0 )
  2060.  
  2061.         ' enable two pass if required
  2062.         if not isnull( g_objVideoSource ) then                
  2063.             if g_objProfile.VBRMode( WMENC_VIDEO, 0 ) = WMENC_PVM_PEAK or g_objProfile.VBRMode( WMENC_VIDEO, 0 ) = WMENC_PVM_BITRATE_BASED then
  2064.                 g_objVideoSource.PreProcessPass = 1
  2065.             end if
  2066.             
  2067.             if objAudience.VideoFPS(0) > g_intVideoFramerate then
  2068.                 objAudience.VideoFPS(0) = g_intVideoFramerate
  2069.             else
  2070.                 g_intVideoFramerate = objAudience.VideoFPS(0)
  2071.             end if
  2072.         end if
  2073.  
  2074.         if not isnull( g_objAudioSource ) then                
  2075.             if g_objProfile.VBRMode( WMENC_AUDIO, 0 ) = WMENC_PVM_PEAK or g_objProfile.VBRMode( WMENC_AUDIO, 0 ) = WMENC_PVM_BITRATE_BASED then
  2076.                 g_objAudioSource.PreProcessPass = 1
  2077.             end if
  2078.         end if
  2079.     end if
  2080.  
  2081.     ' First time: override the WME or predefined profile with custom values
  2082.     blnRet = SetupCustomProfile( objAudience )
  2083.     if not blnRet then
  2084.         SetupProfile = false
  2085.         exit function
  2086.     end if
  2087.  
  2088.     if g_blnCreateCustomProfile then
  2089.         ' Second time: Update profile based on input specified and default values
  2090.         LoadProfileDefaults()
  2091.  
  2092.         blnRet = SetupCustomProfile( objAudience )
  2093.         if not blnRet then
  2094.             SetupProfile = false
  2095.             exit function
  2096.         end if
  2097.     end if
  2098.  
  2099.     ' Set a few more things like interlaced coding and pixel ratio
  2100.     if g_intPixelAspectRatioX <> -1 or g_intPixelAspectRatioY <> -1 then
  2101.         g_objProfile.NonSquarePixelMode(0) = true
  2102.     end if
  2103.  
  2104.     if g_intVideoPreprocess >= 16 and g_intVideoPreprocess <= 18 then
  2105.         g_objProfile.InterlaceMode(0) = true
  2106.     end if
  2107.  
  2108.     ' Set the profile in encoder.
  2109.     g_objSourceGroup.Profile = g_objProfile
  2110.  
  2111.  
  2112.     g_intVideoFramerate = intVideoFramerateTemp
  2113.  
  2114.     ' Invalid profile
  2115.     if err.number <> 0 then
  2116.         OutputInfo "Invalid profile: 0x" & Hex( err.number ) & " " & err.Description
  2117.         err.Clear
  2118.         SetupProfile = false
  2119.         exit function
  2120.     end if
  2121.  
  2122.     if g_strProfileSave <> "" then
  2123.         g_objProfile.SaveToFile g_strProfileSave
  2124.     end if
  2125.  
  2126.     SetupProfile = true
  2127. end function
  2128.  
  2129. ' Setup ouptut configuration.
  2130. function SetupOutput()
  2131.     ' Is an output file name provided?
  2132.     if g_strOutput <> "" then
  2133.         ' Is this output name a directory?
  2134.         if g_objFileSystem.FolderExists( g_strOutput ) then
  2135.             
  2136.             ' If the output name is a directory, create the real output file name.
  2137.             ' If the input is a file, use the file name of the input file (extension is not ussed).
  2138.             ' If the inputs are devices, use 'output' as the output name.            
  2139.             if g_strInput <> "" then
  2140.                 g_strOutput = g_strOutput & "\\" & g_objFileSystem.GetBaseName( g_strInput )
  2141.             else
  2142.                 g_strOutput = g_strOutput & "\\output"
  2143.             end if
  2144.         end if
  2145.  
  2146.         ' If the output file name doesn't have a extension, create a proper one.
  2147.         if g_objFileSystem.GetExtensionName( g_strOutput ) = "" then            
  2148.  
  2149.             ' Does "." already exist in the output file name.
  2150.             ' If not, append "." to the output file name.
  2151.             if Right( g_strOutput, 1 ) <>  "." then
  2152.                 g_strOutput = g_strOutput & "."
  2153.             end if
  2154.  
  2155.             ' Does this session have a video source?
  2156.             ' If it has video stream, append wmv extension, otherwise wma extension is appended.
  2157.             if g_objSourceGroup.SourceCount( WMENC_VIDEO ) > 0 then
  2158.                 g_strOutput = g_strOutput & "wmv"
  2159.             else
  2160.                 g_strOutput = g_strOutput & "wma"
  2161.             end if
  2162.         end if
  2163.  
  2164.         CreateOutputFolder( g_objFileSystem.GetParentFolderName( g_objFileSystem.GetAbsolutePathName( g_strOutput ) ) )
  2165.  
  2166.         g_objEncoder.File.LocalFileName = g_strOutput
  2167.     else
  2168.         ' Get the output file name from WME file.
  2169.         if not IsNull(g_objEncoder.File.LocalFileName) then
  2170.             g_strOutput = g_objEncoder.File.LocalFileName
  2171.         end if
  2172.     end if
  2173.  
  2174.     ' Enable HTTP broadcasting for the encoder if a broadcast port is provided.
  2175.     if g_intBroadcast <> -1 then
  2176.         g_objEncoder.Broadcast.PortNumber( WMENC_PROTOCOL_HTTP ) = g_intBroadcast
  2177.     end if
  2178.  
  2179.     ' Enable push if push server is specified
  2180.     if g_strPushServer <> "" then
  2181.         g_objEncoder.Broadcast.ServerName = g_strPushServer
  2182.         g_objEncoder.Broadcast.PublishingPoint = g_strPublishingPoint
  2183.         if g_strPushTemplate <> "" then
  2184.             g_objEncoder.Broadcast.Template = g_strPushTemplate
  2185.         end if
  2186.     end if
  2187.  
  2188.     SetupOutput = true
  2189. end function
  2190.  
  2191. ' Setup display configuration
  2192. function SetupDisplayInfo()
  2193.     dim objDisplayInfo
  2194.     dim objAttributes
  2195.     
  2196.     set objDisplayInfo = g_objEncoder.DisplayInfo
  2197.     set objAttributes = g_objEncoder.Attributes
  2198.  
  2199.     ' Is title set?
  2200.     if g_strTitle <> "" then
  2201.         objDisplayInfo.Title = g_strTitle
  2202.     end if
  2203.  
  2204.     ' Is author set?
  2205.     if g_strAuthor <> "" then
  2206.         objDisplayInfo.Author = g_strAuthor
  2207.     end if
  2208.  
  2209.     ' Is copyright set?
  2210.     if g_strCopyright <> "" then
  2211.         objDisplayInfo.Copyright = g_strCopyright
  2212.     end if
  2213.  
  2214.     ' Is description set?
  2215.     if g_strDescription <> "" then
  2216.         objDisplayInfo.Description = g_strDescription
  2217.     end if
  2218.  
  2219.     ' Is rating set?
  2220.     if g_strRating <> "" then
  2221.         objDisplayInfo.Rating = g_strRating
  2222.     end if
  2223.  
  2224.     ' Add folddown coefficients
  2225.     if g_intAudioSurroundMix <> -1 then
  2226.         objAttributes.Add "SurroundMix", -g_intAudioSurroundMix
  2227.         objAttributes.Add "CenterMix", -g_intAudioCenterMix
  2228.         objAttributes.Add "LFEMix", -g_intAudioLEFMix
  2229.     end if
  2230.  
  2231.     SetupDisplayInfo = true
  2232. end function
  2233.  
  2234. ' Setup a new profile based on predefined profiles
  2235. function SetupPredefinedProfile(objAudience)
  2236.     dim intAudioCodecIndex, intVideoCodecIndex
  2237.     
  2238.     '  The following defined built in profiles.  Built in profiles are defined by the following:
  2239.     '  Audio:  Codec, channels, sample rate, bit rate, bit depth
  2240.     '  Video:  Codec, bit rate, width, height, fpsx1000, buffer (ms), smoothness, key frame 
  2241.     '  New built in profiles can be added by creating a new case statement and specifying
  2242.     '  audio and video profile settings.
  2243.     select case LCase( g_strProfile )
  2244.         case "av20":
  2245.             SetupAudioAudience objAudience, "WMA9STD", 1, 8000, 5000, 16
  2246.             SetupVideoAudience objAudience, "WMV9", 15000, 160, 120, 15000, 5000, 75, 10000
  2247.  
  2248.         case "av32":
  2249.             SetupAudioAudience objAudience, "WMA9STD", 1, 11025, 10168, 16
  2250.             SetupVideoAudience objAudience, "WMV9", 22000, 176, 144, 15000, 5000, 75, 10000
  2251.  
  2252.         case "av100":
  2253.             SetupAudioAudience objAudience, "WMA9STD", 1, 16000, 16000, 16
  2254.             SetupVideoAudience objAudience, "WMV9", 84000, 320, 240, 15000, 5000, 75, 10000
  2255.  
  2256.         case "av225":
  2257.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 40000, 16
  2258.             SetupVideoAudience objAudience, "WMV9", 185000, 320, 240, 30000, 5000, 75, 10000
  2259.  
  2260.         case "av350":
  2261.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48000, 16
  2262.             SetupVideoAudience objAudience, "WMV9", 302000, 320, 240, 30000, 5000, 75, 10000
  2263.  
  2264.         case "av450":
  2265.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2266.             SetupVideoAudience objAudience, "WMV9", 386000, 320, 240, 30000, 5000, 75, 10000
  2267.  
  2268.         case "av700":
  2269.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2270.             SetupVideoAudience objAudience, "WMV9", 636000, 320, 240, 30000, 5000, 75, 10000
  2271.  
  2272.         case "av1400":
  2273.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 128040, 16
  2274.             SetupVideoAudience objAudience, "WMV9", 1272000, 320, 240, 30000, 5000, 75, 10000
  2275.  
  2276.         case "av350pal":
  2277.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48000, 16
  2278.             SetupVideoAudience objAudience, "WMV9", 302000, 384, 288, 25000, 5000, 75, 10000
  2279.  
  2280.         case "av700pal":
  2281.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2282.             SetupVideoAudience objAudience, "WMV9", 636000, 384, 288, 25000, 5000, 75, 10000
  2283.  
  2284.         case "av100_2p":
  2285.             SetupAudioAudience objAudience, "WMA9STD", 1, 16000, 16000, 16
  2286.             SetupVideoAudience objAudience, "WMV9", 84000, 320, 240, 15000, 5000, 75, 10000
  2287.             g_objAudioSource.PreProcessPass = 1
  2288.             g_objVideoSource.PreProcessPass = 1
  2289.  
  2290.         case "av350_2p"
  2291.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48000, 16
  2292.             SetupVideoAudience objAudience, "WMV9", 302000, 320, 240, 30000, 5000, 75, 10000
  2293.             g_objAudioSource.PreProcessPass = 1
  2294.             g_objVideoSource.PreProcessPass = 1
  2295.  
  2296.         case "av600vbr":
  2297.             g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_PEAK
  2298.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2299.             SetupVideoAudience objAudience, "WMV9", 536000, 320, 240, 24000, 5000, 75, 10000
  2300.             
  2301.             objAudience.VideoPeakBitrate(0) = 1.5 * objAudience.VideoBitrate(0)
  2302.             objAudience.VideoBufferMax(0) = 5000
  2303.  
  2304.             ' Turn telecine and two pass video on
  2305.             g_objVideoSource.Optimization = WMENC_VIDEO_INVERSETELECINE
  2306.             g_objVideoSource.PreProcessPass = 1    
  2307.  
  2308.         case "avq97vbr":
  2309.             g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED
  2310.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64040, 16
  2311.             SetupVideoAudience objAudience, "WMV9", 536000, 320, 240, 24000, 5000, 97, 10000
  2312.  
  2313.             ' Turn telecine on
  2314.             g_objVideoSource.Optimization = WMENC_VIDEO_INVERSETELECINE
  2315.  
  2316.         case "a20_1":
  2317.             SetupAudioAudience objAudience, "WMA9STD", 1, 22050, 20008, 16
  2318.  
  2319.         case "a20_2":
  2320.             SetupAudioAudience objAudience, "WMA9STD", 2, 22050, 20008, 16
  2321.  
  2322.         case "a32":
  2323.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 32000, 16
  2324.  
  2325.         case "a48":
  2326.             SetupAudioAudience objAudience, "WMA9STD", 2, 32000, 48024, 16
  2327.  
  2328.         case "a64":
  2329.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 64016, 16
  2330.  
  2331.         case "a96":
  2332.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 96024, 16
  2333.  
  2334.         case "a128":
  2335.             SetupAudioAudience objAudience, "WMA9STD", 2, 44100, 128016, 16
  2336.  
  2337.         case "v20":
  2338.             SetupVideoAudience objAudience, "WMV9", 20000, 176, 144, 15000, 5000, 75, 10000
  2339.  
  2340.         case "v32":
  2341.             SetupVideoAudience objAudience, "WMV9", 32000, 240, 176, 15000, 5000, 75, 10000
  2342.  
  2343.         case else
  2344.             OutputInfo "No predefined profile found."
  2345.             SetupPredefinedProfile = false
  2346.             exit function
  2347.  
  2348.     end select
  2349.  
  2350.     SetupPredefinedProfile = true
  2351. end function
  2352.  
  2353. ' Given audio parameters this will setup the audience
  2354. function SetupAudioAudience(objAudience, strAudioCodec, intChannels, intSampleRate, intBitrate, intBitsPerSample)
  2355.     dim intAudioCodecIndex
  2356.  
  2357.     intAudioCodecIndex = GetAudioCodecIndex(strAudioCodec)
  2358.     g_objProfile.EnumAudioCodec intAudioCodecIndex, g_strAudioCodecName
  2359.     
  2360.     objAudience.AudioCodec(0) = intAudioCodecIndex
  2361.     objAudience.SetAudioConfig 0, intChannels, intSampleRate, intBitrate, intBitsPerSample
  2362. end function
  2363.  
  2364. ' Given video parameters this will setup the audience
  2365. function SetupVideoAudience(objAudience, strVideoCodec, intBitrate, intWidth, intHeight, intFps, intBufferWindow, intSmoothness, intKeyFrame)
  2366.     dim intVideoCodecIndex
  2367.     
  2368.     if intFps > g_intVideoFramerate then
  2369.         intFps = g_intVideoFramerate
  2370.     else
  2371.         g_intVideoFramerate = intFps
  2372.     end if
  2373.  
  2374.     intVideoCodecIndex = GetVideoCodecIndex(strVideoCodec)
  2375.     g_objProfile.EnumVideoCodec intVideoCodecIndex, g_strVideoCodecName
  2376.  
  2377.     objAudience.VideoCodec(0) = intVideoCodecIndex
  2378.     objAudience.VideoBitrate(0) = intBitrate
  2379.     objAudience.VideoWidth(0) = intWidth
  2380.     objAudience.VideoHeight(0) = intHeight
  2381.     objAudience.VideoFps(0) = intFps
  2382.     objAudience.VideoKeyFrameDistance(0) = intKeyFrame
  2383.     objAudience.VideoBufferSize(0) = intBufferWindow
  2384.  
  2385.     ' For quality vbr mode use intSmoothness as VBR quality
  2386.     if g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED then
  2387.         objAudience.VideoCompressionQuality(0) = intSmoothness
  2388.     else
  2389.         objAudience.VideoImageSharpness(0) = intSmoothness
  2390.     end if
  2391. end function
  2392.  
  2393. ' Given audio string(eg WMA9STD) this returns the audio codec index
  2394. function GetAudioCodecIndex(strAudioCodec)
  2395.     dim intFourCC
  2396.  
  2397.     select case strAudioCodec
  2398.         case WMA9STD
  2399.             intFourCC = WMA9STD_FOURCC
  2400.  
  2401.         case WMA9PRO
  2402.             intFourCC = WMA9PRO_FOURCC
  2403.  
  2404.         case WMA9LSL
  2405.             intFourCC = WMA9LSL_FOURCC
  2406.  
  2407.         case WMSPEECH
  2408.             intFourCC = WMSPEECH_FOURCC
  2409.  
  2410.         case PCM
  2411.             intFourCC = PCM_FOURCC
  2412.  
  2413.         case else
  2414.             intFourCC = WMA9STD_FOURCC
  2415.     end select
  2416.  
  2417.     GetAudioCodecIndex = g_objProfile.GetCodecIndexFromFourCC(WMENC_AUDIO, intFourCC)
  2418.  
  2419. end function
  2420.  
  2421. ' Given the video string(eg WMV9) this returns the video codec index
  2422. function GetVideoCodecIndex(strVideoCodec)
  2423.     dim intFourCC
  2424.  
  2425.     select case strVideoCodec
  2426.         case WMV7
  2427.             intFourCC = WMV7_FOURCC
  2428.  
  2429.         case WMV8
  2430.             intFourCC = WMV8_FOURCC
  2431.  
  2432.         case WMV9
  2433.             intFourCC = WMV9_FOURCC
  2434.  
  2435.         case WMS9
  2436.             intFourCC = WMS9_FOURCC
  2437.  
  2438.         case MP41
  2439.             intFourCC = MP41_FOURCC
  2440.  
  2441.         case UNCOMP
  2442.             intFourCC = UNCOMP_FOURCC
  2443.  
  2444.         case else
  2445.             intFourCC = WMV9_FOURCC
  2446.     end select
  2447.     
  2448.     GetVideoCodecIndex = g_objProfile.GetCodecIndexFromFourCC(WMENC_VIDEO, intFourCC)
  2449.  
  2450. end function
  2451.  
  2452. ' Setup a new profile based on predefined profiles
  2453. function SetupCustomProfile(objAudience)
  2454.     dim intAudioCodecIndex, intVideoCodecIndex
  2455.     dim blnRet
  2456.  
  2457.     if not g_blnAudioOnly and not g_blnVideoOnly  then
  2458.         if g_strVideoCodec = UNCOMP and g_strAudioCodec <> PCM then
  2459.             OutputInfo "Audio codec must be uncompressed when using uncompressed video codec"
  2460.             SetupCustomProfile = false
  2461.             exit function
  2462.         end if
  2463.  
  2464.         if g_strVideoCodec <> UNCOMP and g_strAudioCodec = PCM then
  2465.             OutputInfo "Video codec must be uncompressed when using uncompressed audio codec"
  2466.             SetupCustomProfile = false
  2467.             exit function
  2468.         end if    
  2469.     end if
  2470.  
  2471.     if not isnull( g_objAudioSource ) then
  2472.         blnRet = SetupCustomAudioProfile( objAudience )
  2473.         if not blnRet then
  2474.             SetupCustomProfile = false
  2475.             exit function
  2476.         end if
  2477.     end if
  2478.  
  2479.     if not isnull( g_objVideoSource ) then
  2480.         blnRet = SetupCustomVideoProfile( objAudience )
  2481.         if not blnRet then
  2482.             SetupCustomProfile = false
  2483.             exit function
  2484.         end if
  2485.     end if
  2486.  
  2487.     SetupCustomProfile = true
  2488.  
  2489. end function
  2490.  
  2491. ' Setup the audio part of the custom profile
  2492. function SetupCustomAudioProfile(objAudience)
  2493.     on error resume next
  2494.  
  2495.     ' Setup audio
  2496.     dim intAudioCodecIndex, intAudioBitrate, intAudioSampleRate, intAudioChannels, intBitDepth, intFourCC
  2497.     dim strTemp
  2498.     dim intNextArgStart, intNextArgEnd
  2499.     dim blnAudioQuality, blnValidBitrate, blnValidSampleRate, blnValidChannels, blnValidBitDepth
  2500.  
  2501.  
  2502.     'Set audio vbr mode
  2503.     if g_intAudioVBRMode <> -1 then
  2504.         select case g_intAudioVBRMode
  2505.             case 0 ' 1 pass CBR
  2506.  
  2507.             case 1 ' 2 pass CBR
  2508.                 g_objAudioSource.PreProcessPass = 1
  2509.  
  2510.             case 2 ' Quality VBR mode
  2511.                 g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_UNCONSTRAINED
  2512.  
  2513.             case 3 ' 2 pass bitrate based VBR
  2514.                 g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_BITRATE_BASED
  2515.                 g_objAudioSource.PreProcessPass = 1
  2516.  
  2517.             case 4 ' 2 pass bitrate-based peak constrained VBR
  2518.                 g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_PEAK
  2519.                 g_objAudioSource.PreProcessPass = 1
  2520.  
  2521.             case else
  2522.                 OutputInfo "Invalid -a_mode <mode_number>"
  2523.                 SetupCustomAudioProfile = false
  2524.                 exit function
  2525.         end select
  2526.     end if
  2527.  
  2528.  
  2529.     ' Set audio codec
  2530.     if g_strAudioCodec <> "" then
  2531.         intAudioCodecIndex = GetAudioCodecIndex(g_strAudioCodec)
  2532.         intFourCC = g_objProfile.EnumAudioCodec(intAudioCodecIndex, g_strAudioCodecName)
  2533.  
  2534.         objAudience.AudioCodec(0) = intAudioCodecIndex
  2535.     end if
  2536.  
  2537.     'Parse the a_setting string to extract audio bitrate sample rate and stuff like that
  2538.     if g_strAudioSetting <> "" then
  2539.         intNextArgStart = instr(g_strAudioSetting, "_")
  2540.         strTemp = left(g_strAudioSetting, intNextArgStart-1)
  2541.     
  2542.         if ucase( left(strTemp, 1) ) = "Q" then
  2543.             g_intAudioVBRMode = 2
  2544.             g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_UNCONSTRAINED
  2545.  
  2546.             blnAudioQuality = true
  2547.             intAudioBitrate = ConvertStringToInteger( mid(strTemp, 2 ) )
  2548.         else
  2549.             intAudioBitrate = ConvertStringToInteger( strTemp )
  2550.         end if
  2551.  
  2552.         'OutputInfo "****Audio bit rate is " & intAudioBitrate
  2553.  
  2554.         intNextArgEnd = instr(intNextArgStart+1, g_strAudioSetting, "_")
  2555.         strTemp = mid(g_strAudioSetting, intNextArgStart+1, intNextArgEnd-intNextArgStart-1)
  2556.         intAudioSampleRate = ConvertStringToInteger( strTemp )
  2557.         'OutputInfo "****Audio sample rate is " & intAudioSampleRate
  2558.     
  2559.         intNextArgStart = intNextArgEnd
  2560.         intNextArgEnd = instr(intNextArgStart+1, g_strAudioSetting, "_")
  2561.         if intNextArgEnd > 0 then
  2562.             strTemp = mid(g_strAudioSetting, intNextArgStart+1, intNextArgEnd-intNextArgStart-1)
  2563.         else
  2564.             strTemp = mid(g_strAudioSetting, intNextArgStart+1)
  2565.         end if
  2566.         intAudioChannels = ConvertStringToInteger( strTemp )
  2567.         'OutputInfo "****Audio channels are " & intAudioChannels
  2568.  
  2569.         if intNextArgEnd > 0 then
  2570.             strTemp = mid(g_strAudioSetting, intNextArgEnd+1)
  2571.             intBitDepth = ConvertStringToInteger( strTemp )
  2572.         else
  2573.             intBitDepth = 16
  2574.         end if
  2575.         'OutputInfo "****Audio bit depth is " & intBitDepth
  2576.  
  2577.         if intAudioBitrate = -1 or intAudioSampleRate = -1 or intAudioChannels = -1 or intBitDepth = -1 then
  2578.             SetupCustomAudioProfile = false
  2579.             err.Raise &H80070057
  2580.             exit function
  2581.         end if
  2582.  
  2583.         'Convert bitrate and samplerate to actual values
  2584.         if blnAudioQuality = false then
  2585.             if intAudioBitrate = 1411 then
  2586.                 intAudioBitrate = 1411200
  2587.             elseif intAudioBitrate = 705 then
  2588.                 intAudioBitrate = 705600
  2589.             elseif intAudioBitrate = 353 then
  2590.                 intAudioBitrate = 352800
  2591.             else
  2592.                 intAudioBitrate = 1000 * intAudioBitrate
  2593.             end if
  2594.         end if
  2595.  
  2596.         ' For peak vbr mode set peakbitrate and peak buffer
  2597.         if g_objProfile.VBRMode(WMENC_AUDIO, 0) = WMENC_PVM_PEAK then
  2598.             if g_intAudioPeakBuffer <> -1 then
  2599.                 objAudience.AudioBufferMax(0) = g_intAudioPeakBuffer
  2600.             end if
  2601.  
  2602.             if g_intAudioPeakBitrate = -1 then
  2603.                 objAudience.AudioPeakBitrate(0) = 1.5 * intAudioBitrate
  2604.             else
  2605.                 objAudience.AudioPeakBitrate(0) = g_intAudioPeakBitrate
  2606.             end if
  2607.             'OutputInfo "****Audio peak bit rate is " & objAudience.AudioPeakbitrate(0)
  2608.             'OutputInfo "****Audio peak buffer is " & objAudience.AudioBufferMax(0)
  2609.         end if
  2610.  
  2611.         if intAudioSampleRate = 88 then
  2612.             intAudioSampleRate = 88200
  2613.         elseif intAudioSampleRate = 44 then
  2614.             intAudioSampleRate = 44100
  2615.         elseif intAudioSampleRate = 22 then
  2616.             intAudioSampleRate = 22050
  2617.         elseif intAudioSampleRate = 11 then
  2618.             intAudioSampleRate = 11025
  2619.         else
  2620.             intAudioSampleRate = 1000 * intAudioSampleRate
  2621.         end if
  2622.  
  2623.         ' Validate values for bitrate, samplerate, channels and depth 
  2624.         if blnAudioQuality = false then
  2625.             blnValidBitrate = CheckForValidAudioBitRates( intAudioBitrate )
  2626.             if blnValidBitrate = false then 
  2627.                 OutputInfo "Invalid audio bit rate " & intAudioBitrate
  2628.                 SetupCustomAudioProfile = false
  2629.                 exit function
  2630.             end if
  2631.         end if
  2632.  
  2633.         blnValidSampleRate = CheckForValidAudioSamplingRates( intAudioSampleRate )
  2634.         if blnValidSampleRate = false then 
  2635.             OutputInfo "Invalid audio sample rate " & intAudioSampleRate
  2636.             SetupCustomAudioProfile = false
  2637.             exit function
  2638.         end if
  2639.  
  2640.         blnValidChannels = CheckForValidAudioChannel( intAudioChannels )
  2641.         if blnValidChannels = false then 
  2642.             OutputInfo "Invalid audio channels " & intAudioChannels
  2643.             SetupCustomAudioProfile = false
  2644.             exit function
  2645.         end if
  2646.  
  2647.         blnValidBitDepth = CheckForValidDepth( intBitDepth )
  2648.         if blnValidBitDepth = false then 
  2649.             OutputInfo "Invalid bits per sample " & intBitDepth
  2650.             SetupCustomAudioProfile = false
  2651.             exit function
  2652.         end if
  2653.  
  2654.         objAudience.SetAudioConfig 0, intAudioChannels, intAudioSampleRate, intAudioBitrate, intBitDepth
  2655.     end if
  2656.  
  2657.     SetupCustomAudioProfile = true
  2658.  
  2659. end function
  2660.  
  2661. ' Setup the video part of the custom profile
  2662. function SetupCustomVideoProfile(objAudience)
  2663.     on error resume next
  2664.  
  2665.     ' Setup audio
  2666.     dim intVideoCodecIndex, intFourCC
  2667.  
  2668.     'Set video vbr mode
  2669.     if g_intVideoVBRMode <> -1 then
  2670.         select case g_intVideoVBRMode
  2671.             case 0 ' 1 pass CBR
  2672.  
  2673.             case 1 ' 2 pass CBR
  2674.                 g_objVideoSource.PreProcessPass = 1
  2675.  
  2676.             case 2 ' Quality VBR mode
  2677.                 g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED
  2678.  
  2679.             case 3 ' 2 pass bitrate based VBR
  2680.                 g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_BITRATE_BASED
  2681.                 g_objVideoSource.PreProcessPass = 1
  2682.  
  2683.             case 4 ' 2 pass bitrate-based peak constrained VBR
  2684.                 g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_PEAK            
  2685.                 g_objVideoSource.PreProcessPass = 1
  2686.  
  2687.             case else
  2688.                 OutputInfo "Invalid -v_mode <mode_number>"
  2689.                 SetupCustomVideoProfile = false
  2690.                 exit function
  2691.  
  2692.         end select
  2693.     end if
  2694.  
  2695.     ' Set video codec
  2696.     if g_strVideoCodec <> "" then
  2697.         intVideoCodecIndex = GetVideoCodecIndex(g_strVideoCodec)
  2698.         intFourCC = g_objProfile.EnumVideoCodec(intVideoCodecIndex, g_strVideoCodecName)
  2699.  
  2700.         objAudience.VideoCodec(0) = intVideoCodecIndex
  2701.     end if
  2702.  
  2703.     if g_intVideoBitrate <> -1 then
  2704.         objAudience.VideoBitrate(0) = g_intVideoBitrate
  2705.     end if
  2706.  
  2707.     if g_intVideoWidth <> -1 then
  2708.         objAudience.VideoWidth(0) = g_intVideoWidth
  2709.     end if
  2710.  
  2711.     if g_intVideoHeight <> -1 then
  2712.         objAudience.VideoHeight(0) = g_intVideoHeight
  2713.     end if
  2714.  
  2715.     if g_intVideoFramerate <> -1 then
  2716.         objAudience.VideoFPS(0) = g_intVideoFramerate
  2717.     end if
  2718.  
  2719.     if g_intVideoKeydist <> -1 then
  2720.         objAudience.VideoKeyFrameDistance(0) = g_intVideoKeydist
  2721.     end if
  2722.  
  2723.     if g_intVideoBuffer <> -1 then
  2724.         objAudience.VideoBufferSize(0) = g_intVideoBuffer
  2725.     end if
  2726.  
  2727.     ' For quality vbr mode use intSmoothness as VBR quality
  2728.     if g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_UNCONSTRAINED then
  2729.         if g_intVideoQuality <> -1 then
  2730.             objAudience.VideoCompressionQuality(0) = g_intVideoQuality
  2731.         end if
  2732.     else
  2733.         if g_intVideoQuality <> -1 then
  2734.             objAudience.VideoImageSharpness(0) = g_intVideoQuality
  2735.         end if
  2736.     end if
  2737.  
  2738.     ' For peak vbr mode set peakbitrate and peak buffer
  2739.     if g_objProfile.VBRMode(WMENC_VIDEO, 0) = WMENC_PVM_PEAK then
  2740.         if g_intVideoPeakBuffer <> -1 then
  2741.             objAudience.VideoBufferMax(0) = g_intVideoPeakBuffer
  2742.         end if
  2743.  
  2744.         if g_intVideoPeakBitrate <> -1 then
  2745.             if objAudience.VideoBitrate(0) > g_intVideoPeakBitrate then
  2746.                 objAudience.VideoBitrate(0) = g_intVideoPeakBitrate
  2747.             end if
  2748.             objAudience.VideoPeakBitrate(0) = g_intVideoPeakBitrate
  2749.         end if
  2750.     end if
  2751.  
  2752.     ' Setup video device conformance
  2753.     if g_strVideoDevConf <> "" then
  2754.         objAudience.Property( WMENC_VIDEO, 0, "DeviceConformanceTarget") = g_strVideoDevConf
  2755.     end if
  2756.  
  2757.     SetupCustomVideoProfile = true
  2758. end function
  2759.  
  2760.  
  2761. ' Load the default profile settings
  2762. function LoadProfileDefaults()
  2763.     dim argsArray
  2764.  
  2765.     ' Audio profile settings
  2766.     ' Set default codec and/or VBR mode when appropriate
  2767.     if g_strAudioSetting <> "" then
  2768.         argsArray = Split ( g_strAudioSetting, "_" )
  2769.         if UBound( argsArray ) = 3 and left(g_strAudioSetting, 4) <> "Q100" then
  2770.             g_strAudioCodec = WMA9PRO
  2771.         end if
  2772.     end if
  2773.  
  2774.     if g_intAudioVBRMode = -1 then
  2775.         g_intAudioVBRMode = 0
  2776.     end if
  2777.  
  2778.     if g_strAudioCodec = "" then
  2779.         g_strAudioCodec = "WMA9STD"
  2780.     end if
  2781.  
  2782.     if g_intAudioPeakBuffer = -1 then
  2783.         g_intAudioPeakBuffer = 3000
  2784.     end if
  2785.  
  2786.     ' Set default -a_setting based on format and mode
  2787.     if g_strAudioSetting = "" then
  2788.         if g_intAudioVBRMode = 2 and g_strAudioCodec = WMA9PRO then
  2789.             g_strAudioSetting = "Q75_44_2_24"
  2790.         elseif g_intAudioVBRMode = 2 and g_strAudioCodec = WMA9LSL then
  2791.             g_strAudioSetting = "Q100_44_2_16"
  2792.         elseif g_intAudioVBRMode = 2 then
  2793.             g_strAudioSetting = "Q75_44_2"
  2794.         elseif g_intAudioVBRMode = 0 and g_strAudioCodec = WMSPEECH then
  2795.             g_strAudioSetting = "12_16_1"
  2796.         elseif g_intAudioVBRMode = 0 and g_strAudioCodec = PCM then
  2797.             g_strAudioSetting = "705_22_2"
  2798.         elseif g_strAudioCodec = WMA9PRO then
  2799.             g_strAudioSetting = "128_44_2_24"
  2800.         else
  2801.             g_strAudioSetting = "64_44_2"
  2802.         end if
  2803.     end if
  2804.  
  2805.     ' Video profile settings
  2806.     if g_intVideoVBRMode = -1 then
  2807.         g_intVideoVBRMode = 0
  2808.     end if
  2809.  
  2810.     if g_strVideoCodec = "" then
  2811.         g_strVideoCodec = "WMV9"
  2812.     end if
  2813.  
  2814.     if g_intVideoBitrate = -1 then
  2815.         g_intVideoBitrate = 250000
  2816.     end if
  2817.  
  2818.     if g_intVideoWidth = -1 then
  2819.         g_intVideoWidth = 0
  2820.     end if
  2821.  
  2822.     if g_intVideoHeight = -1 then
  2823.         g_intVideoHeight = 0
  2824.     end if
  2825.  
  2826.     if g_intVideoKeydist = -1 then
  2827.         g_intVideoKeydist = 10000
  2828.     end if
  2829.  
  2830.     if g_intVideoBuffer = -1 then 
  2831.         g_intVideoBuffer = 5000
  2832.     end if
  2833.  
  2834.     if g_intVideoPeakBuffer = -1 then
  2835.         g_intVideoPeakBuffer = 5000
  2836.     end if
  2837.  
  2838.  
  2839.     if g_intVideoPeakBitrate = -1 then
  2840.         g_intVideoPeakBitrate = 1.5 * g_intVideoBitrate
  2841.     end if
  2842.  
  2843.     if g_intVideoQuality = -1 then
  2844.         if g_intVideoVBRMode = 2 then
  2845.             g_intVideoQuality = 95
  2846.         else
  2847.             g_intVideoQuality = 75
  2848.         end if
  2849.     end if
  2850. end function
  2851.  
  2852. ' Setup time configuration
  2853. function SetupTime()
  2854.     if g_blnDevice then
  2855.         ' Duration must be specified when capture from a live device.
  2856.         if g_intDuration = -1 then
  2857.             OutputInfo "Duration must be specified when capturing from devices."
  2858.             SetupTime = false
  2859.             exit function
  2860.         end if
  2861.     end if
  2862.  
  2863.     ' Setup markin and markout
  2864.     if g_intMarkInTime <> -1 then
  2865.         
  2866.         ' Set start time for audio source (mark in) if it has a audio stream.
  2867.         if not IsNull(g_objAudioSource) then
  2868.             g_objAudioSource.MarkIn = g_intMarkInTime
  2869.         end if
  2870.     
  2871.         ' Set start time for video source (mark in) if it has a video stream.
  2872.         if not IsNull(g_objVideoSource) then
  2873.             g_objVideoSource.MarkIn = g_intMarkInTime
  2874.         end if
  2875.     end if
  2876.  
  2877.     ' Is a mark out time provided?
  2878.     if g_intMarkOutTime <> -1 then
  2879.         
  2880.         ' Set end time for audio source (mark out) if it has a audio stream.
  2881.         if not IsNull(g_objAudioSource) then
  2882.             g_objAudioSource.MarkOut = g_intMarkOutTime
  2883.         end if
  2884.         
  2885.         ' Set end time for video source (mark out) if it has a video stream.
  2886.         if not IsNull(g_objVideoSource) then
  2887.             g_objVideoSource.MarkOut = g_intMarkOutTime
  2888.         end if
  2889.     end if
  2890.  
  2891.     SetupTime = true
  2892. end function
  2893.  
  2894. ' Transcode 
  2895. function Transcode()
  2896.     on error resume next
  2897.     
  2898.     ' Prepare to encode
  2899.     g_objEncoder.PrepareToEncode( true )
  2900.  
  2901.     ' Check if we got an error saying markout is greater that end of file. If so set markout to end of file
  2902.     if err.number = -1072882855 then
  2903.         err.Clear
  2904.  
  2905.         if not IsNull(g_objAudioSource) then
  2906.             g_objAudioSource.MarkOut = 0
  2907.         end if
  2908.         
  2909.         if not IsNull(g_objVideoSource) then
  2910.             g_objVideoSource.MarkOut = 0
  2911.         end if
  2912.  
  2913.         g_objEncoder.PrepareToEncode( true )
  2914.     elseif err.number <> 0 then
  2915.         Transcode = false
  2916.         OutputInfo "Prepare to encode failed with error " & err.Number & " " & err.Description
  2917.         exit function
  2918.     end if
  2919.  
  2920.     ' Start encoder
  2921.     g_intErrorCode = 0
  2922.     g_objEncoder.Start()
  2923.     if err.number <> 0 then
  2924.         Transcode = false
  2925.         OutputInfo "Start encoder failed with error " & err.Number & " " & err.Description
  2926.         exit function
  2927.     end if
  2928.  
  2929.     g_tStartTime = Now()
  2930.     
  2931.     ' Wait for start event
  2932.     while not g_blnEncoderStarted and g_intErrorCode = 0
  2933.         WScript.Sleep( 1000 )
  2934.     wend
  2935.  
  2936.     on error goto 0
  2937.     
  2938.     if g_intDuration >= 0 then
  2939.         ' Wait for time
  2940.         OutputInfo "Wait for " & g_intDuration & " seconds to stop encoder..."
  2941.  
  2942.         dim t1, t2
  2943.         
  2944.         t1 = Now()
  2945.  
  2946.         ' Wait until an error code is received
  2947.         do while g_intErrorCode = 0
  2948.             WScript.Sleep( 1000 )
  2949.  
  2950.             t2 = Now()
  2951.  
  2952.             if DateDiff( "s", t1, t2 ) >= g_intDuration then
  2953.                 OutputInfo "Duration time is reached. Stop encoder..."
  2954.                 g_objEncoder.Stop()
  2955.                 exit do
  2956.             end if
  2957.  
  2958.             if g_objEncoder.RunState = WMENC_ENCODER_STOPPED then
  2959.                 OutputInfo "Encoding completed before duration time is reached."
  2960.                 exit do
  2961.             end if
  2962.         loop
  2963.     else
  2964.         ShowProgress
  2965.     end if
  2966.  
  2967.     while not g_blnEncoderStopped and g_intErrorCode = 0
  2968.         WScript.Sleep( 1000 )
  2969.     wend
  2970.  
  2971.     ' Check error event
  2972.     if g_intErrorCode = 0 then
  2973.         OutputInfo "======== Encoding Completed ========"
  2974.         Transcode = true
  2975.     else
  2976.         OutputInfo "Error occurred in transcoding: Error Code = 0x" & Hex( g_intErrorCode )
  2977.         Transcode = false
  2978.     end if
  2979.  
  2980. end function
  2981.  
  2982. ' Show statistics information of output
  2983. function ShowStatistics()
  2984.     dim objProfile
  2985.  
  2986.     ' Output statistics for audio stream
  2987.     if not IsNull(g_objAudioSource) then
  2988.         dim objAudioStats
  2989.         
  2990.         set objAudioStats = g_objEncoder.Statistics.StreamOutputStats( WMENC_AUDIO, 0, 0 )
  2991.  
  2992.         OutputInfo ""
  2993.         OutputInfo "Audio :"
  2994.         OutputInfo vbTab & "Codec: " & g_strAudioCodecName
  2995.         if g_intAudioVBRMode <> 2 then
  2996.             OutputInfo vbTab & "Expected bit rate: " & vbTab & objAudioStats.ExpectedBitrate & " bps"
  2997.         end if
  2998.         OutputInfo vbTab & "Average bit rate: " & vbTab & objAudioStats.AverageBitrate & " bps"
  2999.         OutputInfo vbTab & "Expected sample rate: " & vbTab & objAudioStats.ExpectedSampleRate
  3000.         OutputInfo vbTab & "Average sample rate: " & vbTab & objAudioStats.AverageSampleRate & ""
  3001.         OutputInfo vbTab & "Dropped byte count: " & vbTab & objAudioStats.DroppedByteCount*10000 & " bytes"
  3002.         OutputInfo vbTab & "Dropped sample rate: " & vbTab & objAudioStats.DroppedSampleCount*10000 & ""
  3003.         OutputInfo vbTab & "Total bytes: " & vbTab & vbTab & objAudioStats.ByteCount*10000 & " bytes"
  3004.     end if
  3005.  
  3006.     if not IsNull(g_objVideoSource) then
  3007.         dim objVideoStats
  3008.         
  3009.         set objVideoStats = g_objEncoder.Statistics.StreamOutputStats( WMENC_VIDEO, 0, 0 )
  3010.  
  3011.         OutputInfo ""
  3012.         OutputInfo "Video :"
  3013.         OutputInfo vbTab & "Codec: " & g_strVideoCodecName
  3014.         if g_intVideoVBRMode <> 2 then
  3015.             OutputInfo vbTab & "Expected bit rate: " & vbTab & objVideoStats.ExpectedBitrate & " bps"
  3016.         end if
  3017.         OutputInfo vbTab & "Average bit rate: " & vbTab & objVideoStats.AverageBitrate & " bps"
  3018.         OutputInfo vbTab & "Expected fps: " & vbTab & vbTab & objVideoStats.ExpectedSampleRate / 1000
  3019.         OutputInfo vbTab & "Dropped frame count: " & vbTab & objVideoStats.DroppedSampleCount*10000 & ""
  3020.         OutputInfo vbTab & "Total coded frames: " & vbTab & objVideoStats.SampleCount*10000 & ""
  3021.         OutputInfo vbTab & "Average sample rate: " & vbTab & objVideoStats.AverageSampleRate / 1000 & ""
  3022.         OutputInfo vbTab & "Dropped bytes: " & vbTab & vbTab & objVideoStats.DroppedByteCount*10000 & " bytes"
  3023.         OutputInfo vbTab & "Total bytes: " & vbTab & vbTab & objVideoStats.ByteCount*10000 & " bytes"
  3024.     end if
  3025.  
  3026.     ' Output statistics information of output stream
  3027.     OutputInfo ""
  3028.     OutputInfo "Overall:"
  3029.     OutputInfo vbTab & "Encoding time: " & vbTab & vbTab & DateDiff( "s", g_tStartTime, g_tStopTime ) & " seconds"
  3030.     OutputInfo vbTab & "Average bit rate: " & vbTab & g_objEncoder.Statistics.WMFOutputStats.AverageBitrate & " bps"
  3031.     
  3032.     if g_strOutput <> "" then
  3033.         dim objFileStats
  3034.         
  3035.         set objFileStats = g_objEncoder.Statistics.FileArchiveStats
  3036.     
  3037.         OutputInfo vbTab & "File size: " & vbTab & vbTab & objFileStats.FileSize*10000 & " bytes "
  3038.         OutputInfo vbTab & "File duration: " & vbTab & vbTab & objFileStats.FileDuration*10 & " seconds "
  3039.     end if
  3040.  
  3041. end function
  3042.  
  3043. ' Setup input configuration
  3044. function SetupInput()
  3045.     dim strDeviceName
  3046.  
  3047.     ' The input file name is used if it is not empty, otherwise device index is used.
  3048.     if g_strInput <> "" then
  3049.         dim strInput2
  3050.         
  3051.         strInput2 = g_objFileSystem.GetAbsolutePathName( g_strInput )
  3052.  
  3053.         on error resume next
  3054.  
  3055.         if g_strProfile <> "" then
  3056.             dim strProfileName
  3057.  
  3058.             strProfileName = LCase( g_strProfile )
  3059.             if Left( strProfileName, 1) = "a" and Mid( strProfileName, 2, 1 ) <> "v"  then
  3060.                  g_blnAudioOnly = true
  3061.             elseif Left( strProfileName, 1) = "v" then
  3062.                 g_blnVideoOnly = true
  3063.             end if
  3064.         end if
  3065.  
  3066.         ' Add this file into the source group.
  3067.         if g_blnAudioOnly then
  3068.             set g_objAudioSource = g_objSourceGroup.AddSource( WMENC_AUDIO )
  3069.             g_objAudioSource.SetInput( strInput2 )
  3070.         elseif g_blnVideoOnly then
  3071.             set g_objVideoSource = g_objSourceGroup.AddSource( WMENC_VIDEO )
  3072.             g_objVideoSource.SetInput( strInput2 )
  3073.         else
  3074.             g_objSourceGroup.AutoSetFileSource( strInput2 )
  3075.  
  3076.             ' If source file has an auido stream, get the audio source.
  3077.             if g_objSourceGroup.SourceCount( WMENC_AUDIO ) > 0 then
  3078.                 set g_objAudioSource = g_objSourceGroup.Source( WMENC_AUDIO, 0 )
  3079.             end if
  3080.  
  3081.             ' If source file has a video stream, get the video source.
  3082.             if g_objSourceGroup.SourceCount( WMENC_VIDEO ) > 0 then
  3083.                 set g_objVideoSource = g_objSourceGroup.Source( WMENC_VIDEO, 0 )
  3084.             end if
  3085.  
  3086.         end if
  3087.     elseif g_intAudioDevice <> -1 or g_intVideoDevice <> -1 then
  3088.         if g_intAudioDevice <> -1 then
  3089.             strDeviceName = GetDeviceNameFromIndex( WMENC_AUDIO, g_intAudioDevice )
  3090.             if strDeviceName = "" then
  3091.                 OutputInfo "Error: Invalid audio device number specified" 
  3092.                 SetupInput = false
  3093.                 exit function
  3094.             end if
  3095.             set g_objAudioSource = g_objSourceGroup.AddSource( WMENC_AUDIO )
  3096.             g_objAudioSource.SetInput strDeviceName, "device"
  3097.         end if
  3098.  
  3099.         if g_intVideoDevice <> -1 then
  3100.             strDeviceName = GetDeviceNameFromIndex( WMENC_VIDEO, g_intVideoDevice )
  3101.             if strDeviceName = "" then
  3102.                 OutputInfo "Error: Invalid video device number specified" 
  3103.                 SetupInput = false
  3104.                 exit function
  3105.             end if
  3106.             
  3107.             set g_objVideoSource = g_objSourceGroup.AddSource( WMENC_VIDEO )
  3108.             g_objVideoSource.SetInput strDeviceName, "device"
  3109.         end if
  3110.         
  3111.     end if
  3112.  
  3113.     if g_objSourceGroup.SourceCount( WMENC_AUDIO ) and g_objSourceGroup.SourceCount( WMENC_VIDEO ) then
  3114.         g_intSessionType = WMENC_CONTENT_ONE_AUDIO_ONE_VIDEO
  3115.     elseif g_objSourceGroup.SourceCount( WMENC_AUDIO ) then
  3116.         g_intSessionType = WMENC_CONTENT_ONE_AUDIO
  3117.     elseif g_objSourceGroup.SourceCount( WMENC_VIDEO ) then
  3118.         g_intSessionType = WMENC_CONTENT_ONE_VIDEO
  3119.     end if
  3120.  
  3121.     ' Set audio setting for speech
  3122.     if not IsNull(g_objAudioSource) then
  3123.         SetupAudioSource()
  3124.     end if
  3125.  
  3126.     ' Set video settings
  3127.     if not IsNull(g_objVideoSource) then
  3128.         SetupVideoSource()
  3129.     end if
  3130.    
  3131.     if err.number <> 0 then
  3132.         OutputInfo "Error: 0x" & Hex(err.number) & " - " & err.description
  3133.         err.Clear
  3134.         SetupInput = false
  3135.         exit function
  3136.     end if
  3137.  
  3138.     SetupInput = true
  3139. end function
  3140.  
  3141. 'Set speech related settings on audio source
  3142. function SetupAudioSource()
  3143.     if g_intAudioSpeechContent <> -1 then
  3144.         g_objAudioSource.contentmode = g_intAudioSpeechContent
  3145.     end if
  3146.     if g_strAudioSpeechEdl <> "" then
  3147.         g_objAudioSource.contentedl = g_strAudioSpeechEdl
  3148.     end if
  3149. end function
  3150.  
  3151. 'Set settings on video source
  3152. function SetupVideoSource()
  3153.     ' Set video preprocess
  3154.     select case g_intVideoPreprocess
  3155.         case 0 
  3156.             g_objVideoSource.Optimization = WMENC_VIDEO_STANDARD
  3157.         case 1
  3158.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3159.         case 2
  3160.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3161.             OutputInfo "Preprocessing mode not supported. Use -height and -width to adjust video size."
  3162.         case 3
  3163.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3164.             OutputInfo "Preprocessing mode not supported. Use -height and -width to adjust video size."
  3165.         case 4
  3166.             g_objVideoSource.Optimization = WMENC_VIDEO_DEINTERLACE
  3167.             OutputInfo "Preprocessing mode not supported. Use -height and -width to adjust video size."
  3168.         case 5
  3169.             g_objVideoSource.Optimization = WMENC_VIDEO_INVERSETELECINE
  3170.         case 6
  3171.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_AA_TOP
  3172.         case 7
  3173.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BB_TOP
  3174.         case 8
  3175.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BC_TOP
  3176.         case 9
  3177.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_CD_TOP
  3178.         case 10
  3179.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_DD_TOP
  3180.         case 11
  3181.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_AA_BOTTOM
  3182.         case 12
  3183.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BB_BOTTOM
  3184.         case 13
  3185.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_BC_BOTTOM
  3186.         case 14
  3187.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_CD_BOTTOM
  3188.         case 15
  3189.             g_objVideoSource.Optimization = WMENC_VIDEO_TELECINE_DD_BOTTOM
  3190.         case 16
  3191.             g_objVideoSource.Optimization = WMENC_VIDEO_INTERLACED_AUTO
  3192.         case 17
  3193.             g_objVideoSource.Optimization = WMENC_VIDEO_INTERLACED_TOP_FIRST
  3194.         case 18
  3195.             g_objVideoSource.Optimization = WMENC_VIDEO_INTERLACED_BOTTOM_FIRST
  3196.     end select
  3197.  
  3198.     'Set pixelformat
  3199.     select case ucase( g_strPixelFormat )
  3200.         case "I420"
  3201.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_I420
  3202.         case "IYUV"
  3203.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_IYUV
  3204.         case "RGB24"
  3205.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB24
  3206.         case "RGB32"
  3207.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB32 
  3208.         case "RGB555"
  3209.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB555 
  3210.         case "RGB565"
  3211.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB565
  3212.         case "RGB8"
  3213.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_RGB8
  3214.         case "UYVY"
  3215.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_UYVY
  3216.         case "YUY2"
  3217.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YUY2
  3218.         case "YV12"
  3219.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YV12 
  3220.         case "YVU9"
  3221.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YVU9 
  3222.         case "YVYU"
  3223.             g_objVideoSource.PixelFormat = WMENC_PIXELFORMAT_YVYU 
  3224.     end select
  3225.  
  3226.     'Set pixel aspect ratio
  3227.     if g_intPixelAspectRatioX <> -1 then
  3228.         g_objVideoSource.PixelAspectRatioX = g_intPixelAspectRatioX
  3229.     end if
  3230.  
  3231.     if g_intPixelAspectRatioY <> -1 then
  3232.         g_objVideoSource.PixelAspectRatioY = g_intPixelAspectRatioY
  3233.     end if
  3234.  
  3235.  
  3236.     'Set performance
  3237.     if g_intVideoPerformance <> -1 then
  3238.         g_objEncoder.VideoComplexity = g_intVideoPerformance
  3239.     end if
  3240.  
  3241.     'Set clipping margins
  3242.     if g_intClipLeft <> -1 then
  3243.         g_objVideoSource.CroppingLeftMargin = g_intClipLeft
  3244.     end if
  3245.  
  3246.     if g_intClipRight <> -1 then
  3247.         g_objVideoSource.CroppingRightMargin = g_intClipRight
  3248.     end if
  3249.  
  3250.     if g_intClipTop <> -1 then
  3251.         g_objVideoSource.CroppingTopMargin = g_intClipTop
  3252.     end if
  3253.  
  3254.     if g_intClipBottom <> -1 then
  3255.         g_objVideoSource.CroppingBottomMargin = g_intClipBottom
  3256.     end if
  3257.  
  3258. end function
  3259.  
  3260. 'This function is used to check if the bit rate specified for the a_setting param is valid
  3261. function CheckForValidAudioBitRates( intBitRate )
  3262.  
  3263.     select case intBitRate
  3264.  
  3265.         case 1411200,768000,705600,640000,440000,384000,352800,320000,256000,192000,160000,128000,96000,80000,_
  3266.              64000,48000,40000,32000,22000,20000,17000,16000,12000,10000,8000,6000,5000,4000,0
  3267.             CheckForValidAudioBitRates = True
  3268.  
  3269.         case else
  3270.             CheckForValidAudioBitRates = False
  3271.  
  3272.     end select
  3273. end function
  3274.  
  3275. 'This function is used to check if the sampling rate specified for the a_setting param is valid
  3276. function CheckForValidAudioSamplingRates( intSamplingRate )
  3277.  
  3278.     select case intSamplingRate
  3279.  
  3280.         case 96000,88200,48000,44100,32000,22050,16000,11025,8000
  3281.             CheckForValidAudioSamplingRates = True
  3282.  
  3283.         case else
  3284.             CheckForValidAudioSamplingRates = False
  3285.  
  3286.     end select
  3287. end function
  3288.  
  3289. 'This function is used to check if the channel specified for the a_setting param is valid
  3290. function CheckForValidAudioChannel( intChannel )
  3291.  
  3292.     select case intChannel
  3293.  
  3294.         case 1,2,6,8
  3295.             CheckForValidAudioChannel = True
  3296.  
  3297.         case else
  3298.             CheckForValidAudioChannel = False
  3299.  
  3300.    end select
  3301. end function
  3302.  
  3303. 'This function is used to check if the depth specified for the a_setting param is valid
  3304. function CheckForValidDepth( intAudioDepth )
  3305.  
  3306.     select Case intAudioDepth
  3307.  
  3308.         case 16,20,24
  3309.             CheckForValidDepth = True 
  3310.  
  3311.         case else
  3312.             CheckForValidDepth = False
  3313.  
  3314.    end select 
  3315. end function
  3316.  
  3317. 'This function is the top level function for directory based encoding
  3318. function DoDirectoryModeEncoding()
  3319.     dim strInputFull
  3320.     dim strOutputFull
  3321.  
  3322.     if g_strOutput = "" then
  3323.         OutputInfo "Error: No output directory specified" 
  3324.         DoDirectoryModeEncoding = false
  3325.         exit function
  3326.     end if
  3327.  
  3328.     strInputFull = g_objFileSystem.GetAbsolutePathName(g_strInput)
  3329.     strOutputFull = g_objFileSystem.GetAbsolutePathName(g_strOutput)
  3330.  
  3331.     EncodeFilesInFolder strInputFull, strOutputFull
  3332.  
  3333. end function
  3334.  
  3335. 'This function will create all folders down to the strFolderName level
  3336. function CreateOutputFolder( strFolderName )
  3337.     if g_objFileSystem.FolderExists(strFolderName) = false then
  3338.         CreateOutputFolder( g_objFileSystem.GetParentFolderName( strFolderName ) )
  3339.         g_objFileSystem.CreateFolder( strFolderName )
  3340.         end if
  3341. end function
  3342.  
  3343. 'This function will encode all files in the input directory and generate output files in output directory
  3344. function EncodeFilesInFolder( strInputFolderName, strOutputFolderName )
  3345.     dim objSubFoldersCollection
  3346.     dim objInputSubFolder
  3347.     dim strOutputSubFolderName, strFileType
  3348.     dim objFile, objFolder, objFileCollection
  3349.  
  3350.     OutputInfo "============== Encoding Files in Folder ============== " & strInputFolderName
  3351.  
  3352.     set objFolder = g_objFileSystem.GetFolder( strInputFolderName )
  3353.     
  3354.     ' First encode all the files contained in the input folder
  3355.     set objFileCollection = objFolder.Files
  3356.  
  3357.     for each objFile in objFileCollection
  3358.  
  3359.         strFileType = right(objFile.name, len(objFile.name) - instrrev(objFile.name,".") )  
  3360.  
  3361.         select case lcase(strFileType)
  3362.             case "avi", "wav", "mpg", "mpeg", "vob" , "wmv" , "wma", "mp3", "asf"
  3363.                 g_strInput = strInputFolderName & "\" & objFile.name
  3364.                 g_strOutput = strOutputFolderName & "\" & Left(objFile.name, len(objFile.Name)-(len(objFile.name) - instrrev(objFile.name,".") + 1)) & g_strOutputString
  3365.  
  3366.                 OutputInfo "============== Input " & g_strInput & " " & g_strOutput
  3367.  
  3368.                 ' This will force wmcmd to append wmv/wma extension
  3369.                 g_strOutput = g_strOutput & "."
  3370.             
  3371.                 ' Encode files
  3372.                 if SetupEncoder() then
  3373.                     if Transcode() and not g_blnSilent then 
  3374.                         ShowStatistics()
  3375.                     end if 
  3376.                 end if
  3377.  
  3378.                 ' reset encoder states for next file 
  3379.                 g_objEncoder.PrepareToEncode( false )
  3380.                 g_objEncoder.SourceGroupCollection.Remove( "SG_1" )
  3381.                 g_objSourceGroup = Null
  3382.                 g_objAudioSource = Null
  3383.                 g_objVideoSource = Null
  3384.                 g_blnEncoderStarted = false
  3385.                 g_blnEncoderStopped = false
  3386.                 g_blnEndPreProcess = false
  3387.  
  3388.             case else
  3389.                 OutputInfo "Skipping: " & objFile.name
  3390.         end select
  3391.     next
  3392.  
  3393.     ' Then recurse into subfolders and encode all files there
  3394.     set objSubFoldersCollection = objFolder.SubFolders
  3395.  
  3396.     for each objInputSubFolder in objSubFoldersCollection
  3397.         strOutputSubFolderName = strOutputFolderName & "\" & objInputSubFolder.name
  3398.  
  3399.         EncodeFilesInFolder objInputSubFolder, strOutputSubFolderName
  3400.     Next
  3401.  
  3402. end function
  3403.  
  3404. ' Get device name from index
  3405. function GetDeviceNameFromIndex(enumMediaType, intDeviceIndex)
  3406.     dim intLastDevice
  3407.     dim objSourceInfo, objSourcePluginManager
  3408.  
  3409.     intLastDevice = 0
  3410.     set objSourcePlugInManager = g_objEncoder.SourcePlugInInfoManager
  3411.  
  3412.     for i = 0 to objSourcePlugInManager.count -1
  3413.         set objSourceInfo = objSourcePlugInManager.Item(i)
  3414.         
  3415.         if objSourceInfo.Resources = true then
  3416.             if enumMediaType = WMENC_AUDIO then ' Audio
  3417.                 ' For audio search audio and audio | video
  3418.                 if objSourceInfo.MediaType = 1 or objSourceInfo.MediaType = 3 then
  3419.                     if intDeviceIndex < intLastDevice + objSourceInfo.Count then
  3420.                         GetDeviceNameFromIndex = objSourceInfo( intDeviceIndex - intLastDevice )
  3421.                         exit function
  3422.                     else 
  3423.                         intLastDevice = intLastDevice + objSourceInfo.Count
  3424.                     end if
  3425.                 end if
  3426.             else ' Video
  3427.                 ' For video search video, audio | video and video | script
  3428.                 if objSourceInfo.MediaType = 2 or objSourceInfo.MediaType = 3 or objSourceInfo.MediaType = 6 then
  3429.                     if intDeviceIndex < intLastDevice + objSourceInfo.Count Then
  3430.                         GetDeviceNameFromIndex = objSourceInfo( intDeviceIndex - intLastDevice )
  3431.                         exit function
  3432.                     else 
  3433.                         intLastDevice = intLastDevice + objSourceInfo.Count
  3434.                     end if
  3435.                 end if
  3436.             end if
  3437.         end if
  3438.     next
  3439.  
  3440.     GetDeviceNameFromIndex = ""
  3441.  
  3442. end function
  3443.  
  3444. function ShowProgress()
  3445.     dim intSleepDuration, intPercent, intADuration, intVDuration, intDuration
  3446.     dim intPasses, intLimit
  3447.  
  3448.     intPasses = 1
  3449.  
  3450.     ' Compute number of passes required
  3451.     if not IsNull(g_objAudioSource) then
  3452.         if g_objAudioSource.PreProcessPass = 1 then
  3453.             intPasses = 2
  3454.         end if
  3455.     end if
  3456.  
  3457.     if not IsNull(g_objVideoSource) then
  3458.         if g_objVideoSource.PreProcessPass = 1 then
  3459.             intPasses = 2
  3460.         end if
  3461.     end if
  3462.  
  3463.     ' Compute file duration
  3464.     if not IsNull(g_objAudioSource) then
  3465.         if g_objAudioSource.MarkOut <> 0 then
  3466.             intADuration = g_objAudioSource.MarkOut - g_objAudioSource.MarkIn
  3467.         else
  3468.             intADuration = g_objAudioSource.Duration - g_objAudioSource.MarkIn
  3469.         end if
  3470.     end if
  3471.     if not IsNull(g_objVideoSource) then
  3472.         if g_objVideoSource.MarkOut <> 0 then
  3473.             intVDuration = g_objVideoSource.MarkOut - g_objVideoSource.MarkIn
  3474.         else
  3475.             intVDuration = g_objVideoSource.Duration - g_objVideoSource.MarkIn
  3476.         end if
  3477.     end if
  3478.  
  3479.     if intADuration > intVDuration then
  3480.         intDuration = intADuration
  3481.     else
  3482.         intDuration = intVDuration
  3483.     end if
  3484.  
  3485.     intSleepDuration = 2000
  3486.     
  3487.     ' For all passes show progress from 0 to 100
  3488.     for j=0 to intPasses-1
  3489.         intPercent = 0
  3490.  
  3491.         if intPasses = 2 and j = 0 then
  3492.             OutputInfo "======== Begin Pass1 ========"
  3493.         elseif intPasses = 2 and j = 1 then
  3494.             OutputInfo "======== Begin Pass2 ========"
  3495.         end if
  3496.     
  3497.         for i=1 to 4
  3498.             intLimit = 25 * i
  3499.             do while g_objEncoder.RunState <> WMENC_ENCODER_STOPPED and g_intErrorCode = 0 and intPercent < intLimit
  3500.                 WScript.stdout.Write "."
  3501.                 WScript.Sleep intSleepDuration
  3502.                 if intDuration <> 0 then
  3503.                     intPercent = Int( g_objEncoder.Statistics.EncodingTime * 1000000 / intDuration )
  3504.                 end if
  3505.                 if intPasses = 2 and j = 0 and intLimit = 100 and intPercent < 75 then
  3506.                     ' second pass has already started
  3507.                     exit Do
  3508.                 end if
  3509.             loop
  3510.         
  3511.             ' Only show progress if we know the duration of source files
  3512.             if intDuration <> 0 and g_intErrorCode = 0 then
  3513.                 WScript.stdout.Write intLimit &"%."
  3514.             end if
  3515.  
  3516.             if g_intErrorCode <> 0 then 
  3517.                 exit for
  3518.             end if
  3519.         next
  3520.  
  3521.         if j = 0 and intPasses = 2 then
  3522.             do while not g_blnEndPreProcess
  3523.                 WScript.Sleep intSleepDuration
  3524.             loop
  3525.         end if
  3526.  
  3527.         if g_intErrorCode <> 0 then 
  3528.             exit for
  3529.         end if
  3530.  
  3531.         OutputInfo ""
  3532.     next
  3533.  
  3534. end function
  3535.