Hello folks,
I needed space on the disks and have written one (two) script(s) in PowerShell to convert my MP4 and MKV files into HEVC/AAC.
I decided to use Handbrake for Video and Audio Transcoding and FFmpeg for Audio Transcoding only because Handbrake has a better resulting quality at a lower file size. FFmpeg works better with multiple instances simultaneously. So FFmpeg was better for Audio transcoding.
I would like to share the result with you.
You need to install a PowerShell module called Get-MediaInfo
Instructions on powershellgallery
Warning!!
I Transcoded hundreds of files with no error, but this doesn't mean it will do the same at your PC.
Please take a look at the code and change it to your needs.
What does the 1st script do:
How the script decides to convert:
Checking for Codecs used in the Files
Audio Transcoding (FFmpeg) :
The script differentiates between Mono/Stereo and Surround
Mono/Stereo :
Video Transcoding (Handbrake):
Handbrake Series :
Here is my 2nd Script.
This Script cleans up after the 1st script has done his job.
What does the 2nd script do:
Files to search for:
'.neu' + $file.Extension
'.nfo'
'.neu' + '.nfo'
'.neu-clearlogo.png'
'.neu-fanart.jpg'
'.neu-poster.jpg'
'.neu-discart.png'
'.neu-thumb.jpg'
'.neu-landscape.jpg'
'.neu-banner.jpg'
'.neu-clearart.png'
Proof will come, I have to make something to clean :-)
I needed space on the disks and have written one (two) script(s) in PowerShell to convert my MP4 and MKV files into HEVC/AAC.
I decided to use Handbrake for Video and Audio Transcoding and FFmpeg for Audio Transcoding only because Handbrake has a better resulting quality at a lower file size. FFmpeg works better with multiple instances simultaneously. So FFmpeg was better for Audio transcoding.
I would like to share the result with you.
You need to install a PowerShell module called Get-MediaInfo
Instructions on powershellgallery
Warning!!
I Transcoded hundreds of files with no error, but this doesn't mean it will do the same at your PC.
Please take a look at the code and change it to your needs.
What does the 1st script do:
- Read the folder you choose, recursive into an Array.
- Checking for Codecs used in the Files.
- Deciding how to convert.
- Runs 1 instance of Handbrake and up to 5 FFmpeg instances at the same time.
- Runs on CPU only to get the best visual results.
- Setting different parameters for Movies and Series (Series are scaled to 720P if resolution >720P (-w 720 --keep-display-aspect)).
- Generating a ".ignore" file so Emby ignores the actual folder.
- Converting into same Directory, but not deleting old file.
- Checking if file was converted.
- The path of the currently converting file is written to a .txt file.
- Writing every step into the console.
- This Script removes all Audio tracks except the first one
- This Script removes all Subtitles
How the script decides to convert:
Checking for Codecs used in the Files
- If Audio not AAC and Video not HEVC → convert Video and Video (Handbrake)
- If Audio not AAC and Video is HEVC → convert Audio copy Video (FFmpeg)
- If Audio is AAC and Video not HEVC → convert Video copy Audio (Handbrake)
- If Audio is AAC and Video is HEVC → do nothing
Audio Transcoding (FFmpeg) :
The script differentiates between Mono/Stereo and Surround
Mono/Stereo :
- $aacbitrate = '128k' (lower is possible, but not recommended)
- $aachz = '44100'
- $aacbitrate = '256k'
- $aachz = '48000'
Video Transcoding (Handbrake):
Handbrake Series :
- -e x265 --encoder-preset medium -w 720 --keep-display-aspect --vfr --quality
"$videoquality
" -E"$handbrakeaudiocodec
" -B"$handbrakeaudiobitrate
" --normalize-mix"$handbrakenormalize
" -i"$oldfile
" -o"$newfile
""
- -e x265 --encoder-preset medium --vfr --quality
"$videoquality
" -E"$handbrakeaudiocodec
" -B"$handbrakeaudiobitrate
" --normalize-mix"$handbrakenormalize
" -i"$oldfile
" -o"$newfile
""
Here is my 2nd Script.
This Script cleans up after the 1st script has done his job.
What does the 2nd script do:
- Read the folder you choose, recursive into an Array.
- Comparing old file and new file → duration and file size
- deleting old file if checks are OK
- Renaming new file to old file
- Checks for files maybe generated by Emby while transcoding
- Deleting these files if found.
- Deleting ".ignore" file if found
- Counting Videos "cleaned/renamed"
- Counting Errors for file size and duration
- Writing every step into the console.
Files to search for:
'.neu' + $file.Extension
'.nfo'
'.neu' + '.nfo'
'.neu-clearlogo.png'
'.neu-fanart.jpg'
'.neu-poster.jpg'
'.neu-discart.png'
'.neu-thumb.jpg'
'.neu-landscape.jpg'
'.neu-banner.jpg'
'.neu-clearart.png'
Proof will come, I have to make something to clean :-)