2016-12-02 3 views
1

Ich habe viele Dateien mit mehreren Audio-und Untertitelsprachen, aber die Track-Nummern sind nicht konsistent (der englische Audio-Stream ist nicht immer der erste), so mit einem Befehl wie:Mapping Streams nach Sprache in FFmpeg

ffmpeg -i "input.mkv" -map 0 -map -0:a:1 -c:v copy -c:a copy "output.mkv" 

liefert nicht die erwarteten Ergebnisse. Nach der Suche um entdeckte ich, war es möglich, Ströme mit diesem Befehl basierend auf Sprache zur Karte:

ffmpeg -i "input.mkv" -map 0 -map -0:m:language:eng -c:v copy -c:a copy "output.mkv" 

jedoch -map -0:m:language:eng alle Titel mit der englischen Sprache Flagge entfernen. Um die Untertitelspuren beizubehalten, können Sie -map 0:s verwenden. Dies ist eine gute Lösung. Ich möchte jedoch wissen, ob es möglich ist, nur Audio-Streams basierend auf der Sprache zuzuordnen.

Antwort

0

Aktualisiert Was Suffix wie ich kann sagen, dass dies der beste Weg ist, Englisch Audio zu entfernen, während alle anderen Ströme Halte ohne Verwendung von Stream-IDs, die inkonsistenter als Sprach-Flags sind. Im Allgemeinen verwenden Leute korrekte Sprachflags, aber Audiosprachen behalten weniger die gleiche ID.

ffmpeg -i "in.mkv" -map a -map -m:language:eng -map v -map s -map d? -map t -c:v copy -c:a copy "out.mkv"

Der Befehl wird jede Audio-Stream Karte dann mit der English Sprache Flagge Audio entfernen. Es wird dann alle Video-, Untertitel- und Anhangstreams abbilden. Sie können -disposition:a:0 default hinzufügen, um dem ersten Audiostream bei Bedarf das Flag [default] zu geben. Hinweis: Verwenden Sie diese Funktion nur, wenn Sie Audio entfernen, das bereits über das Standard-Flag verfügt. Ändern Sie -disposition:a:0 in -disposition:a:1 und so weiter, wenn Sie eine andere Audiospur als Standard festlegen möchten.

+0

Dieser Befehl kopiert den Stream des Videostreams * und nicht-englischen Untertitel. * Es sei denn, das Video ist als Englisch markiert, was es normalerweise nicht ist. Meine Abhilfe vermeidet dies. – Mulvya

+0

Hmm Ihre Lösung wird keine Anhänge zuordnen, aber wie machen Sie das, ohne -map 0 zu verwenden oder die ID jedes einzelnen Anhangstreams anzugeben? Das erste Workaround, das Sie gepostet haben, bestand darin, eine temporäre Datei zu erstellen, wodurch der Prozess länger dauerte. Auch wenn du '-map 0: v' nicht verwendest, nachdem die englischen Streams entfernt wurden, wird das Video nicht entfernt, wenn es die englische Flagge hat? ? – ffmpeg123

+0

Geänderte Problemumgehung zum Beibehalten von Daten- und Anhangstreams. Ihr ursprünglicher Zweck, IIRC, bestand darin, nur englische Audio-Streams zu entfernen. Mein Workaround macht das und lässt alles andere durch. – Mulvya

2

Bearbeiten: Ignoriere erste Antwort. Derzeit nicht möglich. Verwenden Sie die oben genannte Problemumgehung.

ffmpeg -i "in.mkv" -map 0:a -map -0:m:language:eng -map 0:v -map 0:s -map 0:d? -map 0:t? -c copy "out.mkv" 

Dies erreicht das gewünschte Ergebnis, weil ffmpeg die Kartenoptionen in dieser Reihenfolge implementiert.


Sie müssen die Metadaten-Selektoren auf den Stream Typselektor dh

ffmpeg.exe -i "%f" -map 0 -map -0:a:m:language:eng -c:v copy -c:a copy "../%f" 
+0

Dies schien zunächst zu funktionieren, aber ich habe einige Probleme. Mein Video hat zwei Audiospuren # 0 Englisch # 1 Japanisch, das Audio ist ogg vorbis und sie müssen Sprachflags korrigieren. Wenn Sie den obigen Befehl ausführen, wird nur eine Datei mit dem englischen Audio ausgegeben. Selbst wenn ich versuche, -0 zu ändern: a: m: language: eng zu -0: a: m: language: jpn Ich bekomme die gleichen Ergebnisse. Es scheint, als würde nur der zweite Track entfernt, egal was ich mache. – ffmpeg123

+0

Das funktioniert, ist aber nicht sehr einfach: ffmpeg -i "input, mkv" -map 0: v -map 0: s -map 0: a: m: sprache: jpn -c: v copy -c: eine kopie " output.mkv "Ich verstehe nicht warum" -map 0 -map-0: a: m: language: deu "funktioniert nicht wenn" -map 0 -map-0: m: language: eng "tut. – ffmpeg123

+0

Natürlich funktioniert weder meine Antwort noch Ihre Problemumgehung.Ihre Problemumgehung funktioniert, weil ffmpeg "-map 0: a: m: language: jpn" als "-map 0: a: 1" auswertet, was in Ihrem Fall zufällig das jpn-Audio ist. Derzeit ist dies nicht direkt möglich, aber ich habe meine Antwort durch eine Problemumgehung ersetzt. – Mulvya

0

-0: m: language: eng wird englische Audiospuren entfernen und alle anderen behalten.

um nur englische Audiospuren zu behalten und alle anderen zu entfernen, entfernen Sie den Bindestrich zu Beginn: 0: m: language: eng der Bindestrich am Anfang erstellt eine negative Zuordnung, die ffmpeg "entfernt dies und nur Dinge, die passen Sie dieses "

ich weiß, das ist 8 Monate später, aber ich dachte, es wäre hilfreich für diejenigen, die hier von Google-Suchen enden, wie ich es getan habe.

Verwandte Themen