transavormer
Version:
Transform (transcode, transmux, etc) audio/video formats using libav.js and WebCodecs
74 lines (67 loc) • 2.97 kB
HTML
<!--
* This (un)license applies only to this sample code, and not to TransAVormer as
* a whole:
*
* This is free and unencumbered software released into the public domain.
*
* Anyone is free to copy, modify, publish, use, compile, sell, or distribute
* this software, either in source code form or as a compiled binary, for any
* purpose, commercial or non-commercial, and by any means.
*
* In jurisdictions that recognize copyright laws, the author or authors of
* this software dedicate any and all copyright interest in the software to the
* public domain. We make this dedication for the benefit of the public at
* large and to the detriment of our heirs and successors. We intend this
* dedication to be an overt act of relinquishment in perpetuity of all present
* and future rights to this software under copyright law.
*
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-->
<html>
<head>
<meta charset="utf8" />
<title>Transmuxing demo</title>
</head>
<body>
<script type="text/javascript" src="../node_modules/@libav.js/variant-webcodecs-avf/dist/libav-webcodecs-avf.js"></script>
<script type="text/javascript" src="../dist/transavormer.js"></script>
<input type="file" id="file" />
<script type="text/javascript">(function() {
const tav = TransAVormer;
const fileBox = document.getElementById("file");
fileBox.onchange = async function() {
const file = fileBox.files[0];
if (!file)
return;
const la = await LibAV.LibAV();
const out = await tav.build(la, {
type: "muxer",
format: "matroska",
input: file
});
const outParts = [];
const rdr = out.stream.getReader();
while (true) {
const rd = await rdr.read();
if (rd.done) break;
outParts.push(rd.value.data);
}
la.terminate();
const outBlob = new File(outParts, "out.mkv", {type: "video/x-matroska"});
const outURL = URL.createObjectURL(outBlob);
const a = document.createElement("a");
a.style.display = "block";
a.href = outURL;
a.innerText = "Output";
document.body.appendChild(a);
}
})();
</script>
</body>
</html>