Mux mkv and dts file, change default audio stream and language

Video Production Asked on October 28, 2021

I want to mux (combine) two files into one mkv file. The first one is an mkv file that contains a video and an audio stream in German. The second one is an English audio stream in dts format.I want one mkv file that contains both audio channels, the English one being the first and default audio stream.

Here’s the ffmpeg command I’m using so far:

ffmpeg -i movie.mkv -i audio.dts -map 0:v:0 -map 1:a:0
-map 0:a:0 -c copy movie_combined.mkv

This produces acceptable results. I get an mkv file that has two audio channels, the first one English, the second one German. However, there’s two problems. The second (German) audio stream is still the default stream (VLC media player uses it by default and according to MediaInfo, there’s a default flag on the stream). Also, the English stream doesn’t show up as English, according to MediaInfo there’s no language information for that stream.

How do I flag the English audio stream as the default one? And how do I add the language information for that stream (so that, for example, it shows up as English in the audio track selection of VLC media player)?

2 Answers

Based on this answer on stackoverflow, it seems that changing the disposition is now possible with ffmpeg (see also the official documentation).

I think that the command that you would need, so that the final file had English as the default audio stream is:

ffmpeg -i movie.mkv -i audio.dts -map 0:v:0 -map 1:a:0 -map 0:a:0 -c copy -disposition:a:0 default -disposition:a:1 0 movie_combined.mkv

The addition is -disposition:a:0 default -disposition:a:1 0. The numbering of the streams is for the output. -disposition:a:1 0 is needed to remove the disposition from the second stream.

(Instead of -disposition:a:1 0 you could also, in principle, use the non-documented -disposition:a:1 none, which has the same effect.)

To add metadata/language information, see the other answer.

Answered by aplaice on October 28, 2021

For language, add -metadata:s:a:0 language=eng.

FFmpeg doesn't set or alter track dispositions in MKV. Use mkvpropedit.

To set the default flag for the first audio track and remove it from the second one, use this command:

mkvpropedit movie.mkv --edit track:a1 --set flag-default=1 --edit track:a2 --set flag-default=0

As mentioned in the docs, the app "does not set the 'default track flag' of other tracks to '0' if it is set to '1' for a different track automatically." This is salient because FFmpeg sets default flags for all tracks to 1 unless the input has it different.

Answered by Gyan on October 28, 2021

Add your own answers!

Related Questions

How to use FFmpeg Command for Reverse Video?

1  Asked on November 11, 2021 by ravi-vaghela


Adobe Premiere Pro Green Lines Problem

1  Asked on October 28, 2021 by afel


HLS.js player dropping frames at discontinuities in HLS stream

1  Asked on October 28, 2021 by james-mc


How to track and zoom in AE

1  Asked on October 28, 2021 by egorst


Does HEVC Support 16-Bit RGB Color Format?

2  Asked on October 28, 2021 by user30535


Ask a Question

Get help from others!

© 2022 All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP