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?


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.

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.