[{"data":1,"prerenderedAt":238},["ShallowReactive",2],{"post-\u002Fblog\u002Fmediabunny":3},{"id":4,"title":5,"body":6,"date":229,"description":230,"extension":231,"meta":232,"navigation":92,"path":233,"seo":234,"sitemap":235,"stem":236,"__hash__":237},"blog\u002Fblog\u002Fmediabunny.md","MediaBunny: Native Speed",{"type":7,"value":8,"toc":226},"minimark",[9,13,16,24,29,32,55,219,222],[10,11,12],"p",{},"Processing video in the browser usually involves a 20MB WASM blob and a prayer. We've been forcing desktop tools into web tabs for too long.",[10,14,15],{},"It's heavy, it's slow, and it kills your user's battery.",[10,17,18,19,23],{},"Mediabunny is the answer to the ",[20,21,22],"code",{},"ffmpeg.wasm"," fatigue. It’s a zero-dependency, tree-shakable TypeScript library that actually respects the browser environment.",[25,26,28],"h3",{"id":27},"how-it-works","How it works",[10,30,31],{},"It uses the WebCodecs API directly. No emulation layer. Just raw performance.",[33,34,35,43,49],"ol",{},[36,37,38,42],"li",{},[39,40,41],"strong",{},"Read:"," Extract metadata or frames instantly.",[36,44,45,48],{},[39,46,47],{},"Write:"," Generate MP4\u002FWebM files client-side.",[36,50,51,54],{},[39,52,53],{},"Convert:"," Transmux and transcode without melting the CPU.",[56,57,62],"pre",{"className":58,"code":59,"language":60,"meta":61,"style":61},"language-typescript shiki shiki-themes github-light github-dark","import { Input, UrlSource, ALL_FORMATS } from 'mediabunny';\n\nconst input = new Input({\n  source: new UrlSource('.\u002Fvideo.mp4'),\n  formats: ALL_FORMATS,\n});\n\n\u002F\u002F Get metadata instantly without loading the whole file\nconst { duration } = await input.computeDuration();\nconsole.log(`Duration: ${duration}s`);\n","typescript","",[20,63,64,87,94,117,138,150,156,161,168,197],{"__ignoreMap":61},[65,66,69,73,77,80,84],"span",{"class":67,"line":68},"line",1,[65,70,72],{"class":71},"szBVR","import",[65,74,76],{"class":75},"sVt8B"," { Input, UrlSource, ALL_FORMATS } ",[65,78,79],{"class":71},"from",[65,81,83],{"class":82},"sZZnC"," 'mediabunny'",[65,85,86],{"class":75},";\n",[65,88,90],{"class":67,"line":89},2,[65,91,93],{"emptyLinePlaceholder":92},true,"\n",[65,95,97,100,104,107,110,114],{"class":67,"line":96},3,[65,98,99],{"class":71},"const",[65,101,103],{"class":102},"sj4cs"," input",[65,105,106],{"class":71}," =",[65,108,109],{"class":71}," new",[65,111,113],{"class":112},"sScJk"," Input",[65,115,116],{"class":75},"({\n",[65,118,120,123,126,129,132,135],{"class":67,"line":119},4,[65,121,122],{"class":75},"  source: ",[65,124,125],{"class":71},"new",[65,127,128],{"class":112}," UrlSource",[65,130,131],{"class":75},"(",[65,133,134],{"class":82},"'.\u002Fvideo.mp4'",[65,136,137],{"class":75},"),\n",[65,139,141,144,147],{"class":67,"line":140},5,[65,142,143],{"class":75},"  formats: ",[65,145,146],{"class":102},"ALL_FORMATS",[65,148,149],{"class":75},",\n",[65,151,153],{"class":67,"line":152},6,[65,154,155],{"class":75},"});\n",[65,157,159],{"class":67,"line":158},7,[65,160,93],{"emptyLinePlaceholder":92},[65,162,164],{"class":67,"line":163},8,[65,165,167],{"class":166},"sJ8bj","\u002F\u002F Get metadata instantly without loading the whole file\n",[65,169,171,173,176,179,182,185,188,191,194],{"class":67,"line":170},9,[65,172,99],{"class":71},[65,174,175],{"class":75}," { ",[65,177,178],{"class":102},"duration",[65,180,181],{"class":75}," } ",[65,183,184],{"class":71},"=",[65,186,187],{"class":71}," await",[65,189,190],{"class":75}," input.",[65,192,193],{"class":112},"computeDuration",[65,195,196],{"class":75},"();\n",[65,198,200,203,206,208,211,213,216],{"class":67,"line":199},10,[65,201,202],{"class":75},"console.",[65,204,205],{"class":112},"log",[65,207,131],{"class":75},[65,209,210],{"class":82},"`Duration: ${",[65,212,178],{"class":75},[65,214,215],{"class":82},"}s`",[65,217,218],{"class":75},");\n",[10,220,221],{},"Stop shipping massive binaries for simple media tasks.",[223,224,225],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":61,"searchDepth":89,"depth":89,"links":227},[228],{"id":27,"depth":96,"text":28},"2025-12-13","Video processing without the lag","md",{},"\u002Fblog\u002Fmediabunny",{"title":5,"description":230},{"loc":233},"blog\u002Fmediabunny","F4nEJeOb7cMZtJrxoMvtZUs5jDwtps6qkVc2Huf2DxI",1783186628091]