A PowerShell script for converting video to the HEVC video format using GPU hardware acceleration with NVEnc for Windows.
A PowerShell script for converting video to the HEVC video format using GPU hardware acceleration with NVEnc for Windows.
@ -19,23 +20,21 @@ _Results vary and depend on the input video's format, bitrate etc._
- Recent nvidia graphics card ([see: NVENC support matrix](https://developer.nvidia.com/video-encode-decode-gpu-support-matrix))
- Recent nvidia graphics card ([see: NVENC support matrix](https://developer.nvidia.com/video-encode-decode-gpu-support-matrix))
- Latest nvidia graphics drivers
- Latest nvidia graphics drivers
## Encoding
## Encoding
During encoding (conversion), high **CPU** and **GPU** usage is normal. Make sure that you only run the script if no other graphics processes are running on the computer. (Example computer games)
During encoding (conversion), high **CPU** and **GPU** usage is normal. Make sure that you only run the script if no other graphics processes are running on the computer. (Example computer games)
The script converts the files next to the original with '-HEVC' at the end or by replacing the string x264 (old) in the file name with x265.
The script converts the files next to the original with '-HEVC' at the end or by replacing the string x264 (old) in the file name with x265.
After conversion, a test of the new video file is performed to ensure its integrity.
After conversion, a test of the new video file is performed to ensure its integrity.
If this test is successful, the old file is deleted.
If this test is successful, the old file is deleted.
If not, the failed conversion file is deleted and logged.
If not, the failed conversion file is deleted and logged.
## Script Usage
## Script Usage
1. Clone this repository on your computer
1. Clone this repository on your computer
2. Download the latest NVEnc for Windows: https://github.com/rigaya/NVEnc/releases
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.
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!**)
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.
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.
Write-Host"Finished converted $convertedVideos out of $count videos."-ForegroundColorGreen
}else
{
if($failedVideos-eq0)
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because of already correct codec!"-ForegroundColorGreen
}else
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because error or already correct codec!!"-ForegroundColorGreen
Write-Host"$failedVideos have failed!"-ForegroundColorRed
}
}
Write-Host"Directory size before conversion: $folderSizeInGB"
Write-Host"Directory size after conversion: $folderSizeInGB2"
Write-Host"Finished converted $convertedVideos out of $count videos."-ForegroundColorGreen
}else
{
if($failedVideos-eq0)
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because of already correct codec!"-ForegroundColorGreen
}else
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because error or already correct codec!!"-ForegroundColorGreen
Write-Host"$failedVideos have failed!"-ForegroundColorRed
}
}
Write-Host"Directory size before conversion: $folderSizeInGB"
Write-Host"Directory size after conversion: $folderSizeInGB2"
Write-Host"Finished converted $convertedVideos out of $count videos."-ForegroundColorGreen
}else
{
if($failedVideos-eq0)
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because of already correct codec!"-ForegroundColorGreen
}else
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because error or already correct codec!!"-ForegroundColorGreen
Write-Host"$failedVideos have failed!"-ForegroundColorRed
}
}
Write-Host"Directory size before conversion: $folderSizeInGB"
Write-Host"Directory size after conversion: $folderSizeInGB2"
Write-Host"Finished converted $convertedVideos out of $count videos."-ForegroundColorGreen
Write-Host"Finished converted $convertedVideos out of $count videos."-ForegroundColorGreen
}
}else
else{
{
if($failedVideos-eq0){
if($failedVideos-eq0)
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because of already correct codec!"-ForegroundColorGreen
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because of already correct codec!"-ForegroundColorGreen
}
}else
else{
{
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because error or already correct codec!!"-ForegroundColorGreen
Write-Host"Finished converted $convertedVideos out of $count videos. - $notConvertedVideos where not converted because error or already correct codec!!"-ForegroundColorGreen
Write-Host"$failedVideos have failed!"-ForegroundColorRed
Write-Host"$failedVideos have failed!"-ForegroundColorRed