Jak wyodrębnić napisy z wideo za pomocą ffmpeg?

34

Próbuję wyodrębnić napisy z wideo jako .srtplik, użyłem następującego polecenia:

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

Ale dostałem błąd jako nierozpoznana opcja. codec:s:0:1 Czy możesz mi powiedzieć dokładne polecenie i jak wyodrębnić napisy jako .srtplik w filmie?

Vijay
źródło
umair: powinieneś mi powiedzieć w wierszu polecenia
vijay 16.04.13
Mam ten sam problem. Czy udało ci się to w końcu zadziałać?
Maxime Labelle,

Odpowiedzi:

51

Prosty:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL pliku wejściowego / ścieżka.
  • -mapa : wyznacz jeden lub więcej strumieni wejściowych jako źródło pliku wyjściowego.
  • s: 0 : Wybierz strumień napisów.
jm3
źródło
2
Działa to dla mnie z plikiem MP4 z osadzonymi napisami.
Rubens Mariuzzo,
11
Spowoduje to pobranie pierwszego utworu z napisami. Jeśli jest ich kilka, użyj, 0:s:1aby pobrać drugi, 0:s:2aby pobrać trzeci itd.
Fabien Snauwaert
5
@ jm3 Czy znasz jakiś sposób, aby automatycznie wyodrębnić wszystkie strumienie napisów z pliku, nazywając je po ich identyfikatorze języka (np. eng, fre, dut itp.)?
ks.
dlaczego jest tak wolny podczas wyciągania z dużego pojemnika MKV (~ 4 gb)?
użytkownik25
Aby wyodrębnić więcej napisów naraz, należy skopiować -mapparametry dla każdego pliku. Także -c copydlatego, że po prostu wydobywa plik nie próbując go przetworzyć: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. W każdym razie zajmie to dużo czasu, ponieważ ffmpeg musi odczytać cały plik wideo, aby znaleźć wszystkie części strumieni napisów.
Radek Pech,
8

-codec:s:0:1jest nieprawidłowe. Jeśli używasz, -codec:s:0ffmpeg użyje podanego kodeka dla pierwszego strumienia napisów przekazywanego do wyjścia, jeśli -codec:s:1go użyjesz, użyje go dla drugiego strumienia napisów itp.

Możesz także użyć -codec:sdo zaznaczenia wszystkich wyjściowych strumieni napisów lub -codec:2do wybrania trzeciego strumienia wyjściowego, niezależnie od tego, co to jest.

Prawdopodobnie jesteś zdezorientowany, ponieważ -mapopcja zachowuje się w inny sposób - tam musisz wybrać, z którego źródła pochodzi wybrany strumień. (więc -map 0:s:0wziąłby pierwszy strumień napisów z pierwszego wejścia i przekazał go do wyjścia). Jednak -mapsłuży do wybierania strumieni, które chcesz pobierać z danych wejściowych; podczas gdy większość innych opcji, które używają mapowania strumienia, są przeznaczone do wykorzystania w strumieniach po ich wybraniu (więc nie ma potrzeby określania, z którego pliku wejściowego pochodzą), ponieważ są one przekazywane do wyjścia.

zła
źródło
evilsoup: użyłbym następującego polecenia E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ routine.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, wygląda na to, że błąd i nie można znaleźć odpowiedniego formatu wyjściowego dla 'srt', czy możesz mi powiedzieć polecenie wyodrębnienia napisów z wideo ...
vijay 16.04.2013
2
Spróbuj: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg powinien wykryć, że chcesz napisy srt z nazwy pliku wyjściowego)
evilsoup
Użyłem: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtto powinno skopiować wszystkie napisy do pliku srt.
Stuart,
@Stuart nie wyodrębnia wszystkich napisów
użytkownik25
1
@evilsoup -codec:sjest równe, -codec:s:0więc nie zaznacza wszystkich napisów ... wyodrębni pierwszy utwór tekstowy
25