[FFmpeg-devel] [PATCH 25/25] avformat/matroskaenc: Redo handling of FlagDefault

Carl Eugen Hoyos ceffmpeg at gmail.com
Tue Jan 21 01:48:18 EET 2020


Am Di., 21. Jan. 2020 um 00:43 Uhr schrieb Andreas Rheinhardt
<andreas.rheinhardt at gmail.com>:
>
> On Tue, Jan 21, 2020 at 12:11 AM Carl Eugen Hoyos <ceffmpeg at gmail.com>
> wrote:
>
> > Am Sa., 18. Jan. 2020 um 09:46 Uhr schrieb Andreas Rheinhardt
> > <andreas.rheinhardt at gmail.com>:
> > >
> > > Up until now, the Matroska muxer would mark a track as default if it had
> > > the disposition AV_DISPOSITION_DEFAULT or if there was no track with
> > > AV_DISPOSITION_DEFAULT set; in the latter case even more than one track
> > > of a kind (audio, video, subtitles) was marked as default which is not
> > > sensible.
> >
> > It would not help only to change this strange behaviour?
> >
> > So you mean: If no stream with disposition default exist at all, then only
> mark the first track of each kind as default; otherwise pass the
> disposition through unchanged? That would be possible, of course; and it
> would be better than the current behaviour. But it would not allow to
> create files with no track marked as default at all (requested in #8173)
> and if one muxed several tracks from different Matroska files, each of
> which is marked as default in its source, one would still have multiple
> tracks of the same kind marked as default in the output. This should not be
> the default behaviour.

(The behaviour could be to only mark one stream as default, I always
considered that as the only sane approach and never understood what
the intention was with the code we have now...)

> > > This commit changes the logic used to mark tracks as default. There are
> > > now three modes for this:
> > > a) In the "infer" mode the first track of every type (audio, video,
> > > subtitles) with default disposition set will be marked as default; if
> > > there is no such track (for a given type), then the first track of this
> > > type (if existing) will be marked as default. This behaviour is inspired
> > > by mkvmerge. It ensures that the default flags will be set in a sensible
> > > way even if the input comes from containers that lack the concept of
> > > default flags. This mode is the default mode.
> > > b) The "infer_no_subs" mode is similar to the "infer" mode; the
> > > difference is that if no subtitle track with default disposition exists,
> > > no subtitle track will be marked as default at all.
> > > c) The "passthrough" mode: Here the track will be marked as default if
> > > and only the corresponding input stream had disposition default.
> > >
> > > This fixes ticket #8173 (the passthrough mode is ideal for this) as
> > > well as ticket #8416 (the "infer_no_subs" mode leads to the desired
> > > output).
> >
> > Doesn't this duplicate the cli option for disposition?
> > (Just asking, I know this is a can of worms)
> >
> > I am wondering if a new option is necessary and useful.
> >
> > Without a new option, one could not distinguish the case where the user
> explicitly wants no dispositions at all and the case where one remuxes from
> a source container that does not have the concept of default streams.
> Furthermore, having an option allows to distinguish the infer and
> "infer_no_subs" cases (the latter makes (some) players not show the
> subtitles unless one explicitly enables them which is what (some) users
> (including myself and apparently the guy behind #8416) want; I am actually
> unsure whether infer_no_subs would make a better default value).

Thank you for the explanation, I do not immediately see a better solution.

Carl Eugen


More information about the ffmpeg-devel mailing list