Add codec checking, error-handling and automated file flushing
This commit is contained in:
parent
3d5061d936
commit
9ad464f618
@ -3,14 +3,14 @@
|
||||
# Ref: https://trac.ffmpeg.org/wiki/Encode/H.265
|
||||
# https://github.com/rigaya/NVEnc/releases
|
||||
|
||||
$videoPath = 'M:\1_movies\kids.movies\Alvin und die Chipmunks (1-3)\'
|
||||
$videoPath = 'M:\2_serien\_main.series\Luther\'
|
||||
|
||||
|
||||
# HEVC : main, main10, main444
|
||||
$profile = 'main10'
|
||||
|
||||
$NVEncoder = "$PSScriptRoot\encoder\NVEncC64.exe"
|
||||
$arguments = ''
|
||||
$fileTester = "$PSScriptRoot\mediainfo.exe"
|
||||
|
||||
if(!(Test-Path $NVEncoder -PathType leaf))
|
||||
{
|
||||
@ -18,65 +18,129 @@ if(!(Test-Path $NVEncoder -PathType leaf))
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
# Gets Video List File Contents
|
||||
# Get video list from provided path:
|
||||
$videos = Get-ChildItem -Path $videoPath -Name -Recurse -Include ('*.avi', '*.mp4', '*.mkv')
|
||||
$videoID = 1
|
||||
$videoID = 0
|
||||
$notConvertedVideos = 0
|
||||
$failedVideos = 0
|
||||
$count = $videos.Count
|
||||
if($videos.Count -lt 1)
|
||||
{
|
||||
Write-Host "No videos found in: $PSScriptRoot\video_file_list.txt" -ForegroundColor Red
|
||||
Write-Host "No videos found in: $videoPath" -ForegroundColor Red
|
||||
exit
|
||||
}
|
||||
|
||||
Write-Host "Converting $count videos.." -ForegroundColor Cyan
|
||||
Write-Host "Found $count videos. - starting converter.." -ForegroundColor Cyan
|
||||
|
||||
foreach($video in $videos)
|
||||
{
|
||||
# Converts video using NVEncC64
|
||||
|
||||
$video = $video.Replace("`"", "")
|
||||
$inputFile = $videoPath + $video
|
||||
$outputFile = $videoPath + $video.Insert(($video.Length - 4), '(HEVC)')
|
||||
Write-Host
|
||||
Write-Host "Converting video ($videoID of $count), please wait.." -ForegroundColor Magenta
|
||||
Write-Host "$video `nto:`n$outputFile" -ForegroundColor White
|
||||
Write-Host
|
||||
|
||||
$arguments = "--input `"$inputFile`" --codec hevc --audio-copy 1,2 --profile $profile --output `"$outputFile`""
|
||||
|
||||
Start-Process $NVEncoder -ArgumentList $arguments -WindowStyle Minimized
|
||||
|
||||
$processName = 'NVEncC64'
|
||||
Start-Sleep -Seconds 8
|
||||
# Sets to use 3 cores (always set to one less core that your CPU has)
|
||||
# 2 Cores = 3, 3 Cores = 7, 4 cores = 15, 5 cores = 31, 6 cores = 63
|
||||
# Code to calculate for your CPU:
|
||||
# $noOfCores = Get-WmiObject Win32_Processor | Measure-Object NumberOfLogicalProcessors -Sum
|
||||
# $noOfCores.Sum = $noOfCores.Sum - 1
|
||||
# [math]::Pow(2,$($noOfCores).Sum) - 1
|
||||
#
|
||||
$process = Get-Process $processName; $process.ProcessorAffinity=7
|
||||
Start-Sleep -Seconds 8
|
||||
# Sets priorty to High
|
||||
# Values: High, AboveNormal, Normal, BelowNormal, Low
|
||||
$process = Get-Process -Id $process.Id
|
||||
$process.PriorityClass = 'High'
|
||||
|
||||
# Waits for process to complete
|
||||
$processID = (Get-Process $processName).id
|
||||
Wait-Process -Id $processID
|
||||
# Get and check File info for codec, if it is already HEVC: - JSON link: (['media']['track'][1]['Format'])
|
||||
$fileDetails = cmd /c $fileTester $inputFile --Output=JSON | ConvertFrom-Json
|
||||
$codec = $fileDetails.media.track[1].Format
|
||||
#echo $codec
|
||||
|
||||
if(Test-Path $outputFile)
|
||||
# If not already HEVC, convert video using NVEncC64:
|
||||
if($codec -ne "HEVC")
|
||||
{
|
||||
Write-Host "CONVERSION WORKED! FILE: `"$outputFile`" FOUND" -ForegroundColor Yellow
|
||||
# TODO delete old and Move file name!
|
||||
# Configure new file naming:
|
||||
if ($video -match "x264")
|
||||
{
|
||||
$outputFile = $videoPath + $video.Replace("x264", "x265")
|
||||
} else {
|
||||
$outputFile = $videoPath + $video.Insert(($video.Length - 4), '-HEVC')
|
||||
}
|
||||
Write-Host
|
||||
Write-Host "Converting video ($videoID of $count), please wait.." -ForegroundColor Magenta
|
||||
Write-Host "$video `nto:`n$outputFile" -ForegroundColor White
|
||||
Write-Host
|
||||
|
||||
$arguments = "--input `"$inputFile`" --codec hevc --audio-copy 1,2 --profile $profile --output `"$outputFile`""
|
||||
|
||||
Start-Process $NVEncoder -ArgumentList $arguments #-WindowStyle Minimized
|
||||
|
||||
$processName = 'NVEncC64'
|
||||
Start-Sleep -Seconds 8
|
||||
# Sets to use 3 cores (always set to one less core that your CPU has)
|
||||
# 2 Cores = 3, 3 Cores = 7, 4 cores = 15, 5 cores = 31, 6 cores = 63
|
||||
# Code to calculate for your CPU:
|
||||
# $noOfCores = Get-WmiObject Win32_Processor | Measure-Object NumberOfLogicalProcessors -Sum
|
||||
# $noOfCores.Sum = $noOfCores.Sum - 1
|
||||
# [math]::Pow(2,$($noOfCores).Sum) - 1
|
||||
#
|
||||
$process = Get-Process $processName; $process.ProcessorAffinity=7
|
||||
Start-Sleep -Seconds 8
|
||||
# Sets priorty to High
|
||||
# Values: High, AboveNormal, Normal, BelowNormal, Low
|
||||
$process = Get-Process -Id $process.Id
|
||||
$process.PriorityClass = 'High'
|
||||
|
||||
# Waits for process to complete
|
||||
$processID = (Get-Process $processName).id
|
||||
Wait-Process -Id $processID
|
||||
|
||||
|
||||
if(Test-Path $outputFile)
|
||||
{
|
||||
Write-Host "CONVERSION DONE! FILE: `"$outputFile`" FOUND" -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 4
|
||||
|
||||
# Check if File is valid, with Duration of Video - it must be same! (['media']['track'][0]['Duration']):
|
||||
$fileDetails_new = cmd /c $fileTester $outputFile --Output=JSON | ConvertFrom-Json
|
||||
|
||||
$StreamSize_old = $fileDetails.media.track[0].Duration
|
||||
$StreamSize_new = $fileDetails_new.media.track[0].Duration
|
||||
|
||||
Write-Host
|
||||
Write-Host "Old Duration was: $StreamSize_old `nnew Duration is: $StreamSize_new" -ForegroundColor White
|
||||
Write-Host
|
||||
|
||||
if ($StreamSize_new -eq $StreamSize_old)
|
||||
{
|
||||
# Delete old video File!
|
||||
Write-Host "Conversion Succesful! - Deleting old file.."
|
||||
Remove-Item -Path $inputFile
|
||||
} else
|
||||
{
|
||||
# Delete corrupt File!
|
||||
Write-Host "Conversion Failded! - Deleting new converted file.."
|
||||
Remove-Item -Path $outputFile
|
||||
$failedVideos = $failedVideos + 1
|
||||
$notConvertedVideos = $notConvertedVideos + 1
|
||||
$videoID = $videoID - 1
|
||||
}
|
||||
}
|
||||
|
||||
# Increments video counter:
|
||||
$videoID = $videoID + 1
|
||||
Start-Sleep -Seconds 4
|
||||
} else
|
||||
{
|
||||
# Increments not converted video counter:
|
||||
$notConvertedVideos = $notConvertedVideos + 1
|
||||
Start-Sleep -Seconds 4
|
||||
}
|
||||
|
||||
# Increments video counter
|
||||
$videoID = $videoID + 1
|
||||
Start-Sleep -Seconds 4
|
||||
}
|
||||
|
||||
Write-Host "Finished converted $count videos." -ForegroundColor Green
|
||||
# If confersion is done:
|
||||
if($notConvertedVideos -eq 0)
|
||||
{
|
||||
Write-Host "Finished converted $videoID out of $count videos." -ForegroundColor Green
|
||||
} else
|
||||
{
|
||||
if($failedVideos -eq 0)
|
||||
{
|
||||
Write-Host "Finished converted $videoID out of $count videos. - $notConvertedVideos where not converted because of already correct codec!" -ForegroundColor Green
|
||||
} else
|
||||
{
|
||||
Write-Host "Finished converted $videoID out of $count videos. - $notConvertedVideos where not converted because error or already correct codec!!" -ForegroundColor Green
|
||||
Write-Host "$failedVideos have failed!" -ForegroundColor Red
|
||||
|
||||
exit
|
||||
}
|
||||
}
|
||||
|
||||
Read-Host -Prompt "Press Enter to exit"
|
BIN
mediainfo.exe
Normal file
BIN
mediainfo.exe
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user