Update README.md and fix some stuff
This commit is contained in:
parent
9ad464f618
commit
3a33e96bb7
28
README.md
28
README.md
@ -1,10 +1,12 @@
|
||||
|
||||
# FFmpeg-HEVC-Video-Converter 1.0
|
||||
# Automated HEVC-Video-Converter 1.0
|
||||
|
||||
A PowerShell script to convert videos to the HEVC video format utilizing GPU hardware acceleration using FFmpeg for Windows.
|
||||
A PowerShell script to convert videos to the HEVC video format utilizing GPU hardware acceleration using NVEnc for Windows.
|
||||
|
||||
The main benefit being that you can save disk space significantly (most of the time).
|
||||
|
||||
![image](/attachments/985e0fa6-ec4a-4ad0-a1c7-d70f59e7a23d)
|
||||
|
||||
## Space Saving Examples
|
||||
|
||||
- 2.5GB MP4 to 500MB HEVC MP4
|
||||
@ -15,26 +17,24 @@ _Results vary and depend on the input video's format, bitrate etc._
|
||||
## Minimum System Requirements
|
||||
|
||||
- PC with at least 2 cores
|
||||
- Recent NVidia or AMD graphics card
|
||||
- Recent Nvidia graphics card
|
||||
- Enough free disk space for resulting video files
|
||||
|
||||
**VITAL: ALWAYS check the resulting video files, ending with "(HEVC)" for expected length and try them out in a video player checking for quality and smooth playback.**
|
||||
|
||||
## Encoding
|
||||
|
||||
During encoding (conversion) it is normal for high **CPU** and **GPU** usage. Be sure to only run the script when the PC has no other processes hogging up resources.
|
||||
|
||||
The script encodes the files alongside the original with (HEVC) at the end of the filename.
|
||||
The script encodes the files alongside the original with '-HEVC' at the end or inplace x265 replacement of the string in the filename.
|
||||
After the conversion, a test is performed on the new video file to ensure its integrity.
|
||||
If this test is successful, the old file will be deleted.
|
||||
If not, the failed conversion-file is deleted and registered.
|
||||
|
||||
## Decoding
|
||||
|
||||
The resulting HEVC videos require a more powerful PC to decode and playback, than the original would.
|
||||
|
||||
## Script Usage
|
||||
|
||||
1. Download FFmpeg for Windows: https://ffmpeg.zeranoe.com/builds/ (see screenshots below)
|
||||
2. Extract ffmpeg.exe to a known path/folder
|
||||
3. Download **convert_Videos.ps1** and create **video_file_list.txt** alongside it
|
||||
4. Make 4 edits in **convert_Videos.ps1** using PowerShell ISE
|
||||
5. Copy+paste full paths into **video_file_list.txt** and save
|
||||
6. Run **convert_Videos.ps1** to convert to HEVC
|
||||
1. Clone this Repository to your computer
|
||||
2. Download 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 ones
|
||||
4. Edit the $videoPath variable in the PowerShell file to point to your video-files folder
|
||||
5. Run **convert_Videos.ps1** to convert all video Files on the provided path to HEVC.
|
||||
|
@ -1,12 +1,14 @@
|
||||
# Converts videos to HEVC for given path:
|
||||
|
||||
# Ref: https://trac.ffmpeg.org/wiki/Encode/H.265
|
||||
# https://github.com/rigaya/NVEnc/releases
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
# Edit the $videoPath variable to point to your video-files folder:
|
||||
|
||||
$videoPath = 'M:\2_serien\_main.series\Luther\'
|
||||
|
||||
|
||||
# HEVC : main, main10, main444
|
||||
#-----------------------------------------------------------------------
|
||||
# HEVC profiles: main, main10, main444
|
||||
$profile = 'main10'
|
||||
|
||||
$NVEncoder = "$PSScriptRoot\encoder\NVEncC64.exe"
|
||||
@ -38,7 +40,7 @@ foreach($video in $videos)
|
||||
$video = $video.Replace("`"", "")
|
||||
$inputFile = $videoPath + $video
|
||||
|
||||
# Get and check File info for codec, if it is already HEVC: - JSON link: (['media']['track'][1]['Format'])
|
||||
# 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
|
||||
@ -60,7 +62,7 @@ foreach($video in $videos)
|
||||
|
||||
$arguments = "--input `"$inputFile`" --codec hevc --audio-copy 1,2 --profile $profile --output `"$outputFile`""
|
||||
|
||||
Start-Process $NVEncoder -ArgumentList $arguments #-WindowStyle Minimized
|
||||
Start-Process $NVEncoder -ArgumentList $arguments -WindowStyle Minimized
|
||||
|
||||
$processName = 'NVEncC64'
|
||||
Start-Sleep -Seconds 8
|
||||
@ -88,11 +90,12 @@ foreach($video in $videos)
|
||||
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']):
|
||||
# Check if File is valid; the duration of video must be the 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
|
||||
# This code gets the duration and splits it in two parts, only the part before the "." is needed:
|
||||
$StreamSize_old,$notused = $($fileDetails.media.track[0].Duration).split('.')
|
||||
$StreamSize_new,$notused = $($fileDetails_new.media.track[0].Duration).split('.')
|
||||
|
||||
Write-Host
|
||||
Write-Host "Old Duration was: $StreamSize_old `nnew Duration is: $StreamSize_new" -ForegroundColor White
|
||||
@ -101,7 +104,7 @@ foreach($video in $videos)
|
||||
if ($StreamSize_new -eq $StreamSize_old)
|
||||
{
|
||||
# Delete old video File!
|
||||
Write-Host "Conversion Succesful! - Deleting old file.."
|
||||
Write-Host "Conversion Successful! - Deleting old file.."
|
||||
Remove-Item -Path $inputFile
|
||||
} else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user