Recht häufig findet man in der Mediathek der Öffentlich-Rechtlichen einen Film oder eine Serie einmal auf Deutsch und einmal in der Originalfassung. Da mich manchmal beides reizt, ich aber keine zwei Videodateien aufheben möchte habe ich schon länger vor die Tonspuren in nur einer Datei abzulegen. Jetzt habe ich mir die dafür nötigen Befehle endlich mal zusammengestellt, hier meine Notizen dazu.
Das ganze geht, wenn beide Videodateien heruntergeladen sind, mit einem einzigen Befehl:
ffmpeg -i 1984.mp4 -i 1984_original.m4a \
-map 0 -map 1:a \
-c copy \
-metadata:s:a:0 language=deu \
-metadata:s:a:1 language=eng \
1984_dual_lang.mp4
ffmpeg bekommt hier die Dateien 1984.mp4 und 1984_original.m4a als Input. Das Audiofile wird auf die Tonspur 1 gemappt, 0 ist die Tonspur die schon im Video drin ist. Video und Audio wird mit -c copy 1:1 kopiert um eine Transkodierung zu ersparen. Über die -metadata-Argumente wird für die Tonspuren die jeweilige Sprache gesetzt. Am Ende kommt der Dateiname für die Ausgabe.
Danach habe ich eine Videodatei mit getrennten Tonspuren für beide Sprachen, die ich beim Abspielen auswählen kann.

Quellen
- https://stackoverflow.com/questions/11779490/how-to-add-a-new-audio-not-mixing-into-a-video-using-ffmpeg/11783474#11783474
- https://trac.ffmpeg.org/wiki/Map#Videoandaudiofromdifferentfiles
- https://unix.stackexchange.com/questions/798452/how-to-merge-audio-and-video-file-into-one/798454#798454
- https://stackoverflow.com/questions/44351606/ffmpeg-set-the-language-of-an-audio-stream