@nodetool-ai/video-nodes 0.8.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/.nodetool-build-stamp +1 -1
- package/dist/nodes/easeCurve.d.ts +52 -0
- package/dist/nodes/easeCurve.d.ts.map +1 -0
- package/dist/nodes/easeCurve.js +108 -0
- package/dist/nodes/easeCurve.js.map +1 -0
- package/dist/nodes/ffmpeg-helpers.d.ts +4 -0
- package/dist/nodes/ffmpeg-helpers.d.ts.map +1 -1
- package/dist/nodes/ffmpeg-helpers.js +18 -2
- package/dist/nodes/ffmpeg-helpers.js.map +1 -1
- package/dist/nodes/script.d.ts.map +1 -1
- package/dist/nodes/script.js +42 -16
- package/dist/nodes/script.js.map +1 -1
- package/dist/nodes/storyboard.d.ts +36 -7
- package/dist/nodes/storyboard.d.ts.map +1 -1
- package/dist/nodes/storyboard.js +222 -70
- package/dist/nodes/storyboard.js.map +1 -1
- package/dist/nodes/timeline/compositeRender.d.ts +17 -1
- package/dist/nodes/timeline/compositeRender.d.ts.map +1 -1
- package/dist/nodes/timeline/compositeRender.js +127 -104
- package/dist/nodes/timeline/compositeRender.js.map +1 -1
- package/dist/nodes/timeline/rawFrames.d.ts +10 -0
- package/dist/nodes/timeline/rawFrames.d.ts.map +1 -1
- package/dist/nodes/timeline/rawFrames.js +88 -4
- package/dist/nodes/timeline/rawFrames.js.map +1 -1
- package/dist/nodes/timeline.d.ts +1 -10
- package/dist/nodes/timeline.d.ts.map +1 -1
- package/dist/nodes/timeline.js +189 -68
- package/dist/nodes/timeline.js.map +1 -1
- package/dist/nodes/video.d.ts +22 -5
- package/dist/nodes/video.d.ts.map +1 -1
- package/dist/nodes/video.js +141 -4
- package/dist/nodes/video.js.map +1 -1
- package/package.json +10 -10
|
@@ -9,11 +9,12 @@
|
|
|
9
9
|
* clip media into RGBA and encodes the composited frames, in place of
|
|
10
10
|
* `<video>`/WebCodecs.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { ensureGoogleFonts } from "@nodetool-ai/timeline/fonts/google-node";
|
|
13
|
+
import { computeModel3DBakeHash } from "@nodetool-ai/timeline";
|
|
13
14
|
import { HeadlessFrameCompositor, clipSourceTimeSec, computeActiveLayersWithHorizon, createAnimationCompileCache, hasActiveAnimation, measureTextWith, motionBlurSampleTimes, layerShutterTime, resolveFrameMotionBlur, shutterWindowIsStatic, resolveAnimatedLayerProps, resolveTextStaggerContext, trackZ } from "@nodetool-ai/timeline/render";
|
|
14
15
|
import { createCanvas } from "@napi-rs/canvas";
|
|
15
16
|
import { setImmediate } from "node:timers/promises";
|
|
16
|
-
import {
|
|
17
|
+
import { decodeStillRgba, fitWithin, openFrameEncoder, openSourceFrameStream, probeVideoFrameRate, probeVideoSize } from "./rawFrames.js";
|
|
17
18
|
import { openPngSequenceEncoder } from "./pngSequence.js";
|
|
18
19
|
import { resolveTimelineOutput } from "./outputFormats.js";
|
|
19
20
|
import { NodeRasterizer } from "./rasterizers.js";
|
|
@@ -90,6 +91,7 @@ export async function renderTimelineComposited(opts) {
|
|
|
90
91
|
throw abortError();
|
|
91
92
|
const compositor = new HeadlessFrameCompositor(device, width, height);
|
|
92
93
|
compositor.setReferenceSize(referenceWidth, referenceHeight);
|
|
94
|
+
const { unavailable: fontsUnavailable } = await ensureGoogleFonts(sequence);
|
|
93
95
|
const rasterizer = new NodeRasterizer(referenceWidth, referenceHeight);
|
|
94
96
|
const frameIndices = opts.frames
|
|
95
97
|
? [...new Set(opts.frames)]
|
|
@@ -119,6 +121,24 @@ export async function renderTimelineComposited(opts) {
|
|
|
119
121
|
const images = new Map();
|
|
120
122
|
const assetPaths = new Map();
|
|
121
123
|
const skippedClips = new Set();
|
|
124
|
+
const diagnostics = [];
|
|
125
|
+
const latestDiagnostic = new Map();
|
|
126
|
+
const clipsById = new Map(sequence.clips.map((clip) => [clip.id, clip]));
|
|
127
|
+
const diagnose = (clipId, timeMs, reason, detail) => {
|
|
128
|
+
const startMs = Math.max(0, timeMs);
|
|
129
|
+
const endMs = Math.min(durationMs, startMs + frameMs);
|
|
130
|
+
const key = JSON.stringify([clipId, reason, detail]);
|
|
131
|
+
const previous = latestDiagnostic.get(key);
|
|
132
|
+
if (previous && startMs <= previous.endMs + 0.000001) {
|
|
133
|
+
previous.endMs = Math.max(previous.endMs, endMs);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const diagnostic = { clipId, startMs, endMs, reason, detail };
|
|
137
|
+
diagnostics.push(diagnostic);
|
|
138
|
+
latestDiagnostic.set(key, diagnostic);
|
|
139
|
+
}
|
|
140
|
+
skippedClips.add(clipsById.get(clipId)?.name ?? clipId);
|
|
141
|
+
};
|
|
122
142
|
const closeVideoSources = () => {
|
|
123
143
|
for (const source of videoSources.values())
|
|
124
144
|
source.close();
|
|
@@ -140,13 +160,8 @@ export async function renderTimelineComposited(opts) {
|
|
|
140
160
|
if (signal?.aborted)
|
|
141
161
|
throw abortError();
|
|
142
162
|
let decoded = null;
|
|
143
|
-
if (file)
|
|
144
|
-
|
|
145
|
-
if (signal?.aborted)
|
|
146
|
-
throw abortError();
|
|
147
|
-
if (size)
|
|
148
|
-
decoded = await decodeImageRgba(file, fitWithin(size, frameSize));
|
|
149
|
-
}
|
|
163
|
+
if (file)
|
|
164
|
+
decoded = await decodeStillRgba(file, frameSize);
|
|
150
165
|
if (signal?.aborted)
|
|
151
166
|
throw abortError();
|
|
152
167
|
images.set(assetId, decoded);
|
|
@@ -177,65 +192,36 @@ export async function renderTimelineComposited(opts) {
|
|
|
177
192
|
// shows at the cut.
|
|
178
193
|
const startSec = clipSourceTimeSec(clip, clip.startMs);
|
|
179
194
|
const endMs = clip.startMs + clip.durationMs;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
rgba,
|
|
211
|
-
version
|
|
212
|
-
};
|
|
213
|
-
},
|
|
214
|
-
close: () => stream.close()
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
const stream = openVideoFrameStream({
|
|
219
|
-
filePath: file,
|
|
220
|
-
size: decodeSize,
|
|
221
|
-
fps,
|
|
222
|
-
startSec,
|
|
223
|
-
speed: clip.speedBaked ? 1 : Math.max(0.0001, clip.speedMultiplier ?? 1)
|
|
224
|
-
});
|
|
225
|
-
source = {
|
|
226
|
-
width: stream.width,
|
|
227
|
-
height: stream.height,
|
|
228
|
-
endMs,
|
|
229
|
-
async frameAt(timeMs) {
|
|
230
|
-
const index = Math.max(0, Math.round(((timeMs - clip.startMs) * fps) / 1000));
|
|
231
|
-
const rgba = await stream.frameAt(index);
|
|
232
|
-
if (!rgba)
|
|
233
|
-
return null;
|
|
234
|
-
return { rgba, version: `${key}#${index}` };
|
|
235
|
-
},
|
|
236
|
-
close: () => stream.close()
|
|
237
|
-
};
|
|
238
|
-
}
|
|
195
|
+
const nativeFps = await probeVideoFrameRate(file);
|
|
196
|
+
const stream = openSourceFrameStream({
|
|
197
|
+
filePath: file,
|
|
198
|
+
size: decodeSize,
|
|
199
|
+
fps: nativeFps,
|
|
200
|
+
startSec,
|
|
201
|
+
nativeSampling: true
|
|
202
|
+
});
|
|
203
|
+
const frameVersions = new WeakMap();
|
|
204
|
+
let nextFrameVersion = 0;
|
|
205
|
+
const source = {
|
|
206
|
+
width: stream.width,
|
|
207
|
+
height: stream.height,
|
|
208
|
+
endMs,
|
|
209
|
+
async frameAt(timeMs) {
|
|
210
|
+
const sourceSec = clip.model3dStyle?.bake?.assetId === assetId
|
|
211
|
+
? Math.max(0, (timeMs - clip.startMs) / 1000)
|
|
212
|
+
: clipSourceTimeSec(clip, timeMs);
|
|
213
|
+
const rgba = await stream.frameAtSourceSec(sourceSec);
|
|
214
|
+
if (!rgba)
|
|
215
|
+
return null;
|
|
216
|
+
let version = frameVersions.get(rgba);
|
|
217
|
+
if (version === undefined) {
|
|
218
|
+
version = `${key}@${nextFrameVersion++}`;
|
|
219
|
+
frameVersions.set(rgba, version);
|
|
220
|
+
}
|
|
221
|
+
return { rgba, version };
|
|
222
|
+
},
|
|
223
|
+
close: () => stream.close()
|
|
224
|
+
};
|
|
239
225
|
videoSources.set(key, source);
|
|
240
226
|
return source;
|
|
241
227
|
};
|
|
@@ -249,14 +235,18 @@ export async function renderTimelineComposited(opts) {
|
|
|
249
235
|
*/
|
|
250
236
|
const sampleAt = async (timeMs, frameTimeMs = timeMs, sampleIndex = 0, sampleCount = 1) => {
|
|
251
237
|
const layers = [];
|
|
252
|
-
const { layers: active, adjustments, precomposites } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
|
|
238
|
+
const { layers: active, adjustments, precomposites, droppedLayers } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
|
|
253
239
|
canvas,
|
|
240
|
+
model3dBakeHash: (clip) => computeModel3DBakeHash(clip, sequence),
|
|
254
241
|
animationCache: animCache,
|
|
255
242
|
mediaTracks: sequence.mediaTracks,
|
|
256
243
|
camera2d: sequence.camera2d,
|
|
257
244
|
tempo: sequence.tempo,
|
|
258
245
|
layerTimeMs: (clip) => layerShutterTime(clip, frameTimeMs, sampleIndex, sampleCount, frameMs, output.motionBlur)
|
|
259
246
|
});
|
|
247
|
+
for (const dropped of droppedLayers) {
|
|
248
|
+
diagnose(dropped.clipId, frameTimeMs, "scene_drop", dropped.reason);
|
|
249
|
+
}
|
|
260
250
|
/**
|
|
261
251
|
* A resolved layer as something the compositor can upload: its pixels,
|
|
262
252
|
* its own shape mask rasterized at that size, and — for a matted layer —
|
|
@@ -298,7 +288,9 @@ export async function renderTimelineComposited(opts) {
|
|
|
298
288
|
const raster = rasterizer.caption(layer.caption);
|
|
299
289
|
if (!raster)
|
|
300
290
|
return null;
|
|
301
|
-
|
|
291
|
+
// No `finish`: the clip's shape mask belongs to its picture, and a
|
|
292
|
+
// caption has no layer space to mask in — the browser leaves it off.
|
|
293
|
+
return {
|
|
302
294
|
...common,
|
|
303
295
|
id: id("c"),
|
|
304
296
|
source: raster,
|
|
@@ -314,7 +306,7 @@ export async function renderTimelineComposited(opts) {
|
|
|
314
306
|
// here keeps its geometry — and a dip's one solid — off a layer
|
|
315
307
|
// that composites untransformed anyway.
|
|
316
308
|
transition: undefined
|
|
317
|
-
}
|
|
309
|
+
};
|
|
318
310
|
}
|
|
319
311
|
if (layer.kind === "text" && anim.textStyle) {
|
|
320
312
|
const stagger = resolveTextStaggerContext(layer.clip, layerTimeMs, canvas, animCache, sequence.tempo);
|
|
@@ -334,38 +326,60 @@ export async function renderTimelineComposited(opts) {
|
|
|
334
326
|
return null;
|
|
335
327
|
return finish({ ...common, id: id("s"), source: raster });
|
|
336
328
|
}
|
|
337
|
-
if (
|
|
329
|
+
if (layer.kind === "model3d") {
|
|
330
|
+
diagnose(layer.clipId, frameTimeMs, "unsupported_layer", "Live or stale-bake 3D requires a fresh bake before server export");
|
|
338
331
|
return null;
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
332
|
+
}
|
|
333
|
+
if (!layer.assetId) {
|
|
334
|
+
diagnose(layer.clipId, frameTimeMs, "missing_asset", "Active layer has no media asset");
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
if (!(await pathFor(layer.assetId))) {
|
|
338
|
+
diagnose(layer.clipId, frameTimeMs, "unavailable_media", "Media asset has no readable file");
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
if (layer.kind === "video") {
|
|
343
|
+
const stream = await videoFor(layer.clip, layer.assetId);
|
|
344
|
+
if (!stream) {
|
|
345
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Media has no video stream");
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
const decoded = await stream.frameAt(layerTimeMs);
|
|
349
|
+
if (!decoded) {
|
|
350
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Video decoder returned no frame");
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
return finish({
|
|
354
|
+
...common,
|
|
355
|
+
id: id("v"),
|
|
356
|
+
source: {
|
|
357
|
+
rgba: decoded.rgba,
|
|
358
|
+
width: stream.width,
|
|
359
|
+
height: stream.height,
|
|
360
|
+
version: decoded.version
|
|
361
|
+
}
|
|
362
|
+
});
|
|
344
363
|
}
|
|
345
|
-
const
|
|
346
|
-
if (!
|
|
364
|
+
const image = await imageFor(layer.assetId);
|
|
365
|
+
if (!image) {
|
|
366
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Image decoder returned no frame");
|
|
347
367
|
return null;
|
|
368
|
+
}
|
|
348
369
|
return finish({
|
|
349
370
|
...common,
|
|
350
|
-
id: id("
|
|
351
|
-
source: {
|
|
352
|
-
rgba: decoded.rgba,
|
|
353
|
-
width: stream.width,
|
|
354
|
-
height: stream.height,
|
|
355
|
-
version: decoded.version
|
|
356
|
-
}
|
|
371
|
+
id: id("i"),
|
|
372
|
+
source: { ...image, version: layer.assetId }
|
|
357
373
|
});
|
|
358
374
|
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
375
|
+
catch (error) {
|
|
376
|
+
if (signal?.aborted ||
|
|
377
|
+
(error instanceof Error && error.name === "MissingBinaryError")) {
|
|
378
|
+
throw error;
|
|
379
|
+
}
|
|
380
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", error instanceof Error ? error.message : String(error));
|
|
362
381
|
return null;
|
|
363
382
|
}
|
|
364
|
-
return finish({
|
|
365
|
-
...common,
|
|
366
|
-
id: id("i"),
|
|
367
|
-
source: { ...image, version: layer.assetId }
|
|
368
|
-
});
|
|
369
383
|
};
|
|
370
384
|
for (let index = 0; index < active.length; index++) {
|
|
371
385
|
if (index > 0 && index % YIELD_EVERY_LAYERS === 0) {
|
|
@@ -383,15 +397,17 @@ export async function renderTimelineComposited(opts) {
|
|
|
383
397
|
const source = await frameLayerFor(layer.matte.layer, "m:");
|
|
384
398
|
if (signal?.aborted)
|
|
385
399
|
throw abortError();
|
|
386
|
-
if (source) {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
invert: layer.matte.invert,
|
|
390
|
-
layer: source,
|
|
391
|
-
strength: layer.matte.strength,
|
|
392
|
-
featherPx: layer.matte.featherPx
|
|
393
|
-
};
|
|
400
|
+
if (!source) {
|
|
401
|
+
diagnose(layer.clipId, frameTimeMs, "decode_failure", "Required matte source could not be rendered");
|
|
402
|
+
continue;
|
|
394
403
|
}
|
|
404
|
+
built.matte = {
|
|
405
|
+
mode: layer.matte.mode,
|
|
406
|
+
invert: layer.matte.invert,
|
|
407
|
+
layer: source,
|
|
408
|
+
strength: layer.matte.strength,
|
|
409
|
+
featherPx: layer.matte.featherPx
|
|
410
|
+
};
|
|
395
411
|
}
|
|
396
412
|
layers.push(built);
|
|
397
413
|
}
|
|
@@ -403,7 +419,7 @@ export async function renderTimelineComposited(opts) {
|
|
|
403
419
|
opacity: adjustment.opacity,
|
|
404
420
|
effects: adjustment.effects,
|
|
405
421
|
shapeMask: adjustment.mask
|
|
406
|
-
? rasterizer.mask(adjustment.mask, referenceWidth, referenceHeight) ?? undefined
|
|
422
|
+
? (rasterizer.mask(adjustment.mask, referenceWidth, referenceHeight) ?? undefined)
|
|
407
423
|
: undefined,
|
|
408
424
|
wipe: adjustment.wipe,
|
|
409
425
|
precomposeGroupId: adjustment.precomposeGroupId
|
|
@@ -434,6 +450,7 @@ export async function renderTimelineComposited(opts) {
|
|
|
434
450
|
return false;
|
|
435
451
|
const { layers, adjustments } = computeActiveLayersWithHorizon(sequence.tracks, sequence.clips, timeMs, {
|
|
436
452
|
canvas,
|
|
453
|
+
model3dBakeHash: (clip) => computeModel3DBakeHash(clip, sequence),
|
|
437
454
|
animationCache: animCache,
|
|
438
455
|
mediaTracks: sequence.mediaTracks,
|
|
439
456
|
camera2d: sequence.camera2d,
|
|
@@ -493,7 +510,13 @@ export async function renderTimelineComposited(opts) {
|
|
|
493
510
|
throw abortError();
|
|
494
511
|
if (encoder)
|
|
495
512
|
await awaitWithAbort(encoder.finish(), signal);
|
|
496
|
-
return {
|
|
513
|
+
return {
|
|
514
|
+
complete: diagnostics.length === 0,
|
|
515
|
+
diagnostics,
|
|
516
|
+
totalFrames: frameIndices.length,
|
|
517
|
+
skippedClips: [...skippedClips],
|
|
518
|
+
fontsUnavailable
|
|
519
|
+
};
|
|
497
520
|
}
|
|
498
521
|
catch (error) {
|
|
499
522
|
encoder?.abort();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compositeRender.js","sourceRoot":"","sources":["../../../src/nodes/timeline/compositeRender.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compositeRender.js","sourceRoot":"","sources":["../../../src/nodes/timeline/compositeRender.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,8 +31,15 @@ export interface RawImage extends RawSize {
|
|
|
31
31
|
export declare function fitWithin(source: RawSize, canvas: RawSize): RawSize;
|
|
32
32
|
/** Probe a media file's video dimensions, or `null` when it has no video. */
|
|
33
33
|
export declare function probeVideoSize(filePath: string): Promise<RawSize | null>;
|
|
34
|
+
/** Native source rate used only for verified frame-grid caching. */
|
|
35
|
+
export declare function probeVideoFrameRate(filePath: string): Promise<number>;
|
|
34
36
|
/** Decode a still image to straight-alpha RGBA at `size`. */
|
|
35
37
|
export declare function decodeImageRgba(filePath: string, size: RawSize): Promise<RawImage>;
|
|
38
|
+
/**
|
|
39
|
+
* Decode a still fitted inside `canvas`, or `null` when ffprobe finds no
|
|
40
|
+
* picture in it.
|
|
41
|
+
*/
|
|
42
|
+
export declare function decodeStillRgba(filePath: string, canvas: RawSize): Promise<RawImage | null>;
|
|
36
43
|
/**
|
|
37
44
|
* A clip's frames, decoded on demand in timeline order.
|
|
38
45
|
*
|
|
@@ -56,6 +63,7 @@ interface VideoFrameStreamOptions {
|
|
|
56
63
|
startSec: number;
|
|
57
64
|
/** Playback rate: >1 consumes the source faster than the timeline. */
|
|
58
65
|
speed: number;
|
|
66
|
+
nativeSampling?: boolean;
|
|
59
67
|
}
|
|
60
68
|
/**
|
|
61
69
|
* Start decoding `filePath` into RGBA frames at the timeline's frame rate.
|
|
@@ -96,6 +104,8 @@ export declare function openSourceFrameStream(opts: {
|
|
|
96
104
|
size: RawSize;
|
|
97
105
|
fps: number;
|
|
98
106
|
startSec: number;
|
|
107
|
+
/** Preserve native frames instead of resampling onto the requested grid. */
|
|
108
|
+
nativeSampling?: boolean;
|
|
99
109
|
/** Maximum decoded bytes retained in one reverse window. */
|
|
100
110
|
maxWindowBytes?: number;
|
|
101
111
|
/** Maximum source-time span retained in one reverse window. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rawFrames.d.ts","sourceRoot":"","sources":["../../../src/nodes/timeline/rawFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"rawFrames.d.ts","sourceRoot":"","sources":["../../../src/nodes/timeline/rawFrames.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
* encoder.
|
|
15
15
|
*/
|
|
16
16
|
import { spawn } from "node:child_process";
|
|
17
|
+
import { open, readFile } from "node:fs/promises";
|
|
18
|
+
import { createCanvas, loadImage } from "@napi-rs/canvas";
|
|
17
19
|
import { MissingBinaryError, execFfmpeg, execFfprobe } from "../ffmpeg-helpers.js";
|
|
18
20
|
/**
|
|
19
21
|
* Largest size that fits `source` inside `canvas` without upscaling and
|
|
@@ -46,6 +48,24 @@ export async function probeVideoSize(filePath) {
|
|
|
46
48
|
return null;
|
|
47
49
|
return { width: Number(match[1]), height: Number(match[2]) };
|
|
48
50
|
}
|
|
51
|
+
/** Native source rate used only for verified frame-grid caching. */
|
|
52
|
+
export async function probeVideoFrameRate(filePath) {
|
|
53
|
+
const { stdout } = await execFfprobe([
|
|
54
|
+
"-v",
|
|
55
|
+
"error",
|
|
56
|
+
"-select_streams",
|
|
57
|
+
"v:0",
|
|
58
|
+
"-show_entries",
|
|
59
|
+
"stream=avg_frame_rate",
|
|
60
|
+
"-of",
|
|
61
|
+
"default=noprint_wrappers=1:nokey=1",
|
|
62
|
+
filePath
|
|
63
|
+
]);
|
|
64
|
+
const [numerator, denominator = "1"] = stdout.trim().split("/");
|
|
65
|
+
const rate = Number(numerator) / Number(denominator);
|
|
66
|
+
// An unknown grid disables caching; exact timestamp seeks still work.
|
|
67
|
+
return Number.isFinite(rate) && rate > 0 ? rate : 1;
|
|
68
|
+
}
|
|
49
69
|
function spawnFfmpeg(args) {
|
|
50
70
|
return spawn("ffmpeg", args, { stdio: ["pipe", "pipe", "pipe"] });
|
|
51
71
|
}
|
|
@@ -94,6 +114,52 @@ export async function decodeImageRgba(filePath, size) {
|
|
|
94
114
|
}
|
|
95
115
|
return { rgba: rgba.subarray(0, expected), ...size };
|
|
96
116
|
}
|
|
117
|
+
/** Whether `filePath` holds SVG markup. Stored assets often have no extension. */
|
|
118
|
+
async function isSvgFile(filePath) {
|
|
119
|
+
const handle = await open(filePath, "r");
|
|
120
|
+
try {
|
|
121
|
+
const head = Buffer.alloc(4096);
|
|
122
|
+
const { bytesRead } = await handle.read(head, 0, head.length, 0);
|
|
123
|
+
const text = head.subarray(0, bytesRead).toString("utf8").replace(/^\uFEFF/, "");
|
|
124
|
+
return text.trimStart().startsWith("<") && /<svg[\s>]/i.test(text);
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
await handle.close();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Rasterize an SVG with Skia. Many ffmpeg builds (Homebrew's default among
|
|
132
|
+
* them) have no SVG decoder, and a logo is the usual SVG on a timeline. The
|
|
133
|
+
* intrinsic size plays the role a raster's pixel size does in {@link fitWithin}.
|
|
134
|
+
*/
|
|
135
|
+
async function rasterizeSvg(filePath, canvas) {
|
|
136
|
+
let image;
|
|
137
|
+
try {
|
|
138
|
+
image = await loadImage(await readFile(filePath));
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
throw new Error(`Could not rasterize SVG ${filePath}: ${error.message}`);
|
|
142
|
+
}
|
|
143
|
+
if (!(image.width > 0 && image.height > 0)) {
|
|
144
|
+
throw new Error(`Could not rasterize SVG ${filePath}: it has no size`);
|
|
145
|
+
}
|
|
146
|
+
const size = fitWithin({ width: image.width, height: image.height }, canvas);
|
|
147
|
+
const surface = createCanvas(size.width, size.height);
|
|
148
|
+
const context = surface.getContext("2d");
|
|
149
|
+
context.drawImage(image, 0, 0, size.width, size.height);
|
|
150
|
+
const { data } = context.getImageData(0, 0, size.width, size.height);
|
|
151
|
+
return { rgba: new Uint8Array(data.buffer, data.byteOffset, data.byteLength), ...size };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Decode a still fitted inside `canvas`, or `null` when ffprobe finds no
|
|
155
|
+
* picture in it.
|
|
156
|
+
*/
|
|
157
|
+
export async function decodeStillRgba(filePath, canvas) {
|
|
158
|
+
if (await isSvgFile(filePath))
|
|
159
|
+
return rasterizeSvg(filePath, canvas);
|
|
160
|
+
const size = await probeVideoSize(filePath);
|
|
161
|
+
return size ? decodeImageRgba(filePath, fitWithin(size, canvas)) : null;
|
|
162
|
+
}
|
|
97
163
|
/** How many decoded frames ffmpeg may run ahead of the consumer. */
|
|
98
164
|
const READAHEAD_FRAMES = 4;
|
|
99
165
|
/**
|
|
@@ -105,7 +171,7 @@ export function openVideoFrameStream(opts) {
|
|
|
105
171
|
const { filePath, size, fps, startSec, speed } = opts;
|
|
106
172
|
const filters = [
|
|
107
173
|
speed !== 1 ? `setpts=PTS/${speed}` : null,
|
|
108
|
-
`fps=${fps}`,
|
|
174
|
+
opts.nativeSampling ? null : `fps=${fps}`,
|
|
109
175
|
`scale=${size.width}:${size.height}`,
|
|
110
176
|
"format=rgba"
|
|
111
177
|
].filter((f) => f !== null);
|
|
@@ -117,6 +183,7 @@ export function openVideoFrameStream(opts) {
|
|
|
117
183
|
filePath,
|
|
118
184
|
"-vf",
|
|
119
185
|
filters.join(","),
|
|
186
|
+
...(opts.nativeSampling ? ["-fps_mode", "passthrough"] : []),
|
|
120
187
|
"-f",
|
|
121
188
|
"rawvideo",
|
|
122
189
|
"-pix_fmt",
|
|
@@ -160,6 +227,12 @@ export function openVideoFrameStream(opts) {
|
|
|
160
227
|
}
|
|
161
228
|
};
|
|
162
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* How long the grid probe may run. A miss falls back to a fresh seek per
|
|
232
|
+
* frame, so the budget must hold on a loaded machine: a 1s budget expired on
|
|
233
|
+
* CI for a 60-frame clip and turned every reverse read into a reopen.
|
|
234
|
+
*/
|
|
235
|
+
const GRID_PROBE_TIMEOUT_MS = 10_000;
|
|
163
236
|
/** Only a verified regular source grid can be indexed inside a decode window. */
|
|
164
237
|
async function hasRegularFrameGrid(filePath, fps, signal) {
|
|
165
238
|
if (signal.aborted)
|
|
@@ -184,7 +257,7 @@ async function hasRegularFrameGrid(filePath, fps, signal) {
|
|
|
184
257
|
child.kill("SIGKILL");
|
|
185
258
|
finish(null);
|
|
186
259
|
};
|
|
187
|
-
const deadline = setTimeout(cancel,
|
|
260
|
+
const deadline = setTimeout(cancel, GRID_PROBE_TIMEOUT_MS);
|
|
188
261
|
signal.addEventListener("abort", cancel, { once: true });
|
|
189
262
|
child.stdout.on("data", (chunk) => {
|
|
190
263
|
bytes += chunk.length;
|
|
@@ -243,7 +316,12 @@ export function openSourceFrameStream(opts) {
|
|
|
243
316
|
const probeController = new AbortController();
|
|
244
317
|
const regularGrid = hasRegularFrameGrid(filePath, fps, probeController.signal);
|
|
245
318
|
const openAt = (sec) => openVideoFrameStream({
|
|
246
|
-
filePath,
|
|
319
|
+
filePath,
|
|
320
|
+
size,
|
|
321
|
+
fps,
|
|
322
|
+
startSec: sec,
|
|
323
|
+
speed: 1,
|
|
324
|
+
nativeSampling: opts.nativeSampling
|
|
247
325
|
});
|
|
248
326
|
const replaceStream = (sec) => {
|
|
249
327
|
if (stream) {
|
|
@@ -283,7 +361,13 @@ export function openSourceFrameStream(opts) {
|
|
|
283
361
|
reverseWindow = [];
|
|
284
362
|
decodedIndex = -1;
|
|
285
363
|
}
|
|
286
|
-
|
|
364
|
+
let frame = await active.frameAt(0);
|
|
365
|
+
if (!frame && target > 0) {
|
|
366
|
+
// A fresh seek beyond EOF has no frame to hold. Decode to the end
|
|
367
|
+
// instead of reusing whichever earlier frame the caller requested.
|
|
368
|
+
active = replaceStream(0);
|
|
369
|
+
frame = await active.frameAt(Number.MAX_SAFE_INTEGER);
|
|
370
|
+
}
|
|
287
371
|
if (closed)
|
|
288
372
|
return null;
|
|
289
373
|
if (frame)
|