Add VP8, VP9 and AV1 support to MP4 demuxer

This commit is contained in:
David Payr
2024-12-29 22:31:40 +01:00
parent 53231e5a55
commit 6fbb57cf7c
5 changed files with 192 additions and 11 deletions
+35
View File
@@ -16,6 +16,40 @@
const videoTrack = await input.getPrimaryVideoTrack();
const drain = new Metamuxer.VideoFrameDrain(videoTrack);
const target = new Metamuxer.ArrayBufferTarget();
const format = new Metamuxer.Mp4OutputFormat();
const output = new Metamuxer.Output({ target, format });
const mediaSource = new Metamuxer.VideoFrameSource({
codec: 'av1',
bitrate: 1e6
});
output.addVideoTrack(mediaSource);
output.start();
for await (const frame of drain.frames(0, 10)) {
console.log(frame.timestamp, frame.duration)
await mediaSource.digest(frame);
frame.close();
}
await output.finalize();
function download(blob, filename) {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}
download(new Blob([target.buffer]), 'converted.mp4');
/*
const videoTrack = await input.getPrimaryVideoTrack();
const drain = new Metamuxer.VideoFrameDrain(videoTrack);
async function* timestamps() {
const fromTime = 0;
const toTime = await videoTrack.computeDuration();
@@ -50,6 +84,7 @@
console.log(clone)
}
console.log("done")
*/
/*
const videoTrack = await input.getPrimaryVideoTrack();
+2
View File
@@ -203,6 +203,8 @@ async function runAudioIterator() {
}
function formatSeconds(seconds) {
seconds = Math.round(seconds * 1000) / 1000; // Round to milliseconds
const minutes = Math.floor(seconds / 60);
const remainingSeconds = Math.floor(seconds % 60);
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}.${Math.floor(1000 * seconds % 1000).toString().padStart(3, '0')}`;