Help

This web application uses a WASM port of FFmpeg to extract streams from video files.

This project begun as an experiment to provide a way to render Matroska files in browsers by extracting their streams and remuxing into MP4 containers (formally ISO/IEC 14496-14:2003) since at that time most browsers did not supported rendering of videos using the Matroska container but allowed videos that used the MP4 container.

The project was eventually abandoned, but since the extraction part seemed useful this version that uses FFmpeg as a basis was created. Now it supports extracting more kinds of streams, have more options and also supports extracting streams from MP4 files.

FAQ

Why does it require JavaScript?
Because no file is ever uploaded to any server, the application works entirely in the browser.
Why no support for specifying an URL?
Because it works in a browser and in most cases pages cannot access contents from another webpages (see Same-origin policy ) so implementing a way to extract files from URLs for the rare cases where websites allow their contents to be accessed by others is not worth it.
Why some file of mine is not working?
This project is a work in progress. See the error log and, if you really think the issue is in the application and not your file which is corrupted, open an issue in GitHub.
Why some streams are extracted to MP4 or MKV files?
To reduce FFmpeg build sizes it does not include muxers to formats such as H264 and H265. If you think that's worth to a certain muxer to be included then open an issue in GitHub.
Why I can't extract to the Downloads folder?
Because if you allow access to the Downloads folder to any website it might try to read your downloads and leak your data and sadly the current specification of the thing that handles it does not have any mechanism to avoid that other than blocking entirely access to that folder. Create a new folder and use it instead. By the way Firefox and many other browsers does not implement that thing because, as you may guess, despite it being quite useful for developers, it opens a security can of worms. Also Chromium blocks the "~" character from file names even if it's not a reserved character in most file systems , which is really weird and accounted for in this application.
Why FFmpeg?
The original plan was to take the original mkvextract code and compile it to WASM, but using FFmpeg seemed easier since there are some WASM implementations of it already.
Why Svelte?
I wanted to try it. I still don't like how it handles reactivity, it reminds me of Mithril: both Mithril and Svelte have certain cases where changes are not detected automatically (changes in non-tracked asynchronous functions and changes in objects/arrays respectively), requiring manual workarounds, Vue is better in this regard as it uses proxies that allow it to always detects changes (at the cost of performance, which is negligible for this application). Also styles being scoped by default caused more headaches than I had expected.
Why this design looks so corporate?
Because it's IBM's Carbon Design: I was looking for a Svelte component library with lots of components and dark mode, I was also tired from Material Design, so I chose this one.