Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $dvd_drive = "G:\"
- $dvd_drive_id = 0
- $makemkvcon64_path = "C:\Program Files (x86)\MakeMKV\makemkvcon64.exe"
- $handbrake_cli_path = "C:\Program Files\HandBrake\cli\HandBrakeCLI.exe"
- $preset_filepath = "C:\Users\ryan\HandbrakePresets\default_dvd_movie.json"
- $notification_email = "judascleric@gmail.com"
- $rip_dir = "D:\temp\MakeMKV\rip1"
- $plex_libs = @{
- 1 = @{LibraryName = "Family Movies"
- Directory = "D:\Media\PrinceFamily\Movies"}
- 2 = @{LibraryName = "Kids Movies"
- Directory = "D:\Media\Kids\Movies"}
- 3 = @{LibraryName = "Ryan Movies"
- Directory = "D:\Media\Ryan\Movies"}
- 4 = @{LibraryName = "Kim Movies"
- Directory = "D:\Media\Kim\Movies"}
- 5 = @{LibraryName = "Music Movies"
- Directory = "D:\Media\Music\Movies"}
- 6 = @{LibraryName = "Holiday Movies"
- Directory = "D:\Media\Holiday\Movies"}
- }
- Function pause ($message)
- {
- # Check if running Powershell ISE
- if ($psISE) {
- Add-Type -AssemblyName System.Windows.Forms
- [System.Windows.Forms.MessageBox]::Show("$message")
- } else {
- Write-Host "$message" -ForegroundColor Yellow
- $x = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- }
- }
- Function Eject-CDTray {
- $sh = New-Object -ComObject "Shell.Application"
- $sh.Namespace(17).Items() | Where { $_.Path -eq $dvd_drive } | foreach { $_.InvokeVerb("Eject") }
- }
- Function Close-CDTray {
- $DiscMaster = New-Object -com IMAPI2.MsftDiscMaster2
- $DiscRecorder = New-Object -com IMAPI2.MsftDiscRecorder2
- $id = $DiscMaster.Item(0)
- $DiscRecorder.InitializeDiscRecorder($id)
- $DiscRecorder.CloseTray()
- }
- Function Choose-PlexLibrary {
- param(
- [ref] $out_dir
- )
- foreach($pair in ($plex_libs.GetEnumerator() | sort -Property name)) {
- Write-Host "$($pair.Name)) $($pair.Value.LibraryName)"
- }
- Write-Host "$(1 + $plex_libs.Count)) Exit"
- $input = read-host "`nEnter Your selection"
- $selection = [int]$input
- if ($selection -lt $plex_libs.Count -and $selection -ge 1) {
- $out_dir.Value = $plex_libs[$selection].Directory
- } else {
- Write-Host "Exiting."
- $out_dir.Value = $null
- }
- }
- Function Send-EmailNotification {
- param(
- $to,
- $subject,
- $body
- )
- if ($to -eq $null -or $to -eq "") {
- echo "No email specified. Doing nothing."
- return
- }
- $username = "judascleric"
- $email = "$username@gmail.com"
- $password = "Tejavagripmaster&@"
- $smtpServer = "smtp.gmail.com"
- $cred = New-Object System.Net.NetworkCredential($username, $pass)
- $secstr = New-Object -TypeName System.Security.SecureString
- $password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
- $hash = @{
- from = $email
- to = $to
- subject = $subject
- smtpserver = "smtp.gmail.com"
- port = "587"
- body = $body
- credential = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
- usessl = $true
- verbose = $true
- }
- Send-MailMessage @hash
- }
- Function Get-OutputFilename {
- param (
- $directory,
- [ref] $out_filename
- )
- $input = read-host "`nManually Enter Movie Name"
- $out_filename.Value = (Join-Path $directory $input).ToString() + ".mkv"
- Write-Host $out_filename
- }
- Function Run-RipDVD {
- param(
- $dvd_drive_id,
- $rip_dir
- )
- $args = @(
- 'mkv',
- "disc:$dvd_drive_id",
- '--minlength=600',
- '--progress=stdout',
- '--robot',
- 'all',
- "`"$rip_dir`""
- )
- Write-Host "`"$makemkvcon64_path`" ($args -Join ' ')"
- try {
- & $makemkvcon64_path $args
- if ($LastExitCode -ne 0) {
- Write-Host "MakeMKV exited with: `n$LastExitCode"
- Send-EmailNotification $notification_email "[Failed] MakeMKV DVD Rip Failed" "NC"
- exit 1
- }
- } catch {
- Write-Host "MakeMKV exited with: `n $_"
- Send-EmailNotification $notification_email "[Failed] MakeMKV DVD Rip Failed" "NC"
- exit 1
- }
- }
- Function Run-TranscodeMKV {
- param(
- $rip_dir,
- $filename
- )
- $args = @(
- '--preset-import-file', "`"$preset_filepath`"",
- '--input', $rip_dir,
- '--main-feature',
- '--output', "`"$filename`""
- )
- echo "`"$handbrake_cli_path`" ($args -Join ' ')"
- try {
- & $handbrake_cli_path $args 2> "log.txt"
- if ($LastExitCode -ne 0) {
- Write-Host "Handbrake exited with: `n$LastExitCode"
- Send-EmailNotification $notification_email "[Failed] Handbrake MKV Transcode Failed" "NC"
- exit 1
- }
- } catch {
- Write-Host "Handbrake exited with: `n $_"
- Send-EmailNotification $notification_email "[Failed] Handbrake MKV Transcode Failed" "NC"
- exit 1
- }
- }
- Write-Host "Ejecting DVD... "
- Eject-CDTray
- while ($true) {
- pause ("Waiting for DVD in drive $dvd_drive (Press Space to continue) ...")
- Write-Host "Closing DVD... "
- Close-CDTray
- Write-Host "Choose Plex Library... "
- $dir = "[user input]"
- Choose-PlexLibrary ([ref]$dir)
- if ($dir -eq $null) {
- Write-Host "Exiting."
- exit 0
- }
- # Write-Host "Fetching DVD Info ..."
- $filename = "[set by method]"
- Get-OutputFilename $dir ([ref] $filename)
- Write-Host " "
- Write-Host " "
- Write-Host " "
- Write-Host "You can walk away now"
- Write-Host " "
- Write-Host " "
- Write-Host " "
- [Console]::Out.Flush()
- Write-Host "Clean Rip Directory"
- if ((Test-Path $rip_dir) -and ($rip_dir.length -gt 8)) {
- Remove-Item -Recurse -Force $rip_dir
- }
- New-Item -ItemType directory -Force -Path $rip_dir
- Write-Host "Ripping DVD to $rip_dir ... "
- Run-RipDVD $dvd_drive_id $rip_dir
- Write-Host "Transcode $rip_dir to $filename ... "
- Run-TranscodeMKV $rip_dir $filename
- Write-Host "Sending email notification... "
- Send-EmailNotification $notification_email "Handbrake DVD Rip Complete" "NC"
- Write-Host "Ejecting DVD... "
- Eject-CDTray
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement