Udtræk undertekster fra video
Den første kørsel downloader undertekstmotoren – cirka 31 MB, leveret af dette websted og cachet af browseren bagefter. Selve videoen forlader aldrig denne fane.
Denne side tager en videofil og giver dig de undertekstspor tilbage, der allerede ligger i den, én fil pr. spor, navngivet efter sporets sprog. En Matroska-fil med et engelsk SDH-spor, et kinesisk spor og et PGS-billedspor kommer ud som tre filer: en .srt, endnu en .srt og en .sup. Containeren demuxes frem for at blive omkodet, så et tekstspor kopieres ud som de bytes, der allerede lå i filen – ikke skrevet af fra en skærm, ikke gen-timet.
Arbejdet foregår i fanen. Videoen læses af et build af ffmpeg kompileret til WebAssembly, som dette sted selv leverer, og den eneste netværksforespørgsel er efter den motor: omkring 31 MB første gang, du bruger siden, cachet af browseren bagefter. Selve videoen sendes aldrig nogen steder, hvilket er den samme regel, alle andre sider her følger, og grunden til, at denne kan bruges på materiale, der ikke må forlade maskinen.
Undertekster, der er brændt ind i billedet, kan ikke udtrækkes, og intet værktøj kan gøre det, fordi der ikke er noget spor at læse – de ord er pixels. Har filen slet ingen undertekststrøm, siger siden det frem for at producere en tom fil, og det dækker også det indbrændte tilfælde: en video med synlige undertekster og uden et undertekstspor rapporteres som havende intet at udtrække.
Siden lister hver undertekststrøm, den finder, før den skriver noget: indeks, codec, sprog, titel og om strømmen er markeret som standard eller forced. Spor, der allerede ligger i deres egen container, beholder deres eget format – ASS forbliver ASS, WebVTT forbliver WebVTT – fordi en konvertering til SRT her lydløst ville droppe stil, og at droppe stil uden at blive bedt om det er det ene, dette sted ikke gør. Et spor, hvis codec ikke har nogen selvstændig container (mov_text-sporet inde i en MP4 for eksempel), omkodes til SRT, og resultatkortet siger det frem for at lade det passere som en kopi.
Billedspor kommer ud som billeder, ikke som tekst: en PGS-strøm bliver en .sup, og et DVD-spor bliver en .sub. Det er med vilje – billedet er det, der var i filen, og at gætte på dets tekst er en separat opgave med sin egen side og sit eget sprogspørgsmål. Tag .sup-filen med til PGS-siden, hvis du har brug for tekst.
Ofte stillede spørgsmål
Hvilke videocontainere kan jeg droppe ind?
MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG og OGV. Listen er egentlig en liste af demuxere, som det medfølgende ffmpeg-build har, ikke en liste af videocodecs: uanset hvad der er inde i containeren, er undertekstsporene den samme slags strøm. En fil med en usædvanlig filtypenavn men en normal Matroska-krop virker som regel stadig, fordi demuxeren læser headeren frem for navnet; en fragmenteret eller ufuldstændig download gør ofte ikke, fordi der ikke er noget indeks at gå efter.
Forlader videoen min computer, mens den læses?
Nej. Den eneste download er ffmpeg-motoren selv, omkring 31 MB, leveret fra dette sted og cachet af browseren efter første brug. Din video mountes ind i motorens virtuelle filsystem i fanen og læses derfra; den skrives aldrig ind i en forespørgselskrop. Du kan bekræfte det i Netværkspanelet: mens en fil behandles, er der ingen forespørgsel, der bærer den. Den egenskab er grunden til, at siden overhovedet findes – de fleste udtrækkere uploader først, og materiale under juridisk eller medicinsk tilbageholdelse kan ikke uploades.
Hvorfor fik jeg en .sup-fil i stedet for en .srt?
Fordi det spor er gemt som billeder, ikke som tekst. PGS-strømme (codec hdmv_pgs_subtitle) er en sekvens af billeder, og den ærlige udtrækning af en billedstrøm er en billedstrøm: en .sup, hvilket er præcis, hvad afspillere og underteksteditorer forventer. At gøre den til tekst betyder at genkende bogstaverne i hvert billede, hvilket er en anden side med et sprogspørgsmål og et korrekturlæsningstrin. Udtrækkeren opfinder aldrig tekst, den ikke har læst.
Hvad gør værktøjet med et spor, hvis format ikke har nogen selvstændig fil?
Det omkoder det ene spor til SRT og markerer resultatet som omkodet. Det almindelige tilfælde er mov_text, den undertekstcodec, der lever inde i MP4: den har ikke sit eget filformat, så en kopi af strømmen ville give bytes, intet kunne åbne. Omkodning er ikke tabsfri – stil og placering, som mov_text kan bære, overlever ikke – så resultatkortet lister det som et tab frem for at præsentere filen som en urørt kopi af det, der var i containeren.
Hvordan navngives outputfilerne, når der er flere spor?
Efter videoens eget navn og sporets sprogkode: en fil kaldet dokumentar.mkv med et engelsk spor giver dokumentar.eng.srt. Når to spor deler sprog – et almindeligt engelsk spor og et engelsk SDH-spor, hvilket er almindeligt – bliver det andet dokumentar.eng-2.srt frem for at overskrive det første. Et spor uden sprogtag falder tilbage til sit stream-indeks, så det stadig kan skelnes. Får du mere end én fil, tilbyder siden dem som én zip, fordi browsere blokerer en side fra at starte flere downloads på én gang.
Hvorfor tager den første kørsel længere tid end den anden?
Den første kørsel downloader ffmpeg-motoren, omkring 31 MB. Statuslinjen dækker den download og derefter selve udtrækningen. Browseren cacher motoren, så senere kørsler på samme side starter næsten øjeblikkeligt; det samme gælder efter en genindlæsning, hvis cachen ikke er ryddet. Motoren leveres i fire stykker, fordi hostingplatformen afviser enkeltfiler over 25 MiB, og siden samler dem i hukommelsen, før den starter – den samling er en del af den samme ventetid ved første kørsel.
Kan jeg annullere en kørsel, der tager for lang tid?
Ja. Annuller-knappen stopper den kørende udtrækning og terminerer den worker, der udfører den, så en stor fil ikke holder en kerne beskæftiget, efter du har besluttet ikke at vente. Annullering er ikke en fejl: elementet går tilbage til en tilstand, du kan prøve igen fra, og næste kørsel starter en frisk worker. Intet delvist tilbydes som download, fordi en halvskrevet undertekstfil, der ser komplet ud, er værre end ingen fil.