Gå till huvudinnehållet
SubtitleMatrix

Extrahera undertexter från video

MedieinmatningUndertexter i en video

Första körningen laddar ner undertextmotorn – ungefär 31 MB, serverad av den här webbplatsen och cachad av webbläsaren efteråt. Själva videon lämnar aldrig den här fliken.

Den här sidan plockar ut undertextspåren som redan ligger i en videofil. Du släpper in en .mkv, .mp4, .ts eller någon av de andra behållarna, och får tillbaka varje textspår som en egen undertextfil – .ass förblir .ass, .vtt förblir .vtt, och undertext lagrad i mp4:ans mov_text-format skrivs om till .srt. Inget ljud lyssnas på och ingen bild läses: det här är en demuxning, inte en igenkänning.

Källfilen rörs inte. ffmpeg kompilerat till WebAssembly läser den via webbläsarens filsystems-API och skriver bara ut de valda strömmarna, så en två timmar lång film kopieras inte in i minnet och en fil på upp till 2 GiB är hanterbar. Textspår kopieras som de är – deras tider, ordning och innehåll är byte för byte desamma som i behållaren, vilket är anledningen till att den här sidan inte har någon förlustrapport för de flesta spår. Undantaget är mov_text, som inte är ett fristående format och därför måste kodas om.

Strömmar som ligger i bilden – inbrända undertexter, de som bränts in i själva bildrutorna under redigeringen – kan inte extraheras, eftersom det inte finns någon separat ström att läsa. Sidan säger det rakt ut i stället för att lämna en tom fil: har filen bara brända undertexter blir resultatet ett meddelande om att inget textspår hittades. Bitmapformat som PGS och VobSub är en annan sak – de extraheras, men som .sup respektive .idx/.sub, och läses sedan av de egna OCR-sidorna, som också säger att resultatet måste korrekturläsas.

Har filmen flera textspår får du en fil per spår, namngiven efter spårets språk och titel där behållaren anger dem, så en nordisk utgåva kan ge en svensk, en norsk och en dansk fil ur samma körning. Flera filer från samma video paketeras som en zip när du laddar ner, eftersom webbläsaren blockerar flera samtidiga nedladdningar från ett enda klick.

Allt sker lokalt. ffmpeg-kärnan är ungefär 31 MB, uppdelad i fyra delar under plattformens filgräns, och laddas ner från den här sajten första gången och cachas sedan. Videon skickas aldrig någonstans; nätverkspanelen visar bara nedladdningen av kärnan. Avbryter du en pågående extrahering avslutas ffmpeg-tråden direkt, och nästa fil i kön startar en ny instans.

Vanliga frågor

Varför hittar extraheringen inga undertexter i min MP4-fil när spelaren visar dem?

Nästan alltid därför att undertexterna är inbrända i bilden. En spelare som visar text behöver inte ha en textström – den kan läsa texten ur bildrutorna precis som du gör. Inbränd text går inte att extrahera, eftersom det inte finns några separata data att kopiera ut; den enda vägen är OCR på bildrutorna, vilket den här sidan inte gör. Samma sak gäller en .mp4 där texten lagts på i efterhand av en redigerare utan att exporteras som ett spår. Öppna filen i en spelare som listar strömmar, eller använd ffprobe, om du vill veta säkert före.

Vilka videoformat kan extrahera undertexter, och finns det en storleksgräns?

Behållarna matroska (.mkv, .mks), mp4 och .m4v, .avi, .mov, .ts, .webm, .wmv, .flv, .mpg och .mpeg samt .ogv tas emot, med en gräns på 2 GiB per fil. Gränsen är en säkerhetsåtgärd, inte en teknisk gräns hos ffmpeg: filen läses via webbläsarens filsystem utan att kopieras in i minnet, men en fil som närmar sig minnesgränsen kan ändå få fliken att krascha, och en tydlig vägran är bättre än en krasch mitt i en körning. Större filer kan delas först, men då måste du själv hålla reda på vilken del som innehöll vilket spår.

Vad är skillnaden mellan att extrahera ett ASS-spår och ett mov_text-spår ur samma video?

ASS-spåret kopieras utan att tolkas – det är redan ett komplett format med stilar, positioner och karaoke, och det du får ut är samma bytes som låg i behållaren. mov_text är däremot ett format som bara existerar inuti mp4 och som saknar en fristående filform; det måste skrivas om till SRT, vilket innebär att stilar, färger och positionering tappas och räknas i förlustlistan. Det är samma sorts förlust som en ASS till SRT-konvertering skulle ge, men den sker här som en bieffekt av att formatet inte kan exporteras som det är.

Får jag en fil eller flera när videon har undertexter på flera språk?

En fil per textspår, och flera filer paketeras i en zip vid nedladdning. Namnet byggs av videons basnamn plus spårets språk och titel när behållaren innehåller dem, så film.mkv med svenska och norska spår ger två urskiljbara filer i stället för två som skriver över varandra. Saknas språktaggen – vilket är vanligt i äldre ripningar – numreras spåren i den ordning de ligger i filen. Inget spår väljs bort åt dig, så du ser allt som fanns.

Kan jag avbryta en extrahering av undertexter från en stor videofil?

Ja, och avbrytningen är omedelbar till skillnad från transkriberingssidorna. Arbetet sker i en egen ffmpeg-instans, och avbryt-knappen avslutar den tråden direkt i stället för att vänta ut den aktuella filen. Därefter laddas en ny instans innan nästa objekt i kön börjar, så en avbruten körning lämnar inget halvskrivet tillstånd bakom sig. Inget av filerna på din disk rörs – källfilen läses bara, och de filer som redan laddats ner är dina.

Behåller de extraherade undertexterna tiderna exakt som de var i videon?

För kopierade textspår, ja: strömmens tidsstämplar skrivs ut som de är, utan omräkning och utan avrundning. Det finns ingen bildfrekvens inblandad i den vägen, eftersom texten redan är tidsatt i sekunder och millisekunder. Undantaget är återigen mov_text till SRT, där omkodningen går via millisekunder och en tid som låg på en bildruta i den ursprungliga basen kan hamna en millisekund fel. Bitmapspår som PGS behåller sina 90 kHz-tidsstämplar intakta i .sup-filen.

Varför får jag en .sup-fil i stället för en .srt när videon har bitmapundertexter?

Eftersom bitmapundertexter är bilder, inte text – PGS lagrar varje textblock som ett litet bitmappat lager, och det finns ingen text att skriva ut. Sidan extraherar dem i sitt eget format, .sup för PGS och .idx plus .sub för VobSub, vilket är det enda sättet att bevara dem utan att gissa. För att få text måste bilderna läsas av med OCR, och det gör de egna sidorna för .sup och .idx/.sub; resultatet därifrån behöver korrekturläsas, eftersom teckenigenkänning på små, komprimerade textlager inte är felfri.

Relaterade verktyg