gpower2
16th February 2014, 21:20
As a personal bet, I developed a small GUI utility to use mkvinfo and mkvextract cli tools from MKVToolnix pack, in order to extract tracks, chapters and CUE sheets from mkv files.
Though there are already other GUI utilities, I found them rather slow (original MkvExtract GUI), or inefficient (MkvExtractGUI-2 does not extract attachment tracks correctly).
So, gMKVExtractGUI was born, written in pure C# .NET v2 (.NET v4 since v1.9.0) and it works!
Current version is v2.14.0 and you can always find the latest executable file here:
https://github.com/Gpower2/gMKVExtractGUI/releases (https://github.com/Gpower2/gMKVExtractGUI/releases)
Other download locations:
https://www.videohelp.com/software/gMKVExtractGUI
http://www.softpedia.com/get/Multimedia/Video/Other-VIDEO-Tools/gMKVExtractGUI.shtml
Note: After version v2.9.0, I switched from SourceForge (https://sourceforge.net/projects/gmkvextractgui/) to Github (https://github.com/Gpower2/gMKVExtractGUI), and all new versions will be released there henceforth.
Buy me a beer :) (https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=YZZQZYL2Y6UNG)
From v1.6.4 Linux is fully supported through MONO framework.
For use with MKVToolNix v9.0.0 and later, v1.7.0 or newer is required.
From MKVToolNix v9.6.0 and later, the JSON output from mkvmerge is used, so Newtonsoft.Json.dll is required (bundled).
From v1.9.0 .NET Framework v4 is required.
Batch support is supported from v2.0.0.
Dark mode is supported from v2.8.0.
Localization is supported from v2.13.0.
Key features:
Use almost 100% of mkvextract functionality (supports extraction of tracks, attachments, chapters in XML, OGM and CUE, timecodes, tags and CUE sheet)
Use mkvinfo to analyse mkv elements really really fast
Automatically detects MKVToolnix installation directory from registry
It doesn't require the executable to be placed inside MKVToolnix directory, but it still checks for it if registry search fails
Uses file extensions for tracks according to CODEC_ID as defined in official mkvextract documentation
Uses separate thread for invoking mkvextract in order to have a responsive GUI
It incorporates a job mode for batch extracting (new in v1.6)
Supports Linux through MONO (new in v1.6.4)
Supports all MKVToolnix versions from v4.x and newer
Supports batch extraction of multiple files (new in v2.0.0)
Supports custom output filename patterns (new in v2.5.0)
Supports adding sub-directories in the custom output filename patterns (new in v2.7.0)
Supports dark mode (new in v2.8.0)
Changelog:
v2.14.0
chore(localization): refine Simplified Chinese translations by @ambitiuswisdom in #46
fix: Add guard to ApplyResponsiveLayout for early resize safety. Fixes #51
fix: Fix translation grid cell commit logic in order to avoid overwriting the whole translation text per key stroke. Fixes #45
fix: Fix HighDPI mode for Windows by querying during start up and selecting the best mode available for the current Windows version. Fixes #36
v2.13.0
feat: Add localization feature (#39)
perf: Use typed synchronous extraction delegates in gMKVJob and gMKVExtract
perf: Remove DoEvents from SetTableLayoutMainStatus methods in main Form
perf: Replace task polling with continuation-based TPL in main Form.
perf: Replace thread polling with event-driven extraction completion
perf: Send async events for updating the progress and status fields in the forms.
fix(dark): Fix scrollbars in dark mode for RichTextBox.
fix(dark): Fix buttons light mode theming when switching from dark to light mode during runtime.
fix(dark): Fix status strip in dark mode for Mono runtime
fix: Fix gform DPI autoscaling and force initial DPI scaling on Mono in gForm.InitDPI. References issues #36 #41 (#42)
chore: Sanitize all files with the same line endings (CRLF) and encoding (UTF-8 without BOM) for consistency
chore: Fix public API of gMKVToolnix sevices
v2.12.0
doc: Update the user manual with the new Advanced Options.
fix: The Defaults button in Options form now resets the new Advanced Options too.
feat: Add support for raw and fullraw track extraction modes. This closes #22 (#33)
feat: Add option to disable BOM for text files (v96.0+) #31 (#32)
fix: Fix key overrides of custom TextBox controls for Ctrl+A and Ctrl+C
fix: Changed txtLog to gRichTextBox and removed unused code
feat: Add a Select button that displays the Context Menu as another entry point for it. #27 (#30)
fix: fix MkvToolnixPath detection when Settings path is empty (#29) Thanks @lapluis
v2.11.1
fix: Fix issue with Job manager when adding tracks that don't have CodecPrivate data, like PGS subs. thanks arestarh
v2.11.0
feat: Add tooltips and an option to disable/enable them. Closes #21 (#24)
feat: Support checking/unchecking all Forced tracks per track type.
feat: Add support for the Forced track property. Closes #20
feat: Add option for overwriting existing files when extracting. This closes #18 (#19)
feat(tags): Add output filename options for tags. Closes #12
feat: Changed the output file extension for the OGM chapter type from "ogm.txt" to "txt" in the `gMKVToolNix.MkvExtract` namespace. Closes #4
fix(linux): Fix some more possible Linux issues with P/Invoke
fix(linux): correctly fix gRichTextBox issue in Linux
fix(linux): Fix some issues in Linux by excluding paths with P/Invoke.
docs: Enhance README and add docs folder with a basic User Manual
tests: Introduce Unit Tests and refactor part of the code for testability and performance (#11)
perf: Improve context menu creation
perf: Core refactor
Huge refactor of parsing state, practically making parsing stateless
Refactored the process output handling, by using List instead of StringBuilder to avoid splitting into individual line strings afterwards
Removed file existence checks for batch requests to minimize the IO operations
Various code optimizations in string operations
Various code formatting improvements
Refactor gMKVMerge, option handling and codec private data logic (#15)
Refactor gMKVInfo, fix typos and improve parsing (#14)
Refactor gMKVExtract and related components (#13)
v2.10.0
fix(ui): Show "Extraction completed!" message in the segment info text box instead of the label status, to avoid visual clatter (thanks @dclxvplusone)
feat(chapters): Add new PBF chapter type. It automatically transforms the default XML chapter type to the PBF chapter type. Comes with no guarantees, since documentation is basically non-existent
Reorganize and refactor various parts of the code. Switch to using Newtonsoft.Json via Nuget and update to latest version
v2.9.1
fix(init): Revamped the init sequence for detecting the MKVToolnix path and added a new button to manually trigger the auto detect sequence.
fix(logs): Fix various logs in FrmMain2 and gMKVHelper.
v2.9.0
fix(progress): Update the task bar progress bar value based on the total progress and not on the individual job progress
fix(code): Switch to unboxed types and minor optimizations.
fix(gForm): Add the form handle in the remaining message boxes in gForm
feat(dark): Implement Dark Mode in a new way with a bit of help from AI (thanks Jules!)
fix(files): Fix file structure
Create README.md
v2.8.1
fix(dark): Possible fix of a bug with ComboBox in dark mode (thanks vertigo220!)
v2.8.0
Add support for Dark Mode
v2.7.0
Add explicit support for AV1 video codec
Add support for appending input files via drag and drop (thanks vertigo220!)
Make the success dialog popup appear as top most form across desktop (thanks vertigo220!)
Fix the Abort buttons state before the success dialog pop up appears (thanks vertigo220!)
Add new placeholder for directory separator in Options (thanks Liquid, oniiz86!)
Add new Status Strip in Options form in order to make resize easier
Add min size in the Options form to avoid minimizing it to size 1,1
v2.6.4
Minor code optimizations
Add final Trim when generating the output filename (thanks tormento!)
v2.6.3
Fix calculating delays from mkvinfo. (Thanks kedautinh12!)
v2.6.2
Fix attachment filename for all cases. (Thanks mastrboy!)
Improve track selection when filter value is an empty string
Optimize algo to avoid unnecessary comparisons
v2.6.1
Replace invalid file characters with underscore character ('_') from output filename
v2.6.0
Add support for new element "Language IETF"
Minor code optimizations/modernization
v2.5.2
Fix issue in checking for an existing job when adding a new job
v2.5.1
Fix finding delays with newer mkvinfo versions
Optimize finding delays with mkvinfo by searching only for tracks that couldn't find delays with mkvmerge
v2.5.0
Ask the user to create the output directory if it doesn't exist
Various improvements on Form Controls
Added new "Options" form to support custom output filename patterns
Check if a file with the same filename already exists before extracting and add a counter to the output filename to avoid overwritting the original file
v2.4.2
Stop trying to find delays in matroska files that don't contain any video tracks
v2.4.1
Fix attachment extraction
v2.4.0
Enclose language in [] characters in the output filename for tracks, in order for MKVToolNix GUI to be able to derive it
Quote output filename in chapters, tags and cuesheet when using the new MKVToolNix cli
Fix the necessary input fields check when extracting tags and cuesheet
Refactor output filename calculation
v2.3.0
Add new setting for default output directory
Switch to "timestamps_v2" instead of "timecodes_v2" for MKVToolNix v17+
Add support for the new mkvextract syntax for MKVToolNix v17+
Add a new commandline argument --mkvtoolnix="..." to specify a manual path for MKVToolNix
v2.2.0
Change the output directory behavior
Add custom DPI scaling code and enable it on all forms
Add new manifest Property "dpiAwareness" for newest Windows Versions (Windows 10 v1607+)
Added new Audio Codec_ID A_EAC3 and A_MLP
Added some missing video and subtitle codec_id
Remove unnecessary separator in context menu
Increase the width of the percentage labels in Main form
Decrease the height of the buttons in Log Form
v2.1.0
Fix Linux issues
Fix adding files from command line
Add support for passing directories from command line
Make right click to change selection in the TreeView
v2.0.0
New form that supports batch extracting!
Fix bug when removing multiple jobs from Job Manager
Add the filename in the track progress report label in the Job Manager
Add new properties in the gMKVSegmentInfo class
v1.9.2:
Add more Log messages
Add more functionality to the Log Form
Fix some cases where settings were getting overriden during start up (thanks Bal65, RyFeR26!)
Switch to using --gui-mode for mkvextract versions v9.7.0 and newer, while keeping existing functionality for backwards compatibility
Hopefully solve all remaining issues with locale on Linux (thanks djcj!)
v1.9.1
Implement new method to read standard output character by character (fixes Linux parsing)
Replace hard-coded newline characters with Environment.NewLine
Improve parsing of mkvinfo output
Add exceptions to the log
Change version identification in Linux
Add more sanity checks
Fix copy-paste bugs in Settings
Add more log messages in Settings
Simplify version checking for Linux and OSX for mkvinfo and mkvmerge
Fix small cosmetic bug for Linux in main Form
Add LICENSE.md for NewtonSoft
Add log for detecting versions
When on Linux, check for mkvmerge in /usr/bin first
v1.9.0
Switch to .NET v4
Add new JSON parser for reading the JSON identification info from mkvmerge (Based on NewtonSoft JSON.NET, Newtonsoft.Json.dll)
Fix issues with Linux case sensitivity (hopefully!) (thanks djcj!)
Fix locale issues with Linux (hopefully!) (thanks djcj and Mosu!)
Make application dpi aware (thanks stax76!)
Fix initial size when there is no ini file (thanks bin_ch!)
Fix bug when in job mode and popup checkbox is unchecked and adding a job results in status label showing "Extraction completed!" (thanks bin_ch!)
Switch to using SaveFileDialog and OpenFileDialog instead of FolderBrowserDialog (thanks arestarh!)
Fix rare case where Track properties in mkvmerge verbose identification occupy more than one line
Change namespace from gMKVToolnix to gMKVToolNix
v1.8.0
Change minimum size in main form
Play Windows Asterisk sound when success popup does not show
Make mkvinfo's output parsing more robust
Add parsing of mkvmerge's new output data (thanks Mosu!!!)
Add as many fallback mechanisms as possible, in order to maintain compatibility with older versions
Clear input file textBox in main form, when MKVToolNix path is changed
Clear status and progress bar in main form, when an error has occured during extraction and no popup was selected
Add new setting for showing popup message in success in job manager
Fix some UI issues in Job Manager form
Add a workaround for buggy output from mkvmerge in older versions (v4.0)
Changed the main form's minimum size to 400x400
Added horizontal scroll bar to mkv track list
Add job counter in the text of the jobs groupbox
Make Jobs Grid Columns Autofill
Older changelog here (https://forum.doom9.org/showthread.php?p=2011596#post2011596)
Hope you enjoy this little utility and feedback is always appreciated! :)
Though there are already other GUI utilities, I found them rather slow (original MkvExtract GUI), or inefficient (MkvExtractGUI-2 does not extract attachment tracks correctly).
So, gMKVExtractGUI was born, written in pure C# .NET v2 (.NET v4 since v1.9.0) and it works!
Current version is v2.14.0 and you can always find the latest executable file here:
https://github.com/Gpower2/gMKVExtractGUI/releases (https://github.com/Gpower2/gMKVExtractGUI/releases)
Other download locations:
https://www.videohelp.com/software/gMKVExtractGUI
http://www.softpedia.com/get/Multimedia/Video/Other-VIDEO-Tools/gMKVExtractGUI.shtml
Note: After version v2.9.0, I switched from SourceForge (https://sourceforge.net/projects/gmkvextractgui/) to Github (https://github.com/Gpower2/gMKVExtractGUI), and all new versions will be released there henceforth.
Buy me a beer :) (https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=YZZQZYL2Y6UNG)
From v1.6.4 Linux is fully supported through MONO framework.
For use with MKVToolNix v9.0.0 and later, v1.7.0 or newer is required.
From MKVToolNix v9.6.0 and later, the JSON output from mkvmerge is used, so Newtonsoft.Json.dll is required (bundled).
From v1.9.0 .NET Framework v4 is required.
Batch support is supported from v2.0.0.
Dark mode is supported from v2.8.0.
Localization is supported from v2.13.0.
Key features:
Use almost 100% of mkvextract functionality (supports extraction of tracks, attachments, chapters in XML, OGM and CUE, timecodes, tags and CUE sheet)
Use mkvinfo to analyse mkv elements really really fast
Automatically detects MKVToolnix installation directory from registry
It doesn't require the executable to be placed inside MKVToolnix directory, but it still checks for it if registry search fails
Uses file extensions for tracks according to CODEC_ID as defined in official mkvextract documentation
Uses separate thread for invoking mkvextract in order to have a responsive GUI
It incorporates a job mode for batch extracting (new in v1.6)
Supports Linux through MONO (new in v1.6.4)
Supports all MKVToolnix versions from v4.x and newer
Supports batch extraction of multiple files (new in v2.0.0)
Supports custom output filename patterns (new in v2.5.0)
Supports adding sub-directories in the custom output filename patterns (new in v2.7.0)
Supports dark mode (new in v2.8.0)
Changelog:
v2.14.0
chore(localization): refine Simplified Chinese translations by @ambitiuswisdom in #46
fix: Add guard to ApplyResponsiveLayout for early resize safety. Fixes #51
fix: Fix translation grid cell commit logic in order to avoid overwriting the whole translation text per key stroke. Fixes #45
fix: Fix HighDPI mode for Windows by querying during start up and selecting the best mode available for the current Windows version. Fixes #36
v2.13.0
feat: Add localization feature (#39)
perf: Use typed synchronous extraction delegates in gMKVJob and gMKVExtract
perf: Remove DoEvents from SetTableLayoutMainStatus methods in main Form
perf: Replace task polling with continuation-based TPL in main Form.
perf: Replace thread polling with event-driven extraction completion
perf: Send async events for updating the progress and status fields in the forms.
fix(dark): Fix scrollbars in dark mode for RichTextBox.
fix(dark): Fix buttons light mode theming when switching from dark to light mode during runtime.
fix(dark): Fix status strip in dark mode for Mono runtime
fix: Fix gform DPI autoscaling and force initial DPI scaling on Mono in gForm.InitDPI. References issues #36 #41 (#42)
chore: Sanitize all files with the same line endings (CRLF) and encoding (UTF-8 without BOM) for consistency
chore: Fix public API of gMKVToolnix sevices
v2.12.0
doc: Update the user manual with the new Advanced Options.
fix: The Defaults button in Options form now resets the new Advanced Options too.
feat: Add support for raw and fullraw track extraction modes. This closes #22 (#33)
feat: Add option to disable BOM for text files (v96.0+) #31 (#32)
fix: Fix key overrides of custom TextBox controls for Ctrl+A and Ctrl+C
fix: Changed txtLog to gRichTextBox and removed unused code
feat: Add a Select button that displays the Context Menu as another entry point for it. #27 (#30)
fix: fix MkvToolnixPath detection when Settings path is empty (#29) Thanks @lapluis
v2.11.1
fix: Fix issue with Job manager when adding tracks that don't have CodecPrivate data, like PGS subs. thanks arestarh
v2.11.0
feat: Add tooltips and an option to disable/enable them. Closes #21 (#24)
feat: Support checking/unchecking all Forced tracks per track type.
feat: Add support for the Forced track property. Closes #20
feat: Add option for overwriting existing files when extracting. This closes #18 (#19)
feat(tags): Add output filename options for tags. Closes #12
feat: Changed the output file extension for the OGM chapter type from "ogm.txt" to "txt" in the `gMKVToolNix.MkvExtract` namespace. Closes #4
fix(linux): Fix some more possible Linux issues with P/Invoke
fix(linux): correctly fix gRichTextBox issue in Linux
fix(linux): Fix some issues in Linux by excluding paths with P/Invoke.
docs: Enhance README and add docs folder with a basic User Manual
tests: Introduce Unit Tests and refactor part of the code for testability and performance (#11)
perf: Improve context menu creation
perf: Core refactor
Huge refactor of parsing state, practically making parsing stateless
Refactored the process output handling, by using List instead of StringBuilder to avoid splitting into individual line strings afterwards
Removed file existence checks for batch requests to minimize the IO operations
Various code optimizations in string operations
Various code formatting improvements
Refactor gMKVMerge, option handling and codec private data logic (#15)
Refactor gMKVInfo, fix typos and improve parsing (#14)
Refactor gMKVExtract and related components (#13)
v2.10.0
fix(ui): Show "Extraction completed!" message in the segment info text box instead of the label status, to avoid visual clatter (thanks @dclxvplusone)
feat(chapters): Add new PBF chapter type. It automatically transforms the default XML chapter type to the PBF chapter type. Comes with no guarantees, since documentation is basically non-existent
Reorganize and refactor various parts of the code. Switch to using Newtonsoft.Json via Nuget and update to latest version
v2.9.1
fix(init): Revamped the init sequence for detecting the MKVToolnix path and added a new button to manually trigger the auto detect sequence.
fix(logs): Fix various logs in FrmMain2 and gMKVHelper.
v2.9.0
fix(progress): Update the task bar progress bar value based on the total progress and not on the individual job progress
fix(code): Switch to unboxed types and minor optimizations.
fix(gForm): Add the form handle in the remaining message boxes in gForm
feat(dark): Implement Dark Mode in a new way with a bit of help from AI (thanks Jules!)
fix(files): Fix file structure
Create README.md
v2.8.1
fix(dark): Possible fix of a bug with ComboBox in dark mode (thanks vertigo220!)
v2.8.0
Add support for Dark Mode
v2.7.0
Add explicit support for AV1 video codec
Add support for appending input files via drag and drop (thanks vertigo220!)
Make the success dialog popup appear as top most form across desktop (thanks vertigo220!)
Fix the Abort buttons state before the success dialog pop up appears (thanks vertigo220!)
Add new placeholder for directory separator in Options (thanks Liquid, oniiz86!)
Add new Status Strip in Options form in order to make resize easier
Add min size in the Options form to avoid minimizing it to size 1,1
v2.6.4
Minor code optimizations
Add final Trim when generating the output filename (thanks tormento!)
v2.6.3
Fix calculating delays from mkvinfo. (Thanks kedautinh12!)
v2.6.2
Fix attachment filename for all cases. (Thanks mastrboy!)
Improve track selection when filter value is an empty string
Optimize algo to avoid unnecessary comparisons
v2.6.1
Replace invalid file characters with underscore character ('_') from output filename
v2.6.0
Add support for new element "Language IETF"
Minor code optimizations/modernization
v2.5.2
Fix issue in checking for an existing job when adding a new job
v2.5.1
Fix finding delays with newer mkvinfo versions
Optimize finding delays with mkvinfo by searching only for tracks that couldn't find delays with mkvmerge
v2.5.0
Ask the user to create the output directory if it doesn't exist
Various improvements on Form Controls
Added new "Options" form to support custom output filename patterns
Check if a file with the same filename already exists before extracting and add a counter to the output filename to avoid overwritting the original file
v2.4.2
Stop trying to find delays in matroska files that don't contain any video tracks
v2.4.1
Fix attachment extraction
v2.4.0
Enclose language in [] characters in the output filename for tracks, in order for MKVToolNix GUI to be able to derive it
Quote output filename in chapters, tags and cuesheet when using the new MKVToolNix cli
Fix the necessary input fields check when extracting tags and cuesheet
Refactor output filename calculation
v2.3.0
Add new setting for default output directory
Switch to "timestamps_v2" instead of "timecodes_v2" for MKVToolNix v17+
Add support for the new mkvextract syntax for MKVToolNix v17+
Add a new commandline argument --mkvtoolnix="..." to specify a manual path for MKVToolNix
v2.2.0
Change the output directory behavior
Add custom DPI scaling code and enable it on all forms
Add new manifest Property "dpiAwareness" for newest Windows Versions (Windows 10 v1607+)
Added new Audio Codec_ID A_EAC3 and A_MLP
Added some missing video and subtitle codec_id
Remove unnecessary separator in context menu
Increase the width of the percentage labels in Main form
Decrease the height of the buttons in Log Form
v2.1.0
Fix Linux issues
Fix adding files from command line
Add support for passing directories from command line
Make right click to change selection in the TreeView
v2.0.0
New form that supports batch extracting!
Fix bug when removing multiple jobs from Job Manager
Add the filename in the track progress report label in the Job Manager
Add new properties in the gMKVSegmentInfo class
v1.9.2:
Add more Log messages
Add more functionality to the Log Form
Fix some cases where settings were getting overriden during start up (thanks Bal65, RyFeR26!)
Switch to using --gui-mode for mkvextract versions v9.7.0 and newer, while keeping existing functionality for backwards compatibility
Hopefully solve all remaining issues with locale on Linux (thanks djcj!)
v1.9.1
Implement new method to read standard output character by character (fixes Linux parsing)
Replace hard-coded newline characters with Environment.NewLine
Improve parsing of mkvinfo output
Add exceptions to the log
Change version identification in Linux
Add more sanity checks
Fix copy-paste bugs in Settings
Add more log messages in Settings
Simplify version checking for Linux and OSX for mkvinfo and mkvmerge
Fix small cosmetic bug for Linux in main Form
Add LICENSE.md for NewtonSoft
Add log for detecting versions
When on Linux, check for mkvmerge in /usr/bin first
v1.9.0
Switch to .NET v4
Add new JSON parser for reading the JSON identification info from mkvmerge (Based on NewtonSoft JSON.NET, Newtonsoft.Json.dll)
Fix issues with Linux case sensitivity (hopefully!) (thanks djcj!)
Fix locale issues with Linux (hopefully!) (thanks djcj and Mosu!)
Make application dpi aware (thanks stax76!)
Fix initial size when there is no ini file (thanks bin_ch!)
Fix bug when in job mode and popup checkbox is unchecked and adding a job results in status label showing "Extraction completed!" (thanks bin_ch!)
Switch to using SaveFileDialog and OpenFileDialog instead of FolderBrowserDialog (thanks arestarh!)
Fix rare case where Track properties in mkvmerge verbose identification occupy more than one line
Change namespace from gMKVToolnix to gMKVToolNix
v1.8.0
Change minimum size in main form
Play Windows Asterisk sound when success popup does not show
Make mkvinfo's output parsing more robust
Add parsing of mkvmerge's new output data (thanks Mosu!!!)
Add as many fallback mechanisms as possible, in order to maintain compatibility with older versions
Clear input file textBox in main form, when MKVToolNix path is changed
Clear status and progress bar in main form, when an error has occured during extraction and no popup was selected
Add new setting for showing popup message in success in job manager
Fix some UI issues in Job Manager form
Add a workaround for buggy output from mkvmerge in older versions (v4.0)
Changed the main form's minimum size to 400x400
Added horizontal scroll bar to mkv track list
Add job counter in the text of the jobs groupbox
Make Jobs Grid Columns Autofill
Older changelog here (https://forum.doom9.org/showthread.php?p=2011596#post2011596)
Hope you enjoy this little utility and feedback is always appreciated! :)