PageSourceSearch

https://ffmpegwasm.netlify.app/assets/js/1f5929fc.31b1dc76.js

js ffmpegwasm.netlify.app collected 2026-10-03 10:45:27 UTC 22,422 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8103],{876:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var a=n(2784);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f=a.createContext({}),m=function(e){var t=a.useContext(f),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=m(e.components);return a.createElement(f.Provider,{value:t},e.children)},c="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,f=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=m(n),d=o,u=c["".concat(f,".").concat(d)]||c[d]||l[d]||s;return n?a.createElement(u,r(r({ref:t},p),{},{components:n})):a.createElement(u,r({ref:t},p))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,r=new Array(s);r[0]=d;var i={};for(var f in t)hasOwnProperty.call(t,f)&&(i[f]=t[f]);i.originalType=e,i[c]="string"==typeof e?e:o,r[1]=i;for(var m=2;m<s;m++)r[m]=n[m];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},2917:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>m});var a=n(7896),o=(n(2784),n(876));const s={},r="Usage",i={unversionedId:"getting-started/usage",id:"getting-started/usage",title:"Usage",description:"Learn the basics of using ffmpeg.wasm.",source:"@site/docs/getting-started/usage.md",sourceDirName:"getting-started",slug:"/getting-started/usage",permalink:"/docs/getting-started/usage",draft:!1,editUrl:"https://github.com/ffmpegwasm/ffmpeg.wasm/tree/main/apps/website/docs/getting-started/usage.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/docs/getting-started/installation"},next:{title:"Examples",permalink:"/docs/getting-started/examples"}},f={},m=[{value:"Transcode webm to mp4 video",id:"transcode-webm-to-mp4-video",level:2},{value:"Transcode webm to mp4 video (multi-thread)",id:"transcode-webm-to-mp4-video-multi-thread",level:2},{value:"Transcode video with timeout",id:"transcode-video-with-timeout",level:2},{value:"Transcode video with progress (experimental)",id:"transcode-video-with-progress-experimental",level:2},{value:"Split video into segments of equal duration",id:"split-video-into-segments-of-equal-duration",level:2},{value:"Display Text on the video",id:"display-text-on-the-video",level:2},{value:"Interlace 2 Videos",id:"interlace-2-videos",level:2},{value:"Use WORKERFS",id:"use-workerfs",level:2}],p={toc:m},c="wrapper";function l({components:e,...t}){return(0,o.kt)(c,(0,a.Z)({},p,t,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"usage"},"Usage"),(0,o.kt)("p",null,"Learn the basics of using ffmpeg.wasm."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"It is recommended to read ",(0,o.kt)("a",{parentName:"p",href:"/docs/overview"},"Overview")," first.")),(0,o.kt)("h2",{id:"transcode-webm-to-mp4-video"},"Transcode webm to mp4 video"),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"If you are a ",(0,o.kt)("a",{parentName:"p",href:"https://vitejs.dev/"},"vite")," user, use ",(0,o.kt)("inlineCode",{parentName:"p"},"esm")," in ",(0,o.kt)("strong",{parentName:"p"},"baseURL")," instead of ",(0,o.kt)("inlineCode",{parentName:"p"},"umd"),":"),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("del",{parentName:"p"},(0,o.kt)("a",{parentName:"del",href:"https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd"},"https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd"))," => ",(0,o.kt)("a",{parentName:"p",href:"https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/esm"},"https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/esm"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-jsx",metastring:"live",live:!0},"// import { FFmpeg } from '@ffmpeg/ffmpeg';\n// import { fetchFile, toBlobURL } from '@ffmpeg/util';
1\nfunction() {\n    const [loaded, setLoaded] = useState(false);\n    const ffmpegRef = useRef(new FFmpeg());\n    const videoRef = useRef(null);\n    const messageRef = useRef(null);\n\n    const load = async () => {\n        const baseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd'\n        const ffmpeg = ffmpegRef.current;\n        ffmpeg.on('log', ({ message }) => {\n            messageRef.current.innerHTML = message;\n            console.log(message);\n        });\n        // toBlobURL is used to bypass CORS issue, urls with the same\n        // domain can be used directly.\n        await ffmpeg.load({\n            coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n            wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'),\n        });\n        setLoaded(true);\n    }\n\n    const transcode = async () => {\n        const ffmpeg = ffmpegRef.current;\n        await ffmpeg.writeFile('input.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm'));\n        await ffmpeg.exec(['-i', 'input.webm', 'output.mp4']);\n        const data = await ffmpeg.readFile('output.mp4');\n        videoRef.current.src =\n            URL.createObjectURL(new Blob([data.buffer], {type: 'video/mp4'}));\n    }\n\n    return (loaded\n        ? (\n            <>\n                <video ref={videoRef} controls></video><br/>\n                <button onClick={transcode}>Transcode webm to mp4</button>\n                <p ref={messageRef}></p>\n                <p>Open Developer Tools (Ctrl+Shift+I) to View Logs</p>\n            </>\n        )\n        : (\n            <button onClick={load}>Load ffmpeg-core (~31 MB)</button>\n        )\n    );\n}\n")),(0,o.kt)("h2",{id:"transcode-webm-to-mp4-video-multi-thread"},"Transcode webm to mp4 video (multi-thread)"),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"As SharedArrayBuffer is required for multithread version, make sure\nyou have have fulfilled ",(0,o.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements"},"Security Requirements"),".")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-jsx",metastring:"live",live:!0},"// import { FFmpeg } from '@ffmpeg/ffmpeg';\n// import { fetchFile, toBlobURL } from '@ffmpeg/util';\nfunction() {\n    const [loaded, setLoaded] = useState(false);\n    const ffmpegRef = useRef(new FFmpeg());\n    const videoRef = useRef(null);\n    const messageRef = useRef(null);\n\n    const load = async () => {\n        const baseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd'\n        const ffmpeg = ffmpegRef.current;\n        ffmpeg.on('log', ({ message }) => {\n            messageRef.current.innerHTML = message;\n            console.log(message);\n        });\n        // toBlobURL is used to bypass CORS issue, urls with the same\n        // domain can be used directly.\n        await ffmpeg.load({\n            coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n            wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'),\n            workerURL: await toBlobURL(`${baseURL}/ffmpeg-core.worker.js`, 'text/javascript'),\n        });\n        setLoaded(true);\n    }\n\n    const transcode = async () => {\n        const ffmpeg = ffmpegRef.current;\n        await ffmpeg.writeFile('input.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm'));\n        await ffmpeg.exec(['-i', 'input.webm', 'output.mp4']);\n        const data = await ffmpeg.readFile('output.mp4');\n        videoRef.current.src =\n            URL.createObjectURL(new Blob([data.buffer], {type: 'video/mp4'}));\n    }\n\n    return (loaded\n        ? (\n            <>\n                <video ref={videoRef} controls></video><br/>\n                <button onClick={transcode}>Transcode webm to mp4</button>\n                <p ref={messageRef}></p>\n                <p>
1Open Developer Tools (Ctrl+Shift+I) to View Logs</p>\n            </>\n        )\n        : (\n            <button onClick={load}>Load ffmpeg-core (~31 MB)</button>\n        )\n    );\n}\n")),(0,o.kt)("h2",{id:"transcode-video-with-timeout"},"Transcode video with timeout"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-jsx",metastring:"live",live:!0},"// import { FFmpeg } from '@ffmpeg/ffmpeg';\n// import { fetchFile } from '@ffmpeg/util';\nfunction() {\n    const [loaded, setLoaded] = useState(false);\n    const ffmpegRef = useRef(new FFmpeg());\n    const videoRef = useRef(null);\n    const messageRef = useRef(null);\n\n    const load = async () => {\n        const baseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd'\n        const ffmpeg = ffmpegRef.current;\n        ffmpeg.on('log', ({ message }) => {\n            messageRef.current.innerHTML = message;\n            console.log(message);\n        });\n        // toBlobURL is used to bypass CORS issue, urls with the same\n        // domain can be used directly.\n        await ffmpeg.load({\n            coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n            wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'),\n        });\n        setLoaded(true);\n    }\n\n    const transcode = async () => {\n        const ffmpeg = ffmpegRef.current;\n        await ffmpeg.writeFile('input.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm'));\n        // The exec should stop after 1 second.\n        await ffmpeg.exec(['-i', 'input.webm', 'output.mp4'], 1000);\n        const data = await ffmpeg.readFile('output.mp4');\n        videoRef.current.src =\n            URL.createObjectURL(new Blob([data.buffer], {type: 'video/mp4'}));\n    }\n\n    return (loaded\n        ? (\n            <>\n                <video ref={videoRef} controls></video><br/>\n                <button onClick={transcode}>Transcode webm to mp4</button>\n                <p ref={messageRef}></p>\n                <p>Open Developer Tools (Ctrl+Shift+I) to View Logs</p>\n            </>\n        )\n        : (\n            <button onClick={load}>Load ffmpeg-core (~31 MB)</button>\n        )\n    );\n}\n")),(0,o.kt)("h2",{id:"transcode-video-with-progress-experimental"},"Transcode video with progress (experimental)"),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"progress")," is an experimental feature and might not work for many cases\n(ex. concat video files, convert image files, ...). Please use with caution.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-jsx",metastring:"live",live:!0},"// import { FFmpeg } from '@ffmpeg/ffmpeg';\n// import { fetchFile } from '@ffmpeg/util';\nfunction() {\n    const [loaded, setLoaded] = useState(false);\n    const ffmpegRef = useRef(new FFmpeg());\n    const videoRef = useRef(null);\n    const messageRef = useRef(null);\n\n    const load = async () => {\n        const baseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd'\n        const ffmpeg = ffmpegRef.current;\n        // Listen to progress event instead of log.\n        ffmpeg.on('progress', ({ progress, time }) => {\n            messageRef.current.innerHTML = `${progress * 100} % (transcoded time: ${time / 1000000} s)`;\n        });\n        // toBlobURL is used to bypass CORS issue, urls with the same\n        // domain can be used directly.\n        await ffmpeg.load({\n            coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n            wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'),\n        });\n        setLoaded(true);\n    }\n\n    const transcode = async () => {\n        const ffmpeg = ffmpegRef.current;\n        await ffmpeg.writeFile('input.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm'));\n        await ffmpeg.exec(['-i', 'input.webm', 'output.mp4']);\n        const data = await ffmpeg.readFile('output.mp4');\n        videoRef.current.src =\n            URL.createObjectURL(new Blob([data.buffer], {type: 'video/mp4'}));\n    }\n\n    return (loaded\n        ? (\n            <>\n                <video ref={videoRef} controls></video><br/>\n                <button onClick={transcode}>Transcode webm to mp4</button>\n                <p ref={messageRef}></p>\n            </>\n        )\n        : (\n            <button onClick={load}>Load ffmpeg-core (~31 MB)</button>\n        )\n    );\n}\n")),(0,o.kt)("h2",{id:"split-video-into-segments-of-equal-duration"},"Split video into segments of equal duration"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-jsx",metastring:"live",live:!0},"// import { FFmpeg } from '@ffmpeg/ffmpeg';\n// import { fetchFile } from '@ffmpeg/util';
1\nfunction() {\n    const [loaded, setLoaded] = useState(false);\n    const ffmpegRef = useRef(new FFmpeg());\n    const videoRef = useRef(null);\n    const messageRef = useRef(null);\n\n    const load = async () => {\n        const baseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd'\n        const ffmpeg = ffmpegRef.current;\n        ffmpeg.on('log', ({ message }) => {\n            messageRef.current.innerHTML = message;\n            console.log(message);\n        });\n        // toBlobURL is used to bypass CORS issue, urls with the same\n        // domain can be used directly.\n        await ffmpeg.load({\n            coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n            wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'),\n        });\n        setLoaded(true);\n    }\n\n    const transcode = async () => {\n        const ffmpeg = ffmpegRef.current;\n        await ffmpeg.writeFile('input.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm'));\n        await ffmpeg.exec([\n            '-i',\n            'input.webm',\n            '-f',\n            'segment',\n            '-segment_time',\n            '3',\n            '-g',\n            '9',\n            '-sc_threshold',\n            '0',\n            '-force_key_frames',\n            'expr:gte(t,n_forced*9)',\n            '-reset_timestamps',\n            '1',\n            '-map',\n            '0',\n            'output_%d.mp4'\n        ]);\n        const data = await ffmpeg.readFile('output_1.mp4');\n        videoRef.current.src =\n            URL.createObjectURL(new Blob([data.buffer], {type: 'video/mp4'}));\n    }\n\n    return (loaded\n        ? (\n            <>\n                <video ref={videoRef} controls></video><br/>\n                <button onClick={transcode}>Split video to segments of 3 sec. and plays 2nd segment</button>\n                <p ref={messageRef}></p>\n                <p>Open Developer Tools (Ctrl+Shift+I) to View Logs</p>\n            </>\n        )\n        : (\n            <button onClick={load}>Load ffmpeg-core (~31 MB)</button>\n        )\n    );\n}\n")),(0,o.kt)("h2",{id:"display-text-on-the-video"},"Display Text on the video"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-jsx",metastring:"live",live:!0},"// import { FFmpeg } from '@ffmpeg/ffmpeg';\n// import { fetchFile } from '@ffmpeg/util';\nfunction() {\n    const [loaded, setLoaded] = useState(false);\n    const ffmpegRef = useRef(new FFmpeg());\n    const videoRef = useRef(null);\n    const messageRef = useRef(null);\n\n    const load = async () => {\n        const baseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd'\n        const ffmpeg = ffmpegRef.current;\n        ffmpeg.on('log', ({ message }) => {\n            messageRef.current.innerHTML = message;\n            console.log(message);\n        });\n        // toBlobURL is used to bypass CORS issue, urls with the same\n        // domain can be used directly.\n        await ffmpeg.load({\n            coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n            wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'),\n        });\n        setLoaded(true);\n    }\n\n    const transcode = async () => {\n        const ffmpeg = ffmpegRef.current;\n        await ffmpeg.writeFile('input.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm'));\n        await ffmpeg.writeFile('arial.ttf', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/arial.ttf'));\n        await ffmpeg.exec([\n            '-i',\n            'input.webm',\n            '-vf',\n            'drawtext=fontfile=/arial.ttf:text=\\'ffmpeg.wasm\\':x=10:y=10:fontsize=24:fontcolor=white',\n            'output.mp4',\n        ]);\n        const data = await ffmpeg.readFile('output.mp4');\n        videoRef.current.src =\n            URL.createObjectURL(new Blob([data.buffer], {type: 'video/mp4'}));\n    }\n\n    return (loaded\n        ? (\n            <>\n                <video ref={videoRef} controls></video><br/>\n                <button onClick={transcode}>Transcode webm to mp4 with text</button>\n                <p ref={messageRef}></p>\n                <p>
1Open Developer Tools (Ctrl+Shift+I) to View Logs</p>\n            </>\n        )\n        : (\n            <button onClick={load}>Load ffmpeg-core (~31 MB)</button>\n        )\n    );\n}\n")),(0,o.kt)("h2",{id:"interlace-2-videos"},"Interlace 2 Videos"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-jsx",metastring:"live",live:!0},"// import { FFmpeg } from '@ffmpeg/ffmpeg';\n// import { fetchFile } from '@ffmpeg/util';\nfunction() {\n    const [loaded, setLoaded] = useState(false);\n    const ffmpegRef = useRef(new FFmpeg());\n    const videoRef = useRef(null);\n    const messageRef = useRef(null);\n\n    const load = async () => {\n        const baseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/[email protected]/dist/umd'\n        const ffmpeg = ffmpegRef.current;\n        ffmpeg.on('log', ({ message }) => {\n            messageRef.current.innerHTML = message;\n            console.log(message);\n        });\n        // toBlobURL is used to bypass CORS issue, urls with the same\n        // domain can be used directly.\n        await ffmpeg.load({\n            coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n            wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'),\n        });\n        setLoaded(true);\n    }\n\n    const transcode = async () => {\n        const ffmpeg = ffmpegRef.current;\n        await ffmpeg.writeFile('input.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm'));\n        await ffmpeg.writeFile('reversed.webm', await fetchFile('https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s_reversed.webm'));\n        await ffmpeg.exec([\n            '-i',\n            'input.webm',\n            '-i',\n            'reversed.webm',\n            '-filter_complex',\n            '[0:v][1:v]blend=all_expr=\\'A*(if(eq(0,N/2),1,T))+B*(if(eq(0,N/2),T,1))\\'',\n            'output.mp4',\n        ]);\n        const data = await ffmpeg.readFile('output.mp4');\n        videoRef.current.src =\n            URL.createObjectURL(new Blob([data.buffer], {type: 'video/mp4'}));\n    }\n\n    return (loaded\n        ? (\n            <>\n                <video ref={videoRef} controls></video><br/>\n                <button onClick={transcode}>Interlace two webm video to mp4</button>\n                <p ref={messageRef}></p>\n                <p>Open Developer Tools (Ctrl+Shift+I) to View Logs</p>\n            </>\n        )\n        : (\n            <button onClick={load}>Load ffmpeg-core (~31 MB)</button>\n        )\n    );\n}\n")),(0,o.kt)("h2",{id:"use-workerfs"},"Use WORKERFS"),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Required:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"@ffmpeg/",(0,o.kt)("a",{parentName:"li",href:"mailto:[email protected]"},"[email protected]"),"+"),(0,o.kt)("li",{parentName:"ul"},"@ffmpeg/",(0,o.kt)("a",{parentName:"li",href:"mailto:[email protected]"},"[email protected]"),"+\n:::")),(0,o.kt)("p",{parentName:"admonition"},"Please Check this PR: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/ffmpegwasm/ffmpeg.wasm/pull/581"},"Add WORKERFS support")),(0,o.kt)("h2",{parentName:"admonition",id:"abort-exec-with-signal"},"Abort exec() with signal")),(0,o.kt)("p",null,"Required:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"@ffmpeg/",(0,o.kt)("a",{parentName:"li",href:"mailto:[email protected]"},"[email protected]"),"+"),(0,o.kt)("li",{parentName:"ul"},"@ffmpeg/",(0,o.kt)("a",{parentName:"li",href:"mailto:[email protected]"},"[email protected]"),"+\n:::")),(0,o.kt)("p",null,"Please check this PR: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/ffmpegwasm/ffmpeg.wasm/pull/573"},"abort signal")))}l.isMDXComponent=!0}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.