What is the difference between the "default track" flag and the "forced" flags? And what about the settings "default", "yes" and "no" in the GUI?
There are two different flags called "default track" and "forced". What's up with them?
And especially — what's up with the values that I can set those flags to? What is a player supposed to do in each case?
There are several flags in Matroska with confusing or unclear names ("default", "forced", "enabled"). In addition, the GUI uses similar terms ("default") in drop-down boxes for other controls, not only these flags. This entry tries to explain what those flags mean to the Matroska, for playback, and also how the GUI and therefore mkvmerge decide how to set them depending on the values the controls are set to.
Leaving a flag (no matter which flag) on the "default" settings means the decision whether or not it should be set is up to mkvmerge. mkvmerge usually takes the information provided by the source container into account. For some flag types (especially the "default track" flag) there are other considerations as well.
Setting a flag to "no" will force mkvmerge not to set that flag, no matter what those other considerations would have done and no matter what the source container provided for that flag.
For the "default track" flag: The special consideration is that mkvmerge will automatically set this flag to "yes" for exactly one track of each track type (audio, video, subtitles). You can only prevent this by explicitly setting the "default track" flag to "no" manually for all tracks of a kind (e.g. for all subtitle tracks).
The "default track" flag tells the player that this track should be played unless the user overrides that decision somehow. You usually mark the original audio track with "default track" and leave it off for the rest of them, e.g. for the director's commentary or some translations you don't want [(e.g. The Lord of the Rings, mark "English" as "default track" but not "German" and "Director's comments (English)].
As a lot of users don't want subtitles shown by default, they tell mkvmerge not to set the "default track" flag for any subtitle track.
Now on to the "forced display" flag, in short "forced". If this is set to "on", this track must be played/shown no matter what the user selected for his preferences or what the player would normally chose to show/play. This is used seldom, e.g. only for a subtitle track that only contains the English translation whenever Legolas is talking Elbish.
"Forced" has nothing to do with "default track". If "forced" is set, the player must play that track no matter what "default track" is set to. In fact, normally a track that has "forced" set does not have "default track" set, though it is neither invalid nor undefined behavior.
Details on how mkvmerge decides the flags' values
Here's how mkvmerge's algorithm works for determining the status of the default track flag:
Is "no" set on the command line? Set flag to "no".
Is "yes" set on the command line? If so and if no previous track of this kind has been set to "yes" from the command line, set flag to "yes". Otherwise continue in the evaluation process.
Does source container provide "no"? Set flag to "no".
Does source container provide "yes"? If so and if no previous track of this kind has been set to "yes" either from the command line or from its source container, set flag to "yes". Otherwise continue in the evaluation process.
Has the flag NOT been set to "yes" for any other track of this kind encountered so far? Set flag to "yes".
Set flag to "no".
The algorithm for the forced flag is a bit simpler and looks roughly like this:
Is the flag set on the command line (no matter its value)? Set flag to the same value.
Does source container provide that flag (no matter its value)? Set flag to the same value.
Set flag to "no".