From 951f072b26ae2de7a0254d7bdf04fbe3a0c05eca Mon Sep 17 00:00:00 2001 From: Michael Reber Date: Thu, 2 Jul 2020 16:09:11 +0200 Subject: [PATCH] Speedup File check using 'HEVC' filename checking and other improvements --- README.md | 7 ++- _extras/manually_review_videos.ps1 | 68 ++++++++++++++++++++++++++++++ convert_Videos.ps1 | 25 ++++++++--- 3 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 _extras/manually_review_videos.ps1 diff --git a/README.md b/README.md index 9524c1b..007201b 100644 --- a/README.md +++ b/README.md @@ -37,4 +37,9 @@ If not, the failed conversion file is deleted and logged. 2. Download the latest NVEnc for Windows: https://github.com/rigaya/NVEnc/releases 3. Extract the files to "video-in-place-hevc-converter\encoder\" and replace the old files. 4. Edit the $videoPath variable in the PowerShell file to point to the folder of your "video files" to convert. (**ATTENTION: The ending-slash must be preserved in the path specification!**) -5. Execute **convert_Videos.ps1** to convert the video files under the specified path to HEVC. \ No newline at end of file +5. Execute **convert_Videos.ps1** to convert the video files under the specified path to HEVC. + + +## Extra Content (_extras folder) + +* **manually_review_videos.ps1** - Redoes the review process using the "review_needed.log" -> before useing set the "$logFolderName" variable in file. \ No newline at end of file diff --git a/_extras/manually_review_videos.ps1 b/_extras/manually_review_videos.ps1 new file mode 100644 index 0000000..3de4234 --- /dev/null +++ b/_extras/manually_review_videos.ps1 @@ -0,0 +1,68 @@ +# Review converted videos: + +#----------------------------------------------------------------------- +# Edit the $logFolderName variable to point to your desired logs folder: + +#$logFolderName = "24-06-2020 - [run started at 17-31]" +$logFolderName = "30-06-2020 - [run started at 11-20]" + +#----------------------------------------------------------------------- +$reviewPlayer = "C:\Program Files\VideoLAN\VLC\vlc.exe" + + +############################################################################################################# +# Evaluation part of the conversion script # +############################################################################################################# +if(!(Test-Path $reviewPlayer -PathType leaf)) +{ + Write-Host "vlc.exe not found, is the player installed? please check path in `"$reviewPlayer`"." -ForegroundColor Yellow + Read-Host -Prompt "Press Enter to exit" + exit +} +$reviewFiles = Get-content -LiteralPath "$PSScriptRoot\..\logs\$logFolderName\review_needed.log" | Measure-Object –Line +$ReviewCount = $reviewFiles.Lines + +Write-Host "There are $ReviewCount files to review.." -ForegroundColor Yellow +Write-Host + +$review_count = 1 + +foreach($review_pair in Get-Content -LiteralPath "$PSScriptRoot\..\logs\$logFolderName\review_needed.log") +{ + $oldFile,$newFile = $review_pair.split(',') + Write-Host "Playing $review_count converted file: $newFile" + Write-Host + + # Starting VLC Player with the file to review + Start-Process $reviewPlayer -ArgumentList `"$newFile`" + Start-Sleep -Seconds 6 + + # Wait until player is closed. + $processID = (Get-Process "vlc").id + Wait-Process -Id $processID + + $msg = 'Do you want to keep the newly converted file and delete the old? (N for deleting NEW-file) [Y/N]' + do { + $response = Read-Host -Prompt $msg + } until (($response -eq 'n') -or ($response -eq 'y')) + + if ($response -eq 'y') + { + Write-Host "delete old file, keep newly converted.." + $to_delete = $oldFile + } else + { + Write-Host "delete newly converted, keep old file" + $to_delete = $newFile + $failedVideos = $failedVideos + 1 + $convertedVideos = $convertedVideos - 1 + } + Write-Host "DELETED: $to_delete" -ForegroundColor Red + Remove-Item -LiteralPath $to_delete + Write-Host "------------------------------------------------------------------------------------------------" + Start-Sleep -Seconds 2 +} + +Read-Host -Prompt "Press Enter to exit" +############################################################################################################# +# END - conversion script \ No newline at end of file diff --git a/convert_Videos.ps1 b/convert_Videos.ps1 index c21ae4d..8987916 100644 --- a/convert_Videos.ps1 +++ b/convert_Videos.ps1 @@ -4,8 +4,9 @@ #----------------------------------------------------------------------- # Edit the $videoPath variable to point to your video-files folder: -$videoPath = 'M:\1_movies\_main.movies\' +#$videoPath = 'M:\1_movies\_main.movies\' #$videoPath = 'M:\2_serien\_main.series\' +$videoPath = 'M:\3_dokus\' #----------------------------------------------------------------------- # HEVC profiles: main, main10, main444 @@ -76,10 +77,15 @@ foreach($video in $videos) $video = $video.Replace("`"", "") $inputFile = $videoPath + $video - # Get and check File info for codec, if it's already HEVC: - JSON query: (['media']['track'][1]['Format']) - $fileDetails = cmd /c $fileTester $inputFile --Output=JSON | ConvertFrom-Json - $codec = $fileDetails.media.track[1].Format - #echo $codec + # Pre-file-check if "HEVC" exist in filename skip filechecking: + if ($video -match "HEVC") + { + $codec = "HEVC" + } else { + # Get and check File info for codec, if it's already HEVC: - JSON query: (['media']['track'][1]['Format']) + $fileDetails = cmd /c $fileTester $inputFile --Output=JSON | ConvertFrom-Json + $codec = $fileDetails.media.track[1].Format + } # If not already HEVC, convert video using NVEncC64: if($codec -ne "HEVC") @@ -96,7 +102,7 @@ foreach($video in $videos) Write-Host # If the Subtitles should not be copied, delete the "--sub-copy 1,2" argument. - $arguments = "--input `"$inputFile`" --codec hevc --audio-copy 1,2 --sub-copy 1,2 --profile $profile --output `"$outputFile`"" + $arguments = "--input `"$inputFile`" --codec hevc --audio-copy 1,2,3,4 --sub-copy 1,2,3,4 --profile $profile --output `"$outputFile`"" Start-Process $NVEncoder -ArgumentList $arguments -WindowStyle Minimized @@ -214,8 +220,13 @@ foreach($video in $videos) ############################################################################################################# if ($review) { - Write-Host "There are some files to review.. Starting reviewing first file." + $reviewFiles = Get-content -LiteralPath "$PSScriptRoot\logs\$logFolderName\review_needed.log" | Measure-Object –Line + $ReviewCount = $reviewFiles.Lines + + Write-Host "There are $ReviewCount files to review.." -ForegroundColor Yellow + Read-Host -Prompt "Press Enter to start reviewing first file" Write-Host + Write-Host "################################################################################################" $review_count = 1 foreach($review_pair in Get-Content -LiteralPath "$PSScriptRoot\logs\$logFolderName\review_needed.log")