Wyciągnij napisy z wideo
Pierwsze uruchomienie pobiera silnik napisów — około 31 MB, serwowany przez tę stronę i potem zapamiętany przez przeglądarkę. Samo wideo nigdy nie opuszcza tej karty.
Ta strona bierze plik wideo i zwraca ścieżki napisów, które już w nim są: jeden plik na ścieżkę, nazwany od języka ścieżki. Plik Matroska z angielską ścieżką SDH, ścieżką chińską i obrazkową ścieżką PGS wychodzi jako trzy pliki: .srt, drugi .srt i .sup. Kontener jest demuksowany, a nie kodowany ponownie, więc ścieżka tekstowa jest kopiowana jako bajty, które już były w pliku — nie przepisywana z ekranu i nie ustawiana od nowa w czasie.
Praca odbywa się w karcie. Wideo czyta kompilacja ffmpeg zbudowana do WebAssembly, serwowana przez tę witrynę, a jedynym żądaniem sieciowym jest ta kompilacja: około 31 MB przy pierwszym użyciu strony, potem buforowana przez przeglądarkę. Sam film nigdy nie jest nigdzie wysyłany — to ta sama zasada, której trzyma się każda inna strona tutaj, i powód, dla którego ta nadaje się do materiału, który nie może opuścić komputera.
Napisów wypalonych w obrazie nie da się wyciągnąć i żadne narzędzie tego nie potrafi, bo nie ma ścieżki do odczytania — te słowa są pikselami. Jeśli plik nie ma żadnej ścieżki napisów, strona mówi to wprost, zamiast tworzyć pusty plik, i dotyczy to także przypadku wypalenia: film z widocznymi napisami i bez ścieżki napisów zostanie zgłoszony jako niemający czego wyciągnąć.
Strona wymienia każdą znalezioną ścieżkę napisów, zanim cokolwiek zapisze: indeks, kodek, język, tytuł oraz informację, czy ścieżka jest oznaczona jako domyślna lub wymuszona. Ścieżki, które już żyją we własnym kontenerze, zachowują własny format — ASS zostaje ASS, WebVTT zostaje WebVTT — bo zamiana ich tutaj na SRT po cichu zgubiłaby stylowanie, a gubienie stylowania bez pytania to jedyna rzecz, której ta witryna nie robi. Ścieżka, której kodek nie ma własnego formatu pliku (na przykład ścieżka mov_text w MP4), jest kodowana ponownie do SRT, a karta wyniku mówi o tym, zamiast pozwolić, żeby uchodziła za kopię.
Ścieżki obrazkowe wychodzą jako obrazy, nie jako tekst: strumień PGS staje się plikiem .sup, a strumień DVD plikiem .sub. To celowe — obraz jest tym, co było w pliku, a zgadywanie jego tekstu to osobne zadanie z własną stroną i własnym pytaniem o język. Jeśli potrzebujesz tekstu, zanieś .sup na stronę PGS.
Częste pytania
Jakie kontenery wideo przyjmuje ekstraktor napisów?
MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG i OGV. Ta lista to w rzeczywistości lista demukserów dostępnych w dołączonej kompilacji ffmpeg, a nie lista kodeków wideo: niezależnie od tego, co jest w kontenerze, ścieżki napisów są tym samym rodzajem strumienia. Plik z nietypowym rozszerzeniem, ale zwykłym ciałem Matroski, zwykle nadal działa, bo demukser czyta nagłówek, a nie nazwę; plik fragmentaryczny albo niedokończony często nie działa, bo nie ma indeksu do przejścia.
Czy film opuszcza mój komputer, gdy ekstraktor napisów go czyta?
Nie. Jedynym pobieraniem jest sam silnik ffmpeg, około 31 MB, serwowany z tej witryny i buforowany przez przeglądarkę po pierwszym użyciu. Twój film jest montowany w wirtualnym systemie plików silnika w karcie i stamtąd czytany; nigdy nie trafia do treści żądania. Możesz to sprawdzić w panelu Sieć: podczas przetwarzania pliku nie ma żądania, które by go niosło. Ta właściwość jest powodem, dla którego strona w ogóle istnieje — większość ekstraktorów najpierw wysyła plik, a materiał objęty postępowaniem prawnym lub medycznym nie może być wysyłany.
Dlaczego ekstraktor napisów dał plik .sup zamiast .srt?
Bo ta ścieżka jest zapisana jako obrazy, a nie jako tekst. Strumienie PGS (kodek hdmv_pgs_subtitle) to sekwencja obrazów, a uczciwym wyciągnięciem strumienia obrazów jest strumień obrazów: .sup, dokładnie taki, jakiego oczekują odtwarzacze i edytory napisów. Zamiana na tekst oznacza rozpoznanie liter na każdym obrazie, co jest osobną stroną z pytaniem o język i krokiem korekty. Ekstraktor nigdy nie wymyśla tekstu, którego nie odczytał.
Co ekstraktor napisów robi ze ścieżką, której format nie ma własnego pliku?
Koduje tę jedną ścieżkę ponownie do SRT i oznacza wynik jako przekodowany. Typowy przypadek to mov_text, kodek napisów żyjący w MP4: nie ma własnego formatu pliku, więc skopiowanie strumienia dałoby bajty, których nic nie otworzy. Ponowne kodowanie nie jest bezstratne — stylowanie i pozycjonowanie, które mov_text może nieść, nie przeżywają — dlatego karta wyniku wymienia to jako stratę, zamiast przedstawiać plik jako nietkniętą kopię zawartości kontenera.
Jak ekstraktor napisów nazywa pliki wynikowe, gdy ścieżek jest kilka?
Od nazwy filmu i kodu języka ścieżki: plik documentary.mkv z angielską ścieżką daje documentary.eng.srt. Gdy dwie ścieżki mają ten sam język — zwykła angielska i angielska SDH, co jest częste — druga staje się documentary.eng-2.srt, zamiast nadpisywać pierwszą. Ścieżka bez etykiety języka dostaje numer swojego strumienia, więc nadal da się ją odróżnić. Jeśli plików jest więcej niż jeden, strona oferuje je jako jeden zip, bo przeglądarki blokują rozpoczęcie kilku pobrań naraz z jednej strony.
Dlaczego pierwsze uruchomienie ekstraktora napisów trwa dłużej niż drugie?
Pierwsze uruchomienie pobiera silnik ffmpeg, około 31 MB. Pasek postępu obejmuje to pobieranie, a potem samo wyciąganie. Przeglądarka buforuje silnik, więc kolejne uruchomienia na tej samej stronie startują niemal natychmiast; to samo dotyczy przeładowania, jeśli pamięć podręczna nie została wyczyszczona. Silnik jest serwowany w czterech częściach, bo platforma hostingowa odrzuca pojedyncze pliki powyżej 25 MiB, a strona składa je w pamięci przed startem — to składanie jest częścią tego samego pierwszego czekania.
Czy mogę anulować działanie ekstraktora napisów, które trwa zbyt długo?
Tak. Przycisk anulowania zatrzymuje trwające wyciąganie i kończy wątek, który je wykonuje, więc duży plik nie zajmuje rdzenia po tym, jak zdecydowałeś, że nie chcesz czekać. Anulowanie nie jest błędem: element wraca do stanu, z którego można go ponowić, a następne uruchomienie startuje z nowym wątkiem. Nic częściowego nie jest oferowane do pobrania, bo w połowie zapisany plik napisów, który wygląda na kompletny, jest gorszy niż brak pliku.