@omnimedia/omnitool
Version:
open source video processing tools
61 lines (51 loc) • 1.27 kB
text/typescript
import {Driver} from "../../driver/driver.js"
import {DecoderSource} from "../../driver/fns/schematic.js"
export function setupTranscodeTest(driver: Driver, source: DecoderSource) {
const dimensions = {width: 1920, height: 1080}
const canvas = document.createElement("canvas")
canvas.width = dimensions.width
canvas.height = dimensions.height
const ctx = canvas.getContext("2d")
async function run() {
const video = driver.decodeVideo({
source,
async onFrame(frame) {
const composed = await driver.composite([
{
id: 0,
kind: "image",
frame
},
{
id: 1,
kind: "text",
content: "omnitool",
style: {
fontSize: 50,
fill: "green"
}
}
])
frame.close()
ctx?.drawImage(composed, 0, 0)
return composed
}
})
const audio = driver.decodeAudio({source})
const {readable, done} = driver.encode({
video: video.readable,
audio: audio.readable,
config: {
audio: {codec: "opus", bitrate: 128000},
video: {codec: "vp9", bitrate: 1000000}
}
})
const handle = await window.showSaveFilePicker()
const writable = await handle.createWritable()
await Promise.all([
readable.pipeTo(writable),
done
])
}
return {canvas, run}
}