-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCHANGELOG.txt
139 lines (123 loc) · 9.53 KB
/
CHANGELOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
v 0.1.0
- Initial release. Supports Windows and 4K HDR resolution
v 0.2.0
- Added support for MacOS and Linux
-Tested on MacOS 11.0.1 "Big Sur"
-Tested on Ubuntu 20.04 LTS
- Updated help based comments for script functions
v 0.2.1
- Completely overhauled help based comments to be more organized and...helpful
- Added -Help parameter to easily view new help comments and examples
v 0.2.2
- Changed min-keyint value to preset default
- Lowered keyint value from 250 to 120 (seeks every 4 frames). This was an error on my part and was not meant to be that high
v0.2.3
- Changed output to a log file instead of the console. On Windows, ffmpeg creates a new line for each frame and the buffer cannot store the entire history
- Created new function Set-RootPath, which sets the path for the crop file and log file. Logic partially removed from New-CropFile function
- Changed test encodes to start at the 10 minute mark. It still only encodes 1000 frames, but it will be better test material than the intro screens/logos
v 0.2.4
- Fixed empty path error in New-CropFile function. The crop path variable was declared globally, but there was some kind of scoping issue
which was causing it to become empty. Set-RootPath now returns an object containing the crop and log paths.
- Changed test runs to begin at approximately 1 minute into the video. This gives a more accurate representation of what to expect when a full encode is performed
v 0.3.4
- Added multi-threading support while generating a crop file. 3 independent segments will be analyzed simultaneously, giving a nice performance boost
- Added PoshRSJobs module to further improve multi-threading performance
- Changed cropdetect to use modulus 2 instead of 16. This will perform similarly to Handbrake, but with a bit more precision
- Made Invoke-FFMpeg operating system agnostic
- Added an exception when crop height or width is 0. Before, the exception would be thrown by ffmpeg, which wasted additional time
- Made InputPath positional (position 0) instead of named. The -InputPath parameter can now be excluded if the input path is the first parameter used
- Updated console messages for clarity and fixed some formatting issues
v 0.4.4
- Added new parameter -MDColorPrimaries for sources that use BT.2020 instead of Display P3. This is a temporary solution until I can automate this with ffprobe
- Reduced crop seek duration to 8 minutes for each thread (previously, it was 10 minutes) to speed up the cropping stage of the script
v 0.4.5
- Extracted 5 functions into a new Module called FFTools. FFTools contains the following functions:
- Public
- Get-HDRMetadata - Automatically retrieves all HDR metadata using ffprobe
- Invoke-FFMpeg - Calls ffmpeg with various parameters specified during runtime. Use Help documentation to see all available parameters
- New-CropFile - Generates a crop file. Uses PoshRSJobs module for improved multi-threading
-Private
- Measure-Channels - Uses ffprobe to find the number of audio channels and calculates bitrate. Used in Set-AudioPreference function
- Set-AudioPreference - Helper function that builds a string array of audio arguments for ffmpeg to use, depending on user choice
- Removed 5 parameters related to HDR in FFEncoder.ps1 (no longer needed, see Get-HDRMetadata)
- Added -Audio parameter to FFEncoder.ps1 and Invoke-FFMpeg function. There are now 3 different Audio options (none, copy, or aac):
- 'copy' / 'c' will copy the primary audio stream. Note that this will fail if you try and pass object based audio like Atmos or DTS-X
- 'aac' will use ffmpeg's native encoder. A new optional parameter called -AacBitrate has been added to specify the bitrate to use for aac.
This value represents the bitrate per channel, and not the overall bitrate. Default is 64 kbps / channel.
- 'none / 'n' will exclude audio streams entirely.
- Added aliases for module functions
- Changed -Test parameter to -TestFrames, which now accepts an integer number of frames to encode. Default is still 1000
- Fixed small null bug in Get-RootPath function when a match cannot be made for the root path and the crop/log path had to use the OS default path instead
v. 0.4.6
- Removed Measure-AudioChannels function from the FFTools module and put the logic inside Set-AudioPreference. It was adding an extra layer of complexity
without providing much benefit.
- Fixed bug with AAC audio encoding in Set-AudioPreference function. When I refactored the function, I forgot to add the 'k' to the end of the bitrate argument
and it was encoding in mbps instead of kbps.
- Added Measure-CropDimensions function to FFTools module
- Overhauled console messages to give more information on progress before the encode begins
- Added color hash variables to the FFTools module for global use
- Changed default -CRF parameter value from 16.0 to 17.0
v. 0.5.6
- Added option "copyall" / "ca" as an argument to the -Audio parameter. This option will copy all audio streams from the source without encoding
- Added support for Dolby Digital AC-3 as an argument for the -Audio parameter using "AC3" / "DD". If the source contains a Dolby Digital track already,
it will be copied as the primary audio stream. Otherwise, the primary stream will be transcoded to AC-3 at the standard 640 kb/s.
- Added support for DTS Core Audio as an argument for the -Audio parameter using "DTS". If the source contains a DTS track already,
it will be copied as the primary audio stream. Otherwise, the primary stream will be transcoded to DTS (EXPERIMENTAL)
- Added support for selecting audio by stream number. Accepts values 1 (first stream) through 5 (5th stream)
- Added support for FLAC audio transcoding as an argument to the -Audio parameter using "FLAC" or "F". This is only recommended for lossless codecs.
- Added support for Dolby Digital Plus (E-AC3) audio
- Changed -AacBitrate to -AudioBitrate / -AB so it works with AC3, EAC3, DTS, and AAC
- Added subtitle passthrough support with the -Subtitles parameter. Supported language arguments are:
- All - "all" / "a"
- None - "none" / "n"
- Default (first) - "default" / "d"
- English - "eng"
- French - "fra"
- German - "ger"
- Spanish - "spa"
- Dutch - "dut"
- Danish - "dan"
- Finnish - "fin"
- Norwegian - "nor"
- Czech - "cze"
- Polish - "pol"
- Chinese - "chi"
- Korean - "kor"
- Greek - "gre"
- Romanian - "rum"
- Added support for average bitrate rate control (ABR) as an alternative to CRF with the -VideoBitrate / -VBitrate parameter
- Supports 2 pass ABR using the optional -Pass parameter. Default is 2 pass
- Created new public module function Invoke-TwoPassFFMpeg for 2 pass ABR encodes
- Added -AqMode parameter. Default is 2 (all presets)
- Added -AqStrength parameter. Default is 1.00 (preset slow)
- Added -PsyRd parameter. Default is 2.00 (preset slow)
- Added -PsyRdoq parameter. Default is 1.00 (preset slow)
- Added -NrInter parameter. Default is 0
v. 0.6.6
- Added support for Fraunhofer AAC (libfdk_aac)
- Added support for aac_at audio. This codec is only available on MacOS
- Added -QComp parameter. Default is 0.6 (all presets)
- Added switch parameter for -BIntra. Default is defined by the preset used
- Added -BFrames parameter. Default is defined by the preset used
- Changed -Deblock default to -2,-2
- Added support for source resolutions of 1080p and lower
- Source dimensions are determined by the Measure-CropDimensions function
- All 8 bit sources are encoded using profile main10 to help with banding
- Currently no support for 1080p HDR. I plan to add this down the line
- Added aud and hrd parameters for UHD compliant encodes
- Added the option to include a second audio stream, which is compatible with all audio options
- Added support for stream copying based on stream number in ffmpeg/ffprobe
- Added option to downmix audio streams to stereo, while still retaining the LFE track
- Added additional logic to allow for stream copying and filtering simultaneously
- Improvements to 2-pass encoding. The script now checks for an existing x265 log file (larger than 9 MB) and will skip the first pass if found
- Added utility function Write-Report to write important encoding information to a file named "<Title>.rep". This acts as a quick-view for encoding metrics, and is easier to digest than the full log file
- To generate a report file, use the -GenerateReport parameter
- Added utility function to show a file deletion prompt when necessary
- Added Set-Parameters utility function, which assigns default preset values to parameters when they aren't passed by the user (subme, b-intra, bframes, etc.)
- Added -RemoveFiles parameter that deletes extra files generated while the script is running
- Excludes input, output, and report files
- Added a deinterlace filter (CRF only)
- Added support for HDR10+ (additional dependency required)
- Only working on Windows
- Created a new function Set-FFMpegArgs to condense the two ffmpeg functions into one function. This function builds a dynamic array list based on InputPath
- Added HDR10+ support for UNIX systems