Extrahieren Sie audio-und Untertitel von einem video mit ffmpeg
Ich habe mehrere audio-tracks und Untertitel zu extrahieren, in einem einzigen .mkv - Datei. Ich bin neu in ffmpeg
Befehle, das ist, was ich versucht habe (audio):
ffmpeg -i VIDEO.mkv -vn -acodec copy AUDIO.aac
Es nur Extrakt 1 audio. Was ich will ist sagen ffmpeg
zu extrahieren jede einzelne audio-Dateien und Untertitel-Dateien zu einem Ziel, und halten Sie die original-Namen der einzelnen Dateien und Erweiterungen. (Weil ich nicht weiß, welche Erweiterung hat die audio-Dateien sind, manchmal vielleicht .flac oder .aac).
Ich bin mir nicht sicher über die Lösungen, die ich gefunden hatte, online, denn es ist ziemlich kompliziert, und ich brauche Erklärungen, um zu wissen, wie es funktioniert, so dass ich manipulieren kann, wird der Befehl in die Zukunft. Übrigens, ich geplant, um den code auszuführen, der von Windows-Befehl CMD ein.
Danke.
InformationsquelleAutor WhatWhereWhen | 2015-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine option, noch in
ffmpeg
automatisch extrahieren Sie alle streams in einem geeigneten Behälter, aber es ist sicherlich möglich, manuell zu tun. Standard stream-Auswahl wählt nur ein stream pro stream geben, so müssen Sie manuell die Zuordnung der einzelnen stream.1. Holen Sie sich input info
Mit
ffmpeg
oderffprobe
können Sie die info in jedem einzelnen stream, und es ist ein Vielzahl von Formaten (xml, json, cvs, etc) zur Verfügung, um Ihre Bedürfnisse anzupassen.ffmpeg
BeispielDie Ausgabe (ich Schnitt einige extra Sachen, die stream-zahlen und Formatierung sind das, was wichtig ist):
ffprobe
BeispielDie resultierende Ausgabe:
2. Extrahieren der streams
Mit der info aus einem der oben genannten Befehle:
In diesem Fall das obige Beispiel ist das gleiche wie:
Ich bevorzuge das erste Beispiel, da die
input file index:stream specifier:stream index
ist mehr flexibel und effizient, es ist auch weniger anfällig für fehlerhafte Zuordnung.Siehe Dokumentation auf stream-Planer und die
-map
- option, um das Verständnis der syntax. Zusätzliche info in der Antwort zu FFmpeg muxen von video und audio (aus einem anderen video) - mapping-Problem.Diese Beispiele stream kopieren (re-mux) also kein re-encoding auftreten.
-map 0:a:0
? Können wir haben mehrere "Indizes" (z.B.0:a:0
,1:a:0
) ? Ich dachte der suffix(0
) ist eigentlich der stream index. Gibt es eine Dokumentation für diese "super" - Indizes? Sorry für ein bisschen off-topic.Diese Werte stellen
input id:stream specifier:stream id
. Zum Beispiel2:a:5
wäre der 6. einudio-Streaming aus dem 3. Eingang (ffmpeg
beginnt die Zählung bei 0). Es ist flexibler als einfach erklären so etwas wie2:5
weil die stream-index - Wert darf nicht immer den gewünschten stream. Es ermöglicht Ihnen, mehr faul, indem Sie nur wählen, die so etwas wie das 8. video-stream von der 2. Eingang:1:v:8
. Siehe-map
docs und Antwort für mehr info.vielen Dank für die Beantwortung! Macht Sinn, ich habe gelesen, die Karte docs, aber ich weiß nicht, warum ich verpaßt.
Vorteil ist, dass Sie nicht unbedingt im Voraus wissen, die genaue zahlen für einen bestimmten stream.
Es ist erwähnenswert, dass vor version 57.82.100 von libavformat war es nicht möglich, zu extrahieren Bluray-Untertitel (hdmv_pgs_subtitle)*.sup-format verwenden Sie diesen Befehl, wenn Sie also müssen Sie das tun, stellen Sie sicher, dass Sie mit der aktuellsten version von ffmpeg ausführbare Datei.
InformationsquelleAutor llogan
Würden Sie zuerst eine Liste mit allen audio-streams:
und dann auf der Basis der Ausgabe, die Sie kompilieren können, der Befehl zum extrahieren der audio-Spuren einzeln.
Mit einigen shell-Skript können Sie dann möglicherweise automatisieren Sie diese in eine Skript-Datei, so dass Sie es tun können generisch für jede mkv-Datei.
Untertitel sind so ziemlich das gleiche. Der Untertitel wird gedruckt in der info und dann kannst du Sie extrahieren, ähnlich:
0.2 ist die Kennung, die Sie zum Lesen der info.
InformationsquelleAutor seba.wagner
Folgende Skript extrahiert alle audio-streams von Dateien im aktuellen Verzeichnis
ffmpeg
ist nicht dazu gedacht, für eine Maschine analysieren. Das ist es, wasffprobe
ist.Sicherlich könnte ich entwickeln eine bessere Lösung, wenn ich nur ein besseres Verständnis von ffmpeg. So, es ist zu früh Lösung, die einfach funktioniert.
InformationsquelleAutor ivan2kh