Restauratienotities · FilmFix Cross-Frame-interpolatie
FilmFix biedt klanten de mogelijkheid om geavanceerde technologie te gebruiken om oude film naar de 21e eeuw te brengen! We geloven dat u onder de indruk zult zijn van de resultaten.
In essentie neemt interpolatie een haperend beeld en maakt het vloeiender. Dat doen we door een bepaalde hoeveelheid beeldinformatie uit twee opeenvolgende frames te “lenen” en daar twee nieuw gecreëerde frames tussen te plaatsen. Zo hebben we nu vier frames op basis van die twee originele frames, wat zorgt voor een vloeiendere kijkervaring. Het begint bijna op video te lijken!
Hieronder vindt u een stap-voor-stap uitleg van onze ×3-interpolatieaanpak. We bespreken de twee subvarianten die we opbouwen — de kruislings toegepaste varianttechniek die voorkomt dat korrel gaat koken, en waarom we interpolatie nooit over een montageknip laten schilderen.
De handgehouden Double 8-beelden van de optocht hieronder vormen een perfecte testcase. De meeste film in dit formaat werd opgenomen aan 16 beelden per seconde (fps), maar deze spoel werd vrijwel zeker trager opgenomen — dichter bij 14 fps. Opnemen met een lagere beeldsnelheid stond bekend als “undercranking” en was een gangbare praktijk onder filmliefhebbers. Door de camera onder de standaardsnelheid te laten lopen, kon een dure filmrol over meer opname-seconden worden uitgespreid — en als vaak over het hoofd gezien neveneffect werd de film licht overbelicht als dat niet gecompenseerd werd. Undercranking liet meer licht toe op elk filmbeeld, en zoals u zult merken is die optochtspoel inderdaad licht overbelicht. Toch lijkt ze, afgespeeld aan 16 fps, versneld. Met interpolatie zetten we haar terug naar de werkelijke 14 fps!
In de oorspronkelijke toestand van 14 fps is er nauwelijks beweging bemonsterd tussen het ene frame en het volgende. De deelnemers aan de optocht springen zichtbaar stroboscopisch vooruit, vlaggen haperen in plaats van te golven, en een trage pan over het publiek creëert een discoachtig stroboscoopeffect. Dat is precies waar onze techniek het soort beelden oplevert waarin ×3-interpolatie haar waarde bewijst!
Waarom we 42 fps gebruiken, en niet 50 of 60
We interpoleren niet naar een afgerond tv-standaarddoel, maar verdrievoudigen de werkelijke opnamesnelheid van het beeldmateriaal. Een spoel van 14 fps wordt 14 × 3 = 42 fps (een spoel van 16 fps komt uit op 48 en een spoel van 18 fps op 54 fps). Vermenigvuldigen met de echte snelheid betekent dat elk origineel frame een exact, gelijkmatig verdeeld slot behoudt met twee gegenereerde frames ertussen en het volgende originele frame — geen resampling, geen drift, originelen onaangeroerd.
Hieronder ziet u de feitelijke pipeline die we op deze spoel hebben toegepast, in volgorde, met stilstaande beelden rechtstreeks uit de werkmappen. De stills waarop we de interpolatie baseren zijn ongecropt, full-frame (klik op een afbeelding om de overscan te tonen). Die overscan laat het gebied van de perforatiegaten en extra beeldinformatie langs de zijkanten zien — detail dat de interpolatie ten goede komt. Deze bestanden zijn al kleurgecorrigeerd en beeldgestabiliseerd, en zijn compressievrije 8-bit-masterbestanden.

De masters. Ons vertrekpunt laat de originele overscan, vervuiling en korrel van de film intact. Hier wordt niets gewijzigd; deze elementen blijven in de eindmontage exact zoals ze gescand zijn.
Verken de afgewerkte sequentie
Elk derde frame is een onaangeroerde master; de twee ertussen hebben nooit op de film gestaan. Stap met de pijlen (ingedrukt houden om te scrubben), klik op de afbeelding om verder te gaan, of druk op afspelen voor een trage wandeling van ~8 fps.
100% · werkelijke pixels — de drie vensters op het frame hierboven, pixel voor pixel uit het originele bestand. De genummerde vakken op het frame markeren elk venster — versleep een vak (of pan binnen een venster) om eender waar binnen het kader te kijken. We plaatsten ze op de harde gevallen, met snel bewegende randen (de hand en arm die achter de jurk vandaan komen) en de achtergrond direct achter haar, waar naïeve interpolatie een “spookveeg” achter de beweging zou achterlaten. Blader frame per frame en kijk na — de korrel leest als korrel, met veel minder sleping dan een videotool met “Optical Flow” zou produceren. Gouden badge = echt filmframe · roestkleurig = gegenereerd tussengevoegd frame.
01Twee subvarianten uit één frame
extractie → scherp · korrelvrij
Voor er enige beweging wordt berekend, wordt elk masterframe uitgewerkt tot twee opgeschoonde subvarianten. Het zijn geen eindbestanden — het is steigerwerk voor de interpolatiestap.
Scherp heeft alleen vervuiling verwijderd: stof, krassen en plaksporen zijn weg, maar de korrel en fijne details van de film blijven volledig aanwezig.

Korrelvrij gaat nog een stap verder en verwijdert ook de korrel, waardoor een gladder, iets zachter beeld overblijft dat de inhoud van de scène draagt zonder de ruis.
Hetzelfde frame, twee lezingen! De eerste variant (boven) behoudt elke korrel van het echte detail. De tweede variant (onder) behoudt de beweging en inhoud, maar laat de ruis vallen. De volgende stap zet die twee tegen elkaar uit.
02De kruisvariant-truc
interpoleren · de scherpere helft behouden
Dit is het deel waar we in stilte trots op zijn. In plaats van scherp-naar-scherp te interpoleren (wat gaat koken) of korrelvrij-naar-korrelvrij (wat detail verliest), interpoleren we kruislings tussen de twee varianten — en we doen dat twee keer, in tegengestelde opstellingen.
Voor een ×3-resultaat hebben we twee nieuwe frames nodig tussen elk paar masters: één op een derde van de afstand en één op twee derde. Elk wordt gegenereerd uit een paar waarvan het scherpe uiteinde de master is waar het het dichtst bij zit, en waarvan het verre uiteinde korrelvrij is. Omdat één uiteinde van elke interpolatie geen korrel draagt, vindt het model geen valse spikkelbeweging — terwijl het behouden frame toch dicht tegen een scherpe master aanleunt, zodat echt detail behouden blijft.
Van elke doorgang verwerpen we de helft die dichter bij het korrelvrije uiteinde ligt en behouden we alleen de scherp-leanende helft. Voeg de twee behouden helften samen, en elk tussenframe is gedetailleerd waar het telt en korrelstabiel elders — over de hele sequentie leest korrel als korrel in plaats van te koken tot een sneeuwstorm.
Een frame dat nooit werd opgenomen. Gegenereerd tussen twee masters, scherp waar de deelnemer beweegt, rustig waar de korrel zit.
De naad onzichtbaar maken
Korrel behandelen is op zichzelf nog niet genoeg. Een gegenereerd frame kan zich nog altijd verraden als het meer — of minder — randdetail draagt dan de originele frames eromheen. Wanneer dat gebeurt, lijkt elk derde frame lichtjes te “ploppen” terwijl het beeld afwisselt tussen opgenomen en berekend, een subtiele schittering langs randen die het oog opmerkt, zelfs wanneer elk frame op zichzelf goed lijkt.
De boosdoener is meestal te veel verscherping op de variant. Verscherp je te sterk, dan worden harde randen overdreven — en omdat korrel net langs die randen zit, lijkt de korrel eromheen te kruipen en zich te herpositioneren van frame naar frame. De oplossing is eenvoudig: we schroeven de verscherping van de variant terug tot die overeenkomt met het detailniveau van de master, in plaats van het te overtreffen. Zodra beide op hetzelfde niveau zitten, is er geen rand meer die kan verschuiven, passen de ⅓- en ⅔-frames zonder zichtbare naad in de reeks, en — zoals de volgende stappen benutten — wordt de hele sequentie consistent genoeg om als één geheel te reinigen.
03Waar interpolatie faalt
Een bewegingsbewust model interpoleert door te bepalen waar elk deel van het beeld zich tussen twee frames heeft verplaatst, en vervolgens de tussenpositie te tekenen. Dat werkt behoorlijk goed voor een arm van een optochtdeelnemer of een voorbijrijdende praalwagen. Maar het faalt op drie typische manieren.
1. Korrel. Filmkorrel is in wezen willekeurige ruis — een ander spikkelpatroon in elk afzonderlijk frame. Vraag het interpolatiemodel om beweging te volgen tussen twee korrelige frames en het probeert braaf spikkel aan spikkel te koppelen, waardoor het overal in het beeld kleine, onsamenhangende “bewegingen” verzint. Het resultaat is kokende korrel: een sneeuwstormachtig artefact van verzonnen beweging dat over het beeld smeert en kruipt, met een verschuivende stroom die soms lijkt op een zwerm vogels of een school vissen die van richting verandert — zodat wat een stil stuk lucht of wegdek zou moeten zijn nooit echt stil blijft. Deze specifieke optochtspoel is niet de beste om dat te tonen. De shots zijn te kort en bevatten te veel camerabeweging en te veel snel bewegende deelnemers. Kokende korrel valt het makkelijkst op in een langer shot met weinig camerabeweging en een groot egaal vlak zoals lucht.
2. Gebieden die zichtbaar worden achter een bewegend object: Wanneer iets beweegt, onthult het een deel van het beeld dat in het vorige frame niet zichtbaar was — het model heeft geen eerdere informatie om uit te putten en smeert daarom het pas blootgelegde gebied uit. Deze optochtbeelden tonen dat probleem perfect. Richt uw aandacht op de muur en het voetpad achter de kinderen met vlaggen die voorbijmarcheren, en u ziet hoe standaardinterpolatie daar snel uiteenvalt. De optical-flow-pass voegt een spookachtige veeg toe die de beweging van de kinderen volgt. Zelfs onze kruissubvariant-aanpak begint hier onder druk te staan — maar ze houdt veel beter stand dan de optical-flow-filter.
3. Interpolatie over montageknippen heen. Deze optochtspoel is een keten van afzonderlijke opnames. Bij elke montageknip tonen twee aangrenzende frames volledig ongerelateerde scènes. Een interpolator die niet weet waar de knippen zitten, leest die sprong als één enorme beweging en probeert het ene shot in het andere te vervormen. Gedurende enkele frames smelten de twee scènes in elkaar tot een uitgesmeerde dissolve die nooit gefilmd werd. U kunt het zien gebeuren in de vergelijkingsviewer: schakel over naar “EDIUS optical flow” en verlaag de snelheid naar ¼×, en let dan op eender welke montageknip. Onze CrossFrame-pass detecteert elke knip vooraf en houdt het frame gewoon aan, zodat elke overgang een zuivere, harde knip blijft — exact zoals de film het bedoelde! (sectie 04 toont hoe)
Afspelen aan halve snelheid zodat de verschillen makkelijk te zien zijn
Bij 1× lopen beide kanten even lang in real time, terwijl de extra frames de beweging vloeiender maken. Ze rekken haar niet uit. Sleep de hendel om ertussen te vegen en kijk naar de muur en het voetpad achter de deelnemers.
Voor · Ruwe 14 fps
FilmFix · CrossFrame
ASSET_BASE in het script naar depublieke URL van de map
web/ om de clips te laden.Het falen waar we omheen engineeren. Volg beweging tussen twee korrelige frames en de korrel zelf wordt als beweging gelezen — en kruipt.
De oplossing in één regel
Zoals hierboven uitgelegd: interpoleer nooit tussen twee korrelige frames, maar zorg er altijd voor dat één uiteinde van elke interpolatie korrelvrij is.
04CUTS – gebeurtenissen die het model niet mag kruisen
detecteer elke montageknip · onderdruk interpolatie
Een optochtspoel is geen doorlopende opname. Het zijn tientallen afzonderlijke takes. Bijvoorbeeld een breed shot van de straat, een close-up van de fanfare, dan terug naar het publiek. Bij elke nieuwe take (cut) tonen twee aangrenzende frames volledig ongerelateerde scènes.
Voor een interpolator lijkt die kloof op een enorme, onmiddellijke beweging, dus probeert die ze te “verzachten” door het ene shot in het andere te vervormen en bij elke nieuwe take een uitgesmeerd, glitchy frame achter te laten. Daarom detecteren we vóór de interpolatie elke montageknip in de spoel en verbieden we het model om eroverheen te tekenen. Bij een knip houden we gewoon het volgende frame vast in plaats van een overgang te verzinnen. Het resultaat is een zuivere, harde montageknip, exact zoals de film het bedoelde.
Framewiskunde, voor de nieuwsgierigen
Voor N masterframes bij factor ×3 bestaat de afgewerkte sequentie uit 3N − 2 frames. Elke master, dan de twee gegenereerde tussenframes, dan de volgende master. Bij 14 fps komt de output zo uit op 42 fps. Bij een gedetecteerde cut worden die twee tussenframes vervangen door een aangehouden frame, zodat er niets over de montageknip heen vervormt.
hoe het er NIET zal uitzien … bekijk deze uitgesmeerde overgang
05Beste bronmateriaal om mee te starten – een overscande transfer
extra zijmarges erin → interpoleren → op het einde croppen
Er is nog één plek waar interpolatie zonder speelruimte valt: de rand van het frame. Een bewegingsbewust model werkt door elk deel van het ene frame te koppelen aan waar het in het volgende frame terechtkomt. Aan de rand breekt die koppeling veel sneller af op een “schoon” frame (een bijgesneden overscan) — wat in beeld schuift of eruit verdwijnt heeft geen tegenhanger in het aangrenzende frame, omdat het daar simpelweg niet aanwezig is. Het model wordt gedwongen te gokken, en die gok toont zich als pixels langs de rand die uitrekken, uitsmeren of wiebelen alsof de rand van het beeld van rubber was.
Handgehouden beelden maken dit overal tegelijk erger. Elke kleine schok verschuift het volledige frame, zodat in elk frame opnieuw nieuwe inhoud aan de ene kant binnenkomt en aan de andere kant verdwijnt — een constante pixelstroom die het model nooit kan verankeren.
De remedie is het model meer beeld te geven dan de uiteindelijke film ooit zal tonen. We scannen met een overscan. De capture reikt voorbij het bedoelde beeldgebied en neemt alles mee wat de film te bieden heeft aan zowel de linker- als rechterkant. Zo verschijnt een deelnemer die van rechts in beeld schuift niet zomaar uit het niets — het model volgt hem al in de marge vóór hij het uiteindelijke beeld binnenkomt. Het giswerk gebeurt nog steeds, maar dan in de opofferingsrand, niet in het beeld dat u behoudt.
Waarom de crop pas op het einde komt
De overscanmarge blijft in beeld tijdens elke verwerkingsstap — interpolatie, assemblage, de finale temporele reiniging — en wordt pas helemaal op het einde weggecropt. Doe je dat eerder, dan erft elke volgende stap opnieuw een verse, artefactgevoelige rand. Crop je pas op het einde, dan was de rand van het afgewerkte frame tijdens het werk eigenlijk nooit een rand.

Meer film dan u ooit zult zien
De scan reikt voorbij het uiteindelijke beeld aan de linker- en rechterzijde. Interpolatie-artefacten blijven kleven aan de buitenste marge — die de uiteindelijke crop toch nooit overleeft.
06Eén schone pass over een consistente sequentie
assembleren → finale filtering · temporele radius 4
Met respect voor de montageknippen wordt de spoel geassembleerd — originele en gegenereerde frames verweven tot één doorlopende clip — en voeren we één finale restauratiepass uit over het geheel. Deze stap is alleen mogelijk dankzij het afstemmingswerk eerder in het proces. Een temporele reiniger beoordeelt elk frame tegenover zijn buren; als opgenomen en gegenereerde frames verschilden in scherpte of korrel, zou hij dat verschil als beweging lezen en ofwel detail uitsmeren, ofwel weigeren te reinigen.
Omdat elk frame er nu uitziet alsof het erbij hoort, kunnen we die pass stevig doorzetten. We gebruiken een brede temporele radius — een instelling van 4 — waarbij meerdere naburige frames tegelijk worden samengebracht om echt detail te scheiden van resterende ruis en vervuiling, veel agressiever dan de oorspronkelijke, inconsistente scan ooit zou toelaten. De verdrievoudigde beeldsnelheid werkt hier in ons voordeel: meer naburige beelden die overeenkomen, en dus een schonere scheiding tussen signaal en ruis.
Die laatste pass is grondig — grondig genoeg om het beeld een licht digitaal uitzicht te geven. Daarom is de allerlaatste stap het teruggeven van een fijne, egale filmtextuur. Dat oogt niet alleen correct: een beetje herstelde korrel laat het beeld ook scherper lezen en houdt het in beweging beter bijeen, doordat het het oog stabiele randen geeft om zich van frame tot frame aan vast te houden. Hieronder meer over wat die textuur wel is — en wat niet.
07Zie het zelf
voor · na
Hier ziet u dezelfde optochtclip, onaangeroerd aan de ene kant en ×3 geïnterpoleerd aan de andere. Let op de benen van de deelnemers en de pan over het publiek. Het gehaper dat als “oude film” leest, is weg, terwijl de korrel er nog steeds uitziet als film.
Alle drie tegelijk — origineel 14 fps (boven), optical flow 42 fps
(linksonder), FilmFix CrossFrame 42 fps (rechtsonder). Zelfde moment,
dezelfde snelheid.
08Wat het niet kan oplossen: ingebakken bewegingsonscherpte
beperkingen
Er is één probleem dat geen enkele hoeveelheid interpolatie ongedaan kan maken. Wanneer de camera zelf schudt — niet het onderwerp beweegt, maar het hele frame in de hand van de camerabediener schokt — dan wordt elk getroffen frame vastgelegd met bewegingsonscherpte die er rechtstreeks in uitgesmeerd zit. Die onscherpte is geen korrel of ruis boven op het beeld; ze is het beeld, zacht geregistreerd op het moment dat de sluiter openstond.
Stabilisatie helpt het beeld stil te houden, maar verplaatst alleen frames. Ze kan geen frame verscherpen dat al onscherp werd vastgelegd. Daardoor kan een gestabiliseerde, schokkerige sequentie rotsvast staan en toch blijven flikkeren tussen scherpe frames en zachte, uitgesmeerde frames. Het wordt een onscherpte die stroboscopisch in en uit beeld springt volgens hoe de camera schudde.
Interpolatie kan dat zelfs erger maken. Het model gaat ervan uit dat de frames waarmee het werkt schone doelen zijn om tussen te bewegen. Geef het een onscherp frame, en het draagt die onscherpte trouw mee in de nieuwe frames die het genereert, soms zelfs door de veeg te versterken in plaats van te verdunnen. Wanneer een shot zware ingebakken bewegingsonscherpte draagt, kunnen we de beweging wel vloeiender maken, maar niet de scherpte terughalen die de camera nooit heeft vastgelegd. Het is belangrijk om dat van bij het begin te weten.
09Wat we niet zullen doen
kunstmatige korrel = misleiding
Het is de moeite waard om precies te zijn over die finale textuur, want de werkwijzen verschillen tussen transferhuizen. Sommigen leggen zware korrel over het beeld om interpolatie-artefacten te verbergen, of om resolutie te faken die een zachte scan nooit werkelijk heeft vastgelegd. Dat doen wij niet! Onze textuur is licht en egaal. Ze verbetert hoe schoon het beeld in beweging samenhangt, maar ze verzint nooit detail dat uw film niet heeft, en ze plakt nooit een naad dicht tussen een opgenomen frame en een gegenereerd frame. Waar een frame scherp oogt, is het onderliggende detail echt.
Geen van de afzonderlijke stappen hier is op zichzelf exotisch. Wat deze aanpak ongewoon maakt, is de combinatie: de varianten op elkaar afstemmen zodat gegenereerde frames geen naad nalaten, korrel omzeilen door kruislings te interpoleren tussen een scherp / korrelvrij paar, elke montageknip behandelen als een grens die het model niet mag overschrijden, en pas daarna de geassembleerde spoel als één consistent geheel reinigen. Eenvoudige onderdelen, zorgvuldig samengebracht — en samen zorgen ze ervoor dat zuivere interpolatie van korrelige archieffilm echt werkt!
Waarom het kost wat het kost
Dit alles is geen éénklikfilter. Elke montageknip in de spoel wordt vóór de interpolatie met de hand gecontroleerd, zodat het model nooit over een edit heen mag uitsmeren. Elk frame doorloopt de pipeline meerdere keren, met vervuilingsreductie en korrelreductie om de twee subvarianten op te bouwen, daarna de kruisvariant-interpolatie zelf — en vervolgens een finale, temporele reiniging over de volledige geassembleerde sequentie. Het is doelbewust, gelaagd werk — en die arbeid en verwerkingstijd zijn wat de prijs weerspiegelt.
Wat maakte dit allemaal mogelijk?
FilmFix ontwikkelde eigen software met de naam CrossFrame. Meer details over wat die propriëtaire software biedt, volgen binnenkort.
· · ·
Hartelijke dank aan onze Zwitserse klant Steven Ganter, die ons toestemming gaf om dit beeldmateriaal te gebruiken — en die, nadat we zeer uitgebreid hadden gesproken over het proces en waar AI vandaag staat (hij heeft zelf een programmeerachtergrond), me met een eenvoudige vraag aanspoorde: “Bieden jullie interpolatie aan?” Nu wel!
Ook dank aan Tom Huebner voor zijn inspanningen voor deze blog.

