Kent får AVI-filer til å klikke, for kunstens skyld

Koder glitch-effekter inn i videoer i Rust. - Det er kult å arbeide på byte-nivå, sier Kent Daleng bak "avirus".

I klippet over har Kent manipulert den kjente åpen-kildekode-filmen Big Buck Bunny. 🎬 Kent DalengVis merVis mer Vis mer Vis mer Vis mer Vis mer Vis mer Vis mer

Det var en tid, for ikke så innmari lenge siden, at fortstyrrelser i videofiler ikke var så uvanlig. Jeg synes å huske at mine piratkopierte divx-filmer titt og stadig glitchet ut i de rareste former. Det varte som regel ikke mer enn et par sekunder, og ofte skyldtes det en dårlig nedlastet Torrent.

Og det var absolutt ikke noe jeg ønsket å ha i videoene mine!

Da er det litt rart at vi sitter her i 2019, med en fyr som faktisk gjenskaper denne effekten med vilje.

Til vanlig studerer 28 år gamle Kent Daleng IT- og informasjonssystemer på Universitetet i Agder. Etter sommeren skal han begynne som fulltidsutvikler i Nav.

Men på fritida, fikler han med AVI-filer. Med noen ganske morsomme resultater. Kode24 har snakket med Kent om hvordan han skaper glitche-videoer med hobbyprosjektet "avirus".

#1. Hva har du bygd, og hvorfor?

Jeg bygger et bibliotek skrevet i Rust for å manipulere AVI-filer på kontainernivå. Biblioteket abstraherer et dataområde i AVI-filer som holder styr på rekkefølgen av bilder til en liste av bilder. Dette er et område separat fra faktisk bildedata og codecnivå.

Hvert "bilde" kan identifiseres som en keyframe, deltaframe - en slags diff, data som kun forteller hvor regioner har flyttet seg og blitt introdusert siden forrige bilde, og som "audioframe".

Kent Daleng lager AVI-glitchevideoer på fritiden og studerer på Universitetet i Agder på dagtid. 📸: Privat
Kent Daleng lager AVI-glitchevideoer på fritiden og studerer på Universitetet i Agder på dagtid. 📸: Privat Vis mer

Lyd og video håndteres i en og samme liste. Dersom elementer i denne listen blir lagt i en annen rekkefølge, vil videospillere forsøke å spille av filen i den rekkefølgen. Som oftest blir det merkelig og glitchy.

Jeg har bygget dette for et par grunner; først og fremst syns jeg at glitch art er kult. å arbeide på byte-nivå og lese spesifikasjonsdokumenter er interessant, Rust er et kult språk, og jeg hadde ønsker om å lære mer om det i praksis. Det er egentlig ikke så mye Rust-spesifikt - ikke noe fearless concurrency enda - jeg har gjort i prosjektet, men all trening er god trening!

#2. Hvor lenge har du jobbet med dette hobbyprosjektet?

Biblioteket er i grunn basert på et bibliotek i Ruby: AviGlitch. I 2016 begynte jeg arbeid på å lage en versjon skrevet i Python fordi jeg ønsket å bruke Python i stedet for Ruby for å produsere den typen glitch art.

I 2018 brukte jeg ca. en måned på å lage denne versjonen i Rust. Vanligvis jobber jeg med ting på siden på ettermiddagen og kvelden, og siden det er på hobbybasis er det kun når jeg har idéer og inspirasjon at jeg arbeider med det.

I dette klippet har Kent glitchet til et klipp fra lederen av den kjente amerikanske kulten Heavens Gate. Nesten litt Twin Peaks-aktig. 🎬 Kent DalengVis merVis mer Vis mer Vis mer Vis mer Vis mer Vis mer

#3. Hvordan henger prosjektet sammen?

Prosjektet er ganske enkelt satt opp med minimalt av avhengigheter. Som nevnt er prosjektet skrevet i Rust, den eneste avhengigheten utover det er et bibliotek som heter Byteorder.

#4. Hva har vært den største utfordringen hittil?

Jeg strevet veldig med Python-versjonen. Jeg sleit lenge med skriveoperasjonen etter filen var manipulert; gigantiske, ubrukelige filer ble skrevet på grunn av en løkke som ikke stoppet når den skulle.

Til slutt skjer det som ofte skjer, fiksen var bare 4 linjer lang og tydelig åpenbar. I Rust-versjonen har jeg ikke hatt utrolig store utfordringer, i grunn. Mange løsninger ble skrevet om fra Python til Rust ganske enkelt; et Python-objekt blir struct + impl i Rust. Klart, når man lager noe i et forholdsvis ukjent språk vil det alltid oppstå utfordringer, men det løses oftest med litt grundigere gjennomgang av dokumentasjon!

Denne videoen har Kent kalt awoo. 🎬Kent Daleng Vis merVis mer Vis mer

#5. Hva er du mest stolt av i forbindelse med prosjektet?

Jeg er mest stolt av hvor enkelt prosjektet er! Det er bare et forholdsvis enkelt lag mellom en AVI-fil og Rust, og mesteparten av kompleksiteten vil ligge i hva enn folk gjør i forbindelse med algoritmer for å manipulere bildesekvensen. Jeg er også fornøyd med error-håndteringen og dokumentasjonen så langt.

Slik ser skjermen til Kent ut når han arbeider. 📸: Privat
Slik ser skjermen til Kent ut når han arbeider. 📸: Privat Vis mer

#6. Bruker du prosjektet til noe spesielt i dag?

Jeg bruker ikke prosjektet aktivt, men det er alltid gøy å tulle litt med en video nå og da.

«Av og til drar jeg meg ut av senga igjen bare for å få skrevet det ned før jeg glemmer det.»

#7. Hva er fordelene med å ha et hobbyprosjekt?

Jeg tror det beste med å ha et hobbyprosjekt er at man kan være oppfinnsom. Jeg er egentlig ganske kreativ av natur, og har alltid satt pris på hvordan kode kan skrives på en kreativ måte. Spesielt prosessen ved å forbedre noe.

Man tror man har håndtert problemet greit, men så kommer tankene om mulige forbedringer når man ikke har så enkel tilgang til datamaskin: I dusjen, når man ligger i senga om kvelden...

Av og til drar jeg meg ut av senga igjen bare for å få skrevet det ned før jeg glemmer det.

Det er ikke bare Kent som liker glitchevideoer. Kanye West brukte selv effekten i musikkvideoen Welcome to Heartbreak fra 2008. Vis mer Vis mer Vis mer
Artisten A$AP Rocky brukte også glitche-effekt i en musikkvideo i 2016.Vis merVis mer Vis mer

#8. Har du noen planer for prosjektet ditt fremover?

Ja, i skrivende stund leses hele AVI-filen til minne. Jeg ønsker å strømme data fra fil når jeg trenger det i stedet.

Et annet ønske jeg har er å eksponere biblioteket til Python, slik at jeg kan bruke dets funksjoner til å lese og prosessere bildesekvensen. Python-siden kan da definere algoritmer for hvordan bildesekvensen prosesseres. Akkurat nå må man skrive et Rust-program hvor man definerer prosesseringsalgoritmen, kompilere det, og så kjøre det for å faktisk prosessere. Det føles som om at et script-språk passer bedre til akkurat den delen.

Jeg har ikke hatt så mye tid til å tenke på prosjektet siden jeg har bachelorprosjekt og arbeid ved siden, men kanskje til sommeren!

#9. Har du noen planer for å gjøre det tilgjengelig for andre?

Det er allerede tilgjengelig for andre via GitHub, og enkelt gjennom Rust's pakkebehandler, Cargo.