Wie kann ich mit ffmpeg Untertitel aus Videos extrahieren?

34

Ich versuche, Untertitel aus dem Video als .srtDatei zu extrahieren. Ich habe den folgenden Befehl verwendet:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

Aber ich habe eine Fehlermeldung als nicht erkannte Option erhalten. codec:s:0:1 Können Sie mir also den genauen Befehl und das Extrahieren eines Untertitels als .srtDatei in einem Video mitteilen ?

vijay
quelle
umair: sagst du mir in der Eingabeaufforderung
vijay
Ich habe das gleiche Problem. Hast du das irgendwann zum Laufen gebracht?
Maxime Labelle

Antworten:

51

Einfach:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / Pfad der Eingabedatei.
  • -map : Bestimmen Sie einen oder mehrere Eingabestreams als Quelle für die Ausgabedatei.
  • s: 0 : Wählen Sie den Untertitel-Stream aus.
jm3
quelle
2
Das hat bei mir mit einer MP4-Datei mit eingebetteten Untertiteln geklappt.
Rubens Mariuzzo
11
Dies würde die erste Untertitelspur herunterladen. Wenn mehrere vorhanden sind, 0:s:1laden Sie mit den zweiten, 0:s:2den dritten und so weiter herunter.
Fabien Snauwaert
5
@ jm3 Würdest du zufällig eine Möglichkeit kennen, alle Untertitelströme automatisch aus einer Datei zu extrahieren und sie nach ihrer Sprachkennung zu benennen (z. B. eng, fre, dut usw.)?
Fr.
Warum ist es so langsam, wenn es aus einem großen MKV-Container (~ 4 gb) extrahiert wird?
Benutzer25
Um mehrere Untertitel gleichzeitig zu extrahieren, müssen Sie die -mapParameter für jede Datei duplizieren . Auch enthalten , -c copyso dass es nur die Datei extrahiert , ohne zu versuchen , sie zu verarbeiten: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. Auf jeden Fall wird es lange dauern, da ffmpeg die gesamte Videodatei lesen muss, um alle Teile der Untertitelströme zu finden.
Radek Pech
8

-codec:s:0:1ist falsch. Wenn Sie -codec:s:0dann ffmpeg verwenden, wird der angegebene Codec für den ersten Untertitel-Stream verwendet, der an die Ausgabe übergeben wird. Wenn Sie dann ffmpeg verwenden, -codec:s:1wird er für den zweiten Untertitel-Stream verwendet, usw.

Sie können auch verwenden -codec:s, um alle Ausgabe-Untertitelströme oder -codec:2den dritten Ausgabestream auszuwählen, unabhängig davon, um welchen Stream es sich handelt.

Sie sind wahrscheinlich verwirrt, weil sich die -mapOption anders verhält. Dort müssen Sie auswählen, von welchem ​​Eingang der ausgewählte Stream stammt. ( -map 0:s:0würde also den ersten Untertitelstrom von der ersten Eingabe nehmen und ihn der Ausgabe zuführen). Hier können Sie -mapjedoch auswählen, welche Streams Sie von den Eingaben abrufen möchten. Während die meisten anderen Optionen, die die Stream-Zuordnung verwenden, für die Streams verwendet werden, nachdem sie ausgewählt wurden (sodass nicht angegeben werden muss, aus welcher Eingabedatei sie stammen), wenn sie an die Ausgabe übergeben werden.

Übelsuppe
quelle
evilsoup: ich würde den folgenden Befehl verwenden E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ routine.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, es scheint ein Fehler i Konnte kein passendes Ausgabeformat für 'srt' finden, können Sie mir den Befehl zum Extrahieren eines Untertitels im Video
mitteilen
2
Versuchen Sie: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg sollte erkennen, dass Sie srt Untertitel aus dem Namen der Ausgabedatei möchten)
Evilsoup
Ich habe benutzt: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtdas sollte alle Untertitel in die srt-Datei kopieren.
Stuart
@Stuart extrahiert nicht alle Untertitel
user25
1
@evilsoup -codec:sist gleich, -codec:s:0so dass nicht alle Untertitel ausgewählt werden ... es wird die erste
Textspur