Advertisement
Guest User

Untitled

a guest
Mar 11th, 2018
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.11 KB | None | 0 0
  1. $dvd_drive = "G:\"
  2. $dvd_drive_id = 0
  3. $makemkvcon64_path = "C:\Program Files (x86)\MakeMKV\makemkvcon64.exe"
  4. $handbrake_cli_path = "C:\Program Files\HandBrake\cli\HandBrakeCLI.exe"
  5. $preset_filepath = "C:\Users\ryan\HandbrakePresets\default_dvd_movie.json"
  6. $notification_email = "judascleric@gmail.com"
  7. $rip_dir = "D:\temp\MakeMKV\rip1"
  8.  
  9. $plex_libs = @{
  10. 1 = @{LibraryName = "Family Movies"
  11. Directory = "D:\Media\PrinceFamily\Movies"}
  12. 2 = @{LibraryName = "Kids Movies"
  13. Directory = "D:\Media\Kids\Movies"}
  14. 3 = @{LibraryName = "Ryan Movies"
  15. Directory = "D:\Media\Ryan\Movies"}
  16. 4 = @{LibraryName = "Kim Movies"
  17. Directory = "D:\Media\Kim\Movies"}
  18. 5 = @{LibraryName = "Music Movies"
  19. Directory = "D:\Media\Music\Movies"}
  20. 6 = @{LibraryName = "Holiday Movies"
  21. Directory = "D:\Media\Holiday\Movies"}
  22. }
  23.  
  24. Function pause ($message)
  25. {
  26. # Check if running Powershell ISE
  27. if ($psISE) {
  28. Add-Type -AssemblyName System.Windows.Forms
  29. [System.Windows.Forms.MessageBox]::Show("$message")
  30. } else {
  31. Write-Host "$message" -ForegroundColor Yellow
  32. $x = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyDown")
  33. }
  34. }
  35.  
  36. Function Eject-CDTray {
  37. $sh = New-Object -ComObject "Shell.Application"
  38. $sh.Namespace(17).Items() | Where { $_.Path -eq $dvd_drive } | foreach { $_.InvokeVerb("Eject") }
  39. }
  40.  
  41. Function Close-CDTray {
  42. $DiscMaster = New-Object -com IMAPI2.MsftDiscMaster2
  43. $DiscRecorder = New-Object -com IMAPI2.MsftDiscRecorder2
  44. $id = $DiscMaster.Item(0)
  45. $DiscRecorder.InitializeDiscRecorder($id)
  46. $DiscRecorder.CloseTray()
  47. }
  48.  
  49. Function Choose-PlexLibrary {
  50. param(
  51. [ref] $out_dir
  52. )
  53. foreach($pair in ($plex_libs.GetEnumerator() | sort -Property name)) {
  54. Write-Host "$($pair.Name)) $($pair.Value.LibraryName)"
  55. }
  56. Write-Host "$(1 + $plex_libs.Count)) Exit"
  57. $input = read-host "`nEnter Your selection"
  58. $selection = [int]$input
  59. if ($selection -lt $plex_libs.Count -and $selection -ge 1) {
  60. $out_dir.Value = $plex_libs[$selection].Directory
  61. } else {
  62. Write-Host "Exiting."
  63. $out_dir.Value = $null
  64. }
  65. }
  66.  
  67. Function Send-EmailNotification {
  68. param(
  69. $to,
  70. $subject,
  71. $body
  72. )
  73. if ($to -eq $null -or $to -eq "") {
  74. echo "No email specified. Doing nothing."
  75. return
  76. }
  77. $username = "judascleric"
  78. $email = "$username@gmail.com"
  79. $password = "Tejavagripmaster&@"
  80. $smtpServer = "smtp.gmail.com"
  81. $cred = New-Object System.Net.NetworkCredential($username, $pass)
  82. $secstr = New-Object -TypeName System.Security.SecureString
  83. $password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
  84.  
  85. $hash = @{
  86. from = $email
  87. to = $to
  88. subject = $subject
  89. smtpserver = "smtp.gmail.com"
  90. port = "587"
  91. body = $body
  92. credential = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
  93. usessl = $true
  94. verbose = $true
  95. }
  96.  
  97. Send-MailMessage @hash
  98. }
  99.  
  100. Function Get-OutputFilename {
  101. param (
  102. $directory,
  103. [ref] $out_filename
  104. )
  105. $input = read-host "`nManually Enter Movie Name"
  106. $out_filename.Value = (Join-Path $directory $input).ToString() + ".mkv"
  107. Write-Host $out_filename
  108. }
  109.  
  110. Function Run-RipDVD {
  111. param(
  112. $dvd_drive_id,
  113. $rip_dir
  114. )
  115. $args = @(
  116. 'mkv',
  117. "disc:$dvd_drive_id",
  118. '--minlength=600',
  119. '--progress=stdout',
  120. '--robot',
  121. 'all',
  122. "`"$rip_dir`""
  123. )
  124. Write-Host "`"$makemkvcon64_path`" ($args -Join ' ')"
  125. try {
  126. & $makemkvcon64_path $args
  127. if ($LastExitCode -ne 0) {
  128. Write-Host "MakeMKV exited with: `n$LastExitCode"
  129. Send-EmailNotification $notification_email "[Failed] MakeMKV DVD Rip Failed" "NC"
  130. exit 1
  131. }
  132. } catch {
  133. Write-Host "MakeMKV exited with: `n $_"
  134. Send-EmailNotification $notification_email "[Failed] MakeMKV DVD Rip Failed" "NC"
  135. exit 1
  136. }
  137. }
  138.  
  139. Function Run-TranscodeMKV {
  140. param(
  141. $rip_dir,
  142. $filename
  143. )
  144. $args = @(
  145. '--preset-import-file', "`"$preset_filepath`"",
  146. '--input', $rip_dir,
  147. '--main-feature',
  148. '--output', "`"$filename`""
  149. )
  150. echo "`"$handbrake_cli_path`" ($args -Join ' ')"
  151. try {
  152. & $handbrake_cli_path $args 2> "log.txt"
  153. if ($LastExitCode -ne 0) {
  154. Write-Host "Handbrake exited with: `n$LastExitCode"
  155. Send-EmailNotification $notification_email "[Failed] Handbrake MKV Transcode Failed" "NC"
  156. exit 1
  157. }
  158. } catch {
  159. Write-Host "Handbrake exited with: `n $_"
  160. Send-EmailNotification $notification_email "[Failed] Handbrake MKV Transcode Failed" "NC"
  161. exit 1
  162. }
  163. }
  164.  
  165. Write-Host "Ejecting DVD... "
  166. Eject-CDTray
  167.  
  168. while ($true) {
  169.  
  170. pause ("Waiting for DVD in drive $dvd_drive (Press Space to continue) ...")
  171.  
  172. Write-Host "Closing DVD... "
  173. Close-CDTray
  174.  
  175. Write-Host "Choose Plex Library... "
  176. $dir = "[user input]"
  177. Choose-PlexLibrary ([ref]$dir)
  178.  
  179. if ($dir -eq $null) {
  180. Write-Host "Exiting."
  181. exit 0
  182. }
  183.  
  184. # Write-Host "Fetching DVD Info ..."
  185. $filename = "[set by method]"
  186. Get-OutputFilename $dir ([ref] $filename)
  187.  
  188. Write-Host " "
  189. Write-Host " "
  190. Write-Host " "
  191. Write-Host "You can walk away now"
  192. Write-Host " "
  193. Write-Host " "
  194. Write-Host " "
  195.  
  196. [Console]::Out.Flush()
  197.  
  198. Write-Host "Clean Rip Directory"
  199. if ((Test-Path $rip_dir) -and ($rip_dir.length -gt 8)) {
  200. Remove-Item -Recurse -Force $rip_dir
  201. }
  202. New-Item -ItemType directory -Force -Path $rip_dir
  203.  
  204. Write-Host "Ripping DVD to $rip_dir ... "
  205. Run-RipDVD $dvd_drive_id $rip_dir
  206. Write-Host "Transcode $rip_dir to $filename ... "
  207. Run-TranscodeMKV $rip_dir $filename
  208.  
  209. Write-Host "Sending email notification... "
  210. Send-EmailNotification $notification_email "Handbrake DVD Rip Complete" "NC"
  211.  
  212. Write-Host "Ejecting DVD... "
  213. Eject-CDTray
  214.  
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement