Tjugo språk på två dagar. Inte en rad skriven för hand.
Det började med en 64 minuter lång guide på YouTube. Idag finns den på 20 språk utöver Johans engelska original. Byt spår, och du hör hans egen klonade röst prata obehindrad thailändska, persiska eller tyska – i exakt synk med det som händer på skärmen. Resultatet är 21 timmar färdigt ljud, och hela arbetet tog två dagar.
Problemet var att det inte fanns någon färdig produkt för detta. Det finns dubbningstjänster, men ingen av dem läser manuset med en specifik röst, klipper ljudet exakt efter undertexternas tidkoder och låter oss styra varje enskild replik. Så vi fick bygga maskineriet från grunden. Dag ett skrev GPT-5.6 i Codex den första versionen. Dag två lät vi Anthropic Fable 5 i Claude Code felsöka och bygga om allt, efter att vi fått feedback från tittarna. Det här är historien om hur vi löste pusslet, och vad som hände när allt inte lät som det skulle.
- Dubbade språk
- 20
- Filmlängd per språk
- 64 min
- Genererade repliker
- 12 550
- Färdigt dubbat ljud
- 21 h
- Från start till uppladdning
- 2 dagar
- Rader skrivna för hand
- 0
01
En populär guide åldras snabbt
En YouTube-video med över 100 000 visningar borde vara en tillgång. Men ett halvår efter publiceringen hade Johans 30 minuter långa guide till ett populärt Obsidian-tillägg blivit ett problem. Under månaderna som gått hade mjukvaran uppdaterats 41 gånger. Söksyntaxen hade ändrats, och inställningarna hade gjorts om två gånger. Funktioner för kalender, uppgifter och manuell sortering fanns inte ens när originalet spelades in. Nya tittare möttes av en genomgång som inte längre stämde.
Därför spelade Johan in uppföljaren: "Mastering Notebook Navigator 3". Resultatet blev 64 minuter uppdelat i 14 kapitel. Utgångsläget för dubbningen var glasklart. Filmen var publicerad, det engelska talet låg transkriberat i 580 undertextblock, och maskinöversatta undertexter låg uppe på 20 språk.
Ljudet saknades däremot. Kravlistan var tydlig: varje språk krävde ett komplett ljudspår, på sekunden lika långt som filmen. Talet var tvunget att synka med undertexterna – för undertexterna visade vad som hände på skärmen just då. Rösten skulle vara Johans egen, tränad i ElevenLabs. Viktigast av allt var kontrollen: vi behövde kunna plocka ut och göra om en enda replik utan att tvingas rendera en hel timme ljud på nytt.
02
Block för block blir rappakalja
Första problemet hade inget med ljudet att göra. Undertexterna var redan översatta, men de hade hanterats som undertexter brukar hanteras: maskinellt, block för block. När GPT-5.6 skannade texten inför dubbningen fick den persiska versionen rött ljus. Texten gick helt enkelt inte att läsa in. När vi tittade närmare såg vi samma mönster överallt.
Ett undertextblock är ju bara det som ryms på skärmen i stunden, inte en komplett tanke. Av filmens 580 blockbrytningar kapade 457 stycken texten mitt i en mening. Att översätta dem ryckta ur sitt sammanhang var att be om trubbel. I det tyska spåret fanns till exempel ett block som slutade med ordet "To". Maskinen översatte det rakt av till "Um", och upprepade sedan samma sak i nästa block. De två tyska blocken hann dessutom byta tilltal från det informella "du" till det formella "Sie" – eftersom de saknade kontext.
Språk efter språk led av samma brister: hängande bisatser, halva produktnamn och i värsta fall meningar som sa raka motsatsen till originalet.
Tjugo översättningar fick skrotas och göras om. Att läsa in ett trasigt manus med en mänsklig röst skulle bara göra bristerna smärtsamt tydliga.
03
Fyrtio agenter och en gemensam ordlista
Så vi backade från språket och tittade på strukturen. Vi lät ett skript läsa in de 580 engelska blocken och slå ihop dem till 106 hela meningar. Varje mening taggades med rätt kapitel och en spärrlista för ord som inte fick röras. En central ordlista höll ordning: Obsidians "vault" är en arbetsyta i programmet, inte ett bankvalv. Menyer och knappar som "Settings", "Restricted mode" och "Browse" skulle heta exakt det som stod på skärmen, oavsett språk.
Sedan drog vi igång en översättaragent per språk. Instruktionerna var exakta, ner till pronomen: brasiliansk portugisiska fick använda "você", portugisiska "tu", och ukrainskan det formella "ви". Agenterna översatte mening för mening i full kontext, och delade sedan upp texten igen vid de ursprungliga blockgränserna.
Därefter tog en granskningsagent över. Den jämförde de nya, uppdelade undertexterna med den engelska källan, rad för rad. Ett skript bevakade tidkoderna och såg till att textlängden stämde: 50 tecken för språk med latinskt alfabet, 32 för japanska och bara 24 för kinesiska.
När granskningen var klar hade agenterna loggat 2 531 rättelser. Sju av tio handlade om segmentering – att flytta själva brytpunkten så att tittaren hinner andas där språket kräver det. Franskan och tyskan fick flest ändringar eftersom de användes som testbäddar. Persiskan fick en helt egen extrarunda i full kontext för att städa upp röran från originalöversättningen.
Först när totalt 11 600 block gick igenom testerna utan en enda varning, tryckte vi på knappen för ljudet.
04
Ett manus för ögat, ett för örat
Nu ställdes vi inför ett vägval som styrde resten av projektet. Vi var tvungna att separera texten som tittaren ser från texten som rösten läser.
Undertexter är nämligen skriftspråk. Om Johan skriver ut "Tags", "Ctrl+1" eller "/*" i filmen, måste det stå så i texten. Men matar du in "/*" i en röstmodell, så blir den oftast helt tyst. "Ctrl" riskerar att bokstaveras tecken för tecken. Därför lade vi ett separat talmanus parallellt med undertexterna för alla tjugo språk. I det lagret slogs fragmenten ihop till hela meningar, låstes mot tidkoderna och skrevs om fonetiskt.
Regeln var strikt: om översättningen var fel rättade vi båda lagren. Om det bara lät konstigt ändrade vi uttalet i tallagret. Tittaren ser "Tags". Rösten läser "Täggs".
05
Maskineriet bakom rösten
Ljudet kom från ElevenLabs flerspråkiga modell, matad med Johans klonade röst. Runt den byggde vi en pipeline i Python som skickade ett API-anrop per replik och sedan sparade ljudfilen i en cache, kopplad till en unik hash av texten och inställningarna.
Den cachen var avgörande. Om kontosaldot tog slut mitt i en generering frös systemet, redo att plocka upp tråden igen så fort kortet hade debiterats. Och om vi senare upptäckte att en enda mening lät fel kunde vi korrigera den och bara be om det specifika ljudklippet igen, tillsammans med replikerna runt omkring, så att tonfallet matchade i skarvarna. Utan den detaljstyrningen hade projektet aldrig gått i lås på två dagar.
Slutligen tog en renderare vid. Den staplade replikerna på filmens tidslinje, mätte och jämförde mot originalet. Ut kom en detaljerad rapport för varje spår: exakt längd, avvikelser mot undertexternas starttider, klipp som riskerade att överstyra, samt en analys av ljudnivåerna. Vi kompromissade inte; varje språk fick genomgå exakt samma kontroll.
06
"En sömnig robot från Quebec"
När den första versionen gick live tog det inte lång tid innan domen föll.
"Jag klarar inte att lyssna på det. Det låter som en uttråkad eller sömnig robot som pratar Quebec-franska," skrev en fransk tittare.
En tysk tittare fyllde i: "Tyskan funkar bra. Grammatiken stämmer och uttalet är bara lite träigt."
Båda kommentarerna fångade exakt samma problem. Engelskan är kompakt, så när texten översätts tar den nya repliken ofta kortare tid att läsa. Vår första version löste tidsglappet genom att helt enkelt dra ut den genererade rösten i mjukvaran tills den fyllde hela undertextfönstret.
Siffrorna talade sitt tydliga språk. Franskan spelades upp i 82 procent av sin normala hastighet. För thailändskan var läget extremt – 0,65x. En tredjedel av allt som sades i hela filmen gick bokstavligen i slow motion.
07
Fixen: luften ska in mellan orden
Felet var uppenbart: vi placerade tidsglappet i fel ände. Den extra tiden ska ligga i pauserna, inte dras ut över vokalerna.
Vi drog igång Anthropic Fable 5 i Claude Code för att skriva om renderaren. I den nya versionen låstes talet vid exakt den tidpunkt som undertexten krävde. Vi tillät en hastighetsminskning på max fem procent, vilket örat knappt uppfattar. Resten av luften sköts in där vi människor faktiskt tar paus – vid punkter, kommatecken och kolon. Och eftersom ElevenLabs levererar tidsstämplar på teckennivå, kunde vi placera pauserna precis rätt.
Blev det ändå tid över lämnades det som ren tystnad, oftast där originalfilmen ändå tog en paus för att visa något på skärmen. För att tystnaden inte skulle bli helt död och bryta rumskänslan, lades ett svagt brus in som rumston.
Tack vare caching-systemet kunde vi köra hela omrenderingen av de 20 språken med befintliga ljudfiler. Uppdateringen krävde inte ett enda nytt API-anrop till röstmodellen.
08
Falska vänner slår till
Den tyska tittaren lämnade dock en kommentar till. Det gällde ordet "tags". Ibland snubblade modellen till och uttalade det engelskt, ibland som det tyska ordet för dag – "Tag". Samma stavning, två helt olika uttal.
Det fanns fler gropar i vägen. I ett kapitel om att gömma mappar klickar Johan in tecknen "/_*" och läser ut dem högt. Den tyska rösten såg bara symboler och hoppade över dem fullständigt.
Vi tittade på ElevenLabs inbyggda uttalslexikon, men dokumentationen visade att den flerspråkiga modellen ignorerar fonetiska regler. Att göra en automatisk sök-och-ersätt för att alltid tvinga fram ett tyskt "Tägg" tar inte hänsyn till kontexten. Då hade modellen plötsligt pratat om "Tägg" även när den läste upp ett datum. Den enda vägen framåt var att justera uttalet för hand i textlagret, replik för replik.
09
Att granska språk man inte förstår
Frågan väcktes direkt: om tyskan hade det här problemet, vad dolde sig i de andra språken? Eftersom ingen av oss pratar thailändska, ukrainska eller persiska vände vi oss återigen till agenterna. Fyra granskare fick plöja igenom alla tjugo talmanus på jakt efter feluttal, språkliga kollisioner och fel som hängt med från översättningarna.
Granskningen gav resultat. Agenterna hittade att "Ctrl" bokstaverades i stort sett överallt. Siffran "15,000" uttalades som "femton komma noll" på språk där kommatecknet står för decimaler. Snedstrecket i "/Journal" var bortglömt. Thailändskan saknade mellanslag i 66 repliker där latinska ord dök upp. I turkiskan hade ordningstalen kapats på mitten av blockgränserna. Och fyra olika språk hade stelt översatt ordet "funny" till "komisk", i stället för "rolig".
Rättelserna gjordes i en enda körning: 966 repliker genererades om och tidslinjerna renderades på nytt. Varje enskild omstavning resulterade i ett separat litet ljudklipp för vår manuella granskning.
10
Bokslutet: två dagar i siffror
Så här såg insatsen ut. Dag ett: undertexterna översattes från grunden av fyrtio agenter. GPT-5.6 i Codex skrev hela dubbningspipelinen, rösten klonades och 20 språk genererades. Dag två: tittarna gav feedback. Anthropic Fable 5 i Claude Code byggde om renderaren för att skjuta in luft i pauserna i stället för att tänja ut ljudet. Fyra agenter dammsög talmanusen, och sedan genererades de rättade replikerna.
Slutresultatet är 20 ljudspår och drygt 21 timmars tal. Varje spår är 64 minuter och 15 sekunder långt. Spåren ligger inbakade i den publicerade filmen på YouTube, som automatiskt väljer spår utifrån tittarens språkinställning. På köpet fick originalengelskan sig en omgång: 33 små grammatikfel i det engelska originalet hittades och rättades, liksom alla de följdfel som det hade orsakat i tolv av språken.
Och den "uttråkade" franska robotrösten? Den lät helt normal när den väl spelades upp i avsedd hastighet. Det som uppfattades som ett röstproblem var egentligen bara ett matteproblem.
11
Ett kvitto på tekniken
I slutändan bevisade projektet en sak. Agentiska arbetsflöden fungerar skarpt. Och de gör det även när man sitter med ljud, exakta tidslinjer och tjugo språk som ingen i teamet förstår.
Metoden fungerade eftersom den bygger på maskinellt övervakade acceptanskriterier för längd, synk, uttal och terminologi. Ljudet cachas systematiskt så att en ändring bara kostar API-pengar för just de repliker som skrivs om. AI-agenterna gör grovjobbet och hanterar volymen, men en människa tar alltid de sista besluten.
Maskineriet drivs av standardkomponenter: undertextfiler, ett API för röstgenerering, verktyg som ffmpeg, noggrannhet och AI-modeller som skrev koden. Det är den typen av arbetsflöden vi på TokenTek bygger och automatiserar.
Vill du använda metoden på ert innehåll?
Vi använder precis samma arbetssätt när vi bygger produktionssystem åt våra kunder: en tydlig riktning, agenter som drar det tunga lasset under utvecklingen, och kvalitetskrav som följs upp konsekvent. Hör av dig, så diskuterar vi vad det kan innebära för er.