mikeytown2 Posted April 21, 2014 Share Posted April 21, 2014 (edited) Needed a way to automate ripping mutiple .iso DVDs and I came up with this. Uses VirtualCloneDrive to mount the iso file. Uses PgcDemux to do the actual ripping. Uses DGIndex to index the m2v. And finally writes a avs file for input into MeGUI. Not perfect but gets the job done expandcollapse popup#include <Array.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <File.au3> #include <GUIConstantsEx.au3> Global $sINI = @ScriptDir & '\iso_to_avs.ini' ;add to array, list of files in a dir Func FileListFromDir($dir, $filetype, ByRef $filelist) ;search for the first file with the correct file extenstion Local $file, $search = FileFindFirstFile($dir & "\" & $filetype) ; Check if the search was successful If $search = -1 Then $searchDIR = FileFindFirstFile($dir & "\*") While 1 $file = FileFindNextFile($searchDIR) If @error Then ExitLoop EndIf If StringInStr(FileGetAttrib($dir & "\" & $file), "D") Then FileListFromDir($dir & "\" & $file, $filetype, $filelist) EndIf WEnd FileClose($searchDIR) ; Close the search handle EndIf ;add found files to array While 1 $file = FileFindNextFile($search) If @error Then ExitLoop EndIf ;Add file to array _ArrayAdd($filelist, $dir & "\" & $file) $filelist[0] += 1 WEnd FileClose($search) ; Close the search handle EndFunc ;==>FileListFromDir ;add from given array to Filelist Func GetListOfFiles() Local $dirbit = 0 Local $filetype = '*.iso' Local $filelist[1] $filelist[0] = 0 ;Grab EXE Drag-n-Droped files/dir's If $CmdLine[0] > 0 Then For $x = 1 To $CmdLine[0] Step +1 ;run though all files droped and look for dir's If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then $dirbit += 1 FileListFromDir($CmdLine[$x], $filetype, $filelist) ;parce dir looking for file of that extenstion Else ;add file to list _ArrayAdd($filelist, $CmdLine[$x]) $filelist[0] += 1 EndIf Next EndIf If $filelist[0] <= 0 Then ; Create a constant variable in Local scope of the message to display in FileOpenDialog. Local Const $sMessage = "Hold down Ctrl or Shift to choose multiple files." ; Display an open dialog to select a list of file(s). Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "ISO Files (*.iso)", $FD_FILEMUSTEXIST + $FD_MULTISELECT) If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.") ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) Else ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) If StringInStr($sFileOpenDialog, '|') Then $templist = StringSplit($sFileOpenDialog, '|') $dir = $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 While $templist[0] > 0 $newfile = $dir & '\' & $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 _ArrayAdd($filelist, $newfile) $filelist[0] += 1 WEnd Else _ArrayAdd($filelist, $sFileOpenDialog) $filelist[0] += 1 EndIf EndIf EndIf Return $filelist EndFunc ;==>ArrayToFileList Func LoadISO($filename) Local $cmd = IniRead($sINI, 'FileLocations', 'vcdmount', @ProgramFilesDir & ' (x86)\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe') RunWait(@ComSpec & " /c " & '"' & $cmd & '"' & ' /d=0 /u', "", @SW_HIDE) ShellExecuteWait($cmd, ' /d=0 ' & '"' & $filename & '"') Send("{SHIFTDOWN}") GUISetCursor(15) OutputStatus("Waiting for the DVD to load:" & @CRLF & $filename & @CRLF & "DO NOT PRESS THE SHIFT KEY") WinWait("AutoPlay","", 15) WinClose("AutoPlay") OutputStatus("") Send("{SHIFTUP}") EndFunc Func RipDVD($isoName) Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = "" Local $aPathSplit = _PathSplit($isoName, $sDrive, $sDir, $sFilename, $sExtension) Local $dest = IniRead($sINI, 'FileLocations', 'destdir', 'D:\Users\admin\Videos\Rips\Auto\') & $sFilename DirCreate($dest) Local $cmd = IniRead($sINI, 'FileLocations', 'pgcdemux', 'D:\Users\admin\Desktop\New folder\PgcDemuxMod.exe') Local $cddrive = IniRead($sINI, 'FileLocations', 'cddrive', 'G:\') Local $filelist[1] $filelist[0] = 0 FileListFromDir($cddrive & 'VIDEO_TS', 'VTS*.IFO', $filelist) Local $counter = 1 While $filelist[0] > 0 $iPreviousFileSize = 0 For $x = 1 To 99 Step +1 OutputStatus('') If Not FileExists($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v') Then DirCreate($dest & '\' & $counter & '-' & $x) Local $iPID = Run(@ComSpec & " /c " & '"' & $cmd & '"' & ' -pgc ' & $x & ' -m2v ' & $filelist[1] & ' ' & $dest & '\' & $counter & '-' & $x & '', "", @SW_HIDE) OutputStatus($counter & '-' & $x & ':m2v') ProcessWaitClose($iPID) Local $sOutput = StdoutRead($iPID) ; Remove dir if an error code was returned. If $sOutput <> 0 Then DirRemove($dest & '\' & $counter & '-' & $x) ExitLoop EndIf ; Remove dir if no video file was made. If Not FileExists($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v') Then DirRemove($dest & '\' & $counter & '-' & $x) ExitLoop EndIf EndIf OutputStatus($counter & '-' & $x & ':checking') ; Remove dir if no audio file was made. If Not FileExists($dest & '\' & $counter & '-' & $x & '\AudioFile_80.ac3') Then DirRemove($dest & '\' & $counter & '-' & $x, 1) EndIf Local $iFileSize = FileGetSize($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v') ; Remove dir if video file is smaller than 5MB. If $iFileSize < 5242880 Then DirRemove($dest & '\' & $counter & '-' & $x, 1) EndIf ; Remove dir if video file is the same as the last one. If $iPreviousFileSize == $iFileSize Then $this = _Crypt_HashFile($dest & '\' & $counter & '-' & $x & '\VideoFile.m2v', $CALG_MD5) $prev = _Crypt_HashFile($dest & '\' & $counter & '-' & ($x-1) & '\VideoFile.m2v', $CALG_MD5) ;MsgBox($MB_SYSTEMMODAL, "", StringCompare($this, $prev) & @CRLF & $this & @CRLF & $prev & @CRLF & $iPreviousFileSize & @CRLF & $iFileSize & @CRLF & $dest & '\' & $counter & '-' & $x & '\VideoFile.m2v' & @CRLF & $dest & '\' & $counter & '-' & ($x-1) & '\VideoFile.m2v') If StringCompare($this, $prev) == 0 Then DirRemove($dest & '\' & $counter & '-' & $x, 1) EndIf EndIf $iPreviousFileSize = $iFileSize IndexVideo($dest & '\' & $counter & '-' & $x, $counter & '-' & $x) MakeAviSynthFile($dest, $counter & '-' & $x) Next OutputStatus('') $counter += 1 _ArrayDelete($filelist, 1) $filelist[0] -= 1 WEnd EndFunc Func IndexVideo($dir, $small_dir) If FileExists($dir & '\VideoFile.m2v') Then If Not FileExists($dir & '\VideoFile.d2v') Then Local $cmd = '"' & IniRead($sINI, 'FileLocations', 'dgindex', @ProgramFilesDir & ' (x86)\AviSynth 2.5\tools\dgmpegdec\DGIndex.exe') & '" -IF=[' & $dir & '\VideoFile.m2v] -OF=[' & $dir & '\VideoFile] -HIDE -EXIT' OutputStatus($small_dir & ':d2v') RunWait(@ComSpec & " /c " & $cmd, "", @SW_HIDE) OutputStatus('') EndIf EndIf EndFunc Func MakeAviSynthFile($dest, $small_dir) $sDestFile = $dest & '\' & $small_dir & '.avs' If Not FileExists($dest & '\' & $small_dir & '\VideoFile.d2v') Then If FileExists($sDestFile) Then FileDelete($sDestFile) EndIf ElseIf Not FileExists($sDestFile) Then Local $sFileContents = '' $sFileContents &= 'v = MPEG2Source("' & $small_dir & '\VideoFile.d2v", cpu=2)' & @CRLF $sFileContents &= 'a = NicAC3Source("' & $small_dir & '\AudioFile_80.ac3", 2)' & @CRLF $sFileContents &= 'audiodubex(v, a)' & @CRLF $sFileContents &= '#QTGMC(Preset="draft", NoisePreset="Slow")' & @CRLF $sFileContents &= 'QTGMC(Preset="Medium", NoisePreset="Slow")' & @CRLF $sFileContents &= 'SelectEven()' & @CRLF $sFileContents &= 'TDecimate()' & @CRLF FileWrite($sDestFile, $sFileContents) EndIf EndFunc Func OutputStatus($sMessage) Local $hWnd = WinGetHandle("") TrayTip('Status:', $sMessage, 30) TraySetToolTip($sMessage) WinActivate($hWnd) EndFunc $files = GetListOfFiles() While $files[0] > 0 LoadISO($files[1]) RipDVD($files[1]) _ArrayDelete($files, 1) $files[0] -= 1 WEnd MsgBox($MB_SYSTEMMODAL, "", "Done") Example INI file  [FileLocations] dgindex=C:Program Files (x86)AviSynth 2.5toolsdgmpegdecDGIndex.exe pgcdemux=D:UsersAdminDesktopNew folderPgcDemuxMod.exe vcdmount=C:Program Files (x86)Elaborate BytesVirtualCloneDriveVCDMount.exe cddrive=G: destdir=D:UsersAdminVideosRipsAuto Edited April 24, 2014 by mikeytown2 Email: POP3 & SMTP using SSL/TLS (OpenSSL)Email: IMAPEmail: Base64 & SMTP login & Send email direct to MX Server (thanks blindwig)Win: Hook Registry ChangesWin: Read/Write to Alternate Data Streams (ini example)Utility: GPS Distance Calculations, Vincenty and Haversine formulas; angles and elevationUtility: Dell Laser Printer (3000-5100) - Print LoggerUtility: Reset Router when Wireless Link FailsUtility: ImageMagick Batch jpg ProcessorVideo HCenc Batch FrontendVideo: *DEAD* YouTube Video Encoder (avs/avi to flv)Software On CD's I Like<<back|track3 Ultimate Boot CD for Windows SpinRite Ubuntu ophcrack Link to comment Share on other sites More sharing options...
mikeytown2 Posted April 24, 2014 Author Share Posted April 24, 2014 avs to m4v script expandcollapse popup#include <Array.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <File.au3> ;add to array, list of files in a dir Func FileListFromDir($dir, $filetype, ByRef $filelist) ;search for the first file with the correct file extenstion Local $file, $search = FileFindFirstFile($dir & "\" & $filetype) ; Check if the search was successful If $search = -1 Then $searchDIR = FileFindFirstFile($dir & "\*") While 1 $file = FileFindNextFile($searchDIR) If @error Then ExitLoop EndIf If StringInStr(FileGetAttrib($dir & "\" & $file), "D") Then FileListFromDir($dir & "\" & $file, $filetype, $filelist) EndIf WEnd FileClose($searchDIR) ; Close the search handle EndIf ;add found files to array While 1 $file = FileFindNextFile($search) If @error Then ExitLoop EndIf ;Add file to array _ArrayAdd($filelist, $dir & "\" & $file) $filelist[0] += 1 WEnd FileClose($search) ; Close the search handle EndFunc ;==>FileListFromDir ;add from given array to Filelist Func GetListOfFiles() Local $dirbit = 0 Local $filetype = '*.avs' Local $filelist[1] $filelist[0] = 0 ;Grab EXE Drag-n-Droped files/dir's If $CmdLine[0] > 0 Then For $x = 1 To $CmdLine[0] Step +1 ;run though all files droped and look for dir's If StringInStr(FileGetAttrib($CmdLine[$x]), "D") Then $dirbit += 1 FileListFromDir($CmdLine[$x], $filetype, $filelist) ;parce dir looking for file of that extenstion Else ;add file to list _ArrayAdd($filelist, $CmdLine[$x]) $filelist[0] += 1 EndIf Next EndIf If $filelist[0] <= 0 Then ; Create a constant variable in Local scope of the message to display in FileOpenDialog. Local Const $sMessage = "Hold down Ctrl or Shift to choose multiple files." ; Display an open dialog to select a list of file(s). Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "AVS Files (*.avs)", $FD_FILEMUSTEXIST + $FD_MULTISELECT) If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.") ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) Else ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder. FileChangeDir(@ScriptDir) If StringInStr($sFileOpenDialog, '|') Then $templist = StringSplit($sFileOpenDialog, '|') $dir = $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 While $templist[0] > 0 $newfile = $dir & '\' & $templist[1] _ArrayDelete($templist, 1) $templist[0] -= 1 _ArrayAdd($filelist, $newfile) $filelist[0] += 1 WEnd Else _ArrayAdd($filelist, $sFileOpenDialog) $filelist[0] += 1 EndIf EndIf EndIf Return $filelist EndFunc ;==>ArrayToFileList Func QueueFile($sFileName) Opt("WinTitleMatchMode", 1) Local $hMeGUI = WinActivate("MeGUI ") BlockInput(1) Send("{CTRLDOWN}o{CTRLUP}") BlockInput(0) Local $hWnd = WinWaitActive("Select your input file") Sleep(500) Opt("SendKeyDelay", 0) BlockInput(1) ControlSend($hWnd, "", "Edit1", $sFileName & "{ENTER}") BlockInput(0) Opt("SendKeyDelay", 5) $hWnd = WinWaitActive("Current position:") Sleep(500) BlockInput(1) ControlSend($hWnd, "", "[NAME:showPAR]", "{SPACE}") BlockInput(0) Sleep(500) BlockInput(1) ControlSend($hWnd, "", "[NAME:dropDownButton]", "{SPACE}") Opt("SendKeyDelay", 50) Send("1{ENTER}") Opt("SendKeyDelay", 5) BlockInput(0) WinClose($hWnd) Sleep(500) WinWaitActive($hMeGUI) Local $aPos = MouseGetPos() Opt("MouseCoordMode", 0) BlockInput(1) MouseClick("left", 30, 50, 1, 0) BlockInput(0) Opt("MouseCoordMode", 1) MouseMove($aPos[0], $aPos[1], 0) Sleep(500) BlockInput(1) ControlClick($hMeGUI, "", "[NAME:autoEncodeButton]", "left", 1) BlockInput(0) Sleep(500) $hWnd = WinWaitActive("MeGUI - Automatic Encoding") Sleep(500) BlockInput(1) ControlClick($hWnd, "", "[NAME:addSubsNChapters]", "left", 1) BlockInput(0) Sleep(500) BlockInput(1) ControlClick($hWnd, "", "[NAME:queueButton]", "left", 1) BlockInput(0) Sleep(5000) EndFunc $files = GetListOfFiles() While $files[0] > 0 QueueFile($files[1]) _ArrayDelete($files, 1) $files[0] -= 1 WEnd MsgBox($MB_SYSTEMMODAL, "", "Done") Email: POP3 & SMTP using SSL/TLS (OpenSSL)Email: IMAPEmail: Base64 & SMTP login & Send email direct to MX Server (thanks blindwig)Win: Hook Registry ChangesWin: Read/Write to Alternate Data Streams (ini example)Utility: GPS Distance Calculations, Vincenty and Haversine formulas; angles and elevationUtility: Dell Laser Printer (3000-5100) - Print LoggerUtility: Reset Router when Wireless Link FailsUtility: ImageMagick Batch jpg ProcessorVideo HCenc Batch FrontendVideo: *DEAD* YouTube Video Encoder (avs/avi to flv)Software On CD's I Like<<back|track3 Ultimate Boot CD for Windows SpinRite Ubuntu ophcrack Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now