UNPKG

@visactor/vmind

Version:

<div align="center"> <a href="https://github.com/VisActor#gh-light-mode-only" target="_blank"> <img alt="VisActor Logo" width="200" src="https://github.com/VisActor/.github/blob/main/profile/logo_500_200_light.svg"/> </a> <a href="https://githu

97 lines (94 loc) 4.36 kB
var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; import { cloneDeep } from "@visactor/vutils"; let idx = 0; export function _chatToVideoWasm(fps, propsSpec, propsTime, outName = "out", outerPackages, mode) { var _a, _b; return __awaiter(this, void 0, void 0, (function*() { const {ManualTicker: ManualTicker, defaultTimeline: defaultTimeline, VChart: VChart, fetchFile: fetchFile, FFmpeg: FFmpeg, createCanvas: createCanvas} = outerPackages; idx++; const defaultTicker = new ManualTicker, spec = cloneDeep(propsSpec), time = cloneDeep(propsTime), {totalTime: totalTime, frameArr: frameArr} = time, width = null !== (_a = spec.width) && void 0 !== _a ? _a : 720, height = null !== (_b = spec.height) && void 0 !== _b ? _b : 480; spec.width = width, spec.height = height, frameArr && frameArr.length && spec.player && (spec.player.auto = !1), defaultTicker.mode = "manual"; const canvas = createCanvas(width, height), vchart = new VChart(spec, { renderCanvas: canvas, mode: "node", dpr: 1, disableDirtyBounds: !0, ticker: defaultTicker, options3d: { enable: !0, alpha: 0, beta: 0, center: { x: 1030, y: 300 }, fieldRatio: .8, light: { dir: [ 3, -2, -1 ], color: "white", ambient: .7 } } }), stage = vchart.getStage(); stage.ticker = defaultTicker, stage.ticker.addTimeline(defaultTimeline), yield vchart.renderAsync(); const frame = totalTime / 1e3 * fps + 1, player = vchart.getComponents().filter((d => "player" === d.type))[0], shouldControlPlayer = player && frameArr && frameArr.length, t = 1e3 / fps; let nextFrameTime = 0; shouldControlPlayer && (nextFrameTime = frameArr.shift()); for (let i = 0; i <= frame; i++) { shouldControlPlayer && t * i > nextFrameTime && (nextFrameTime += frameArr.shift() || 0, player._playerComponent.forward()), defaultTicker.tickTo(t * i), vchart.getStage().render(); const num = `0000${i}`.slice(-3); if ("node" === mode) { const buffer = canvas.toBuffer(); FFmpeg.FS("writeFile", `vchart${idx}.${num}.png`, buffer); } else { const size = { width: canvas.width, height: canvas.height }, blob = yield new Promise(((resolve, reject) => { canvas.toBlob((blob => { if (blob) { resolve({ data: blob, format: "PNG", size: size }); } else reject("no blob"); }), "image/png"); })); FFmpeg.FS("writeFile", `vchart${idx}.${num}.png`, yield fetchFile(blob.data)); } } vchart.release(), yield FFmpeg.run("-framerate", "30", "-pattern_type", "glob", "-i", "*.png", "-c:v", "libx264", "-pix_fmt", "yuv420p", `${outName}.mp4`); for (let i = 0; i <= frame; i++) { const num = `0000${i}`.slice(-3); FFmpeg.FS("unlink", `vchart${idx}.${num}.png`); } })); } //# sourceMappingURL=video.js.map