@remotion/timeline-utils 4.0.513 → 4.0.515
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/dist/audio-waveform/audio-waveform-worker-types.d.ts +9 -20
- package/dist/audio-waveform/get-visible-waveform-volume.d.ts +8 -0
- package/dist/audio-waveform/get-visible-waveform-volume.js +36 -0
- package/dist/audio-waveform/slice-visible-waveform-peaks.d.ts +11 -0
- package/dist/audio-waveform/slice-visible-waveform-peaks.js +46 -0
- package/dist/audio-waveform/subscribe-to-waveform-peaks.d.ts +5 -0
- package/dist/audio-waveform/subscribe-to-waveform-peaks.js +148 -0
- package/dist/audio-waveform-worker.js +24 -99
- package/dist/esm/audio-waveform-worker.mjs +19 -233
- package/dist/esm/index.mjs +345 -81
- package/dist/extract-frames.js +24 -14
- package/dist/image-thumbnail/draw-repeating-image-thumbnail.d.ts +2 -1
- package/dist/image-thumbnail/draw-repeating-image-thumbnail.js +2 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.js +13 -8
- package/dist/loop-display.d.ts +11 -0
- package/dist/loop-display.js +36 -1
- package/package.json +5 -4
package/dist/index.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resizeVideoFrame = exports.renderFrameStripToCanvas = exports.
|
|
3
|
+
exports.resizeVideoFrame = exports.renderFrameStripToCanvas = exports.getDurationOfOneFrame = exports.fillWithCachedFrames = exports.fillFrameWhereItFits = exports.ensureSlots = exports.drawSlot = exports.calculateTimestampSlots = exports.WEBCODECS_TIMESCALE = exports.shouldTileLoopDisplay = exports.getLoopDisplayWidth = exports.getLoopDisplaySegments = exports.getScaledImageThumbnailDimensions = exports.drawRepeatingImageThumbnail = exports.makeFrameDatabaseKey = exports.getTimestampFromFrameDatabaseKey = exports.getFrameDatabaseKeyPrefix = exports.getAspectRatioFromCache = exports.frameDatabase = exports.aspectRatioCache = exports.addFrameToCache = exports.extractFrames = exports.clampTimestampsToDuration = exports.emitWaveformProgress = exports.createWaveformPeakProcessor = exports.sliceWaveformPeaks = exports.subscribeToWaveformPeaks = exports.sliceVisibleWaveformPeaks = exports.loadWaveformPeaks = exports.getVisibleWaveformVolume = exports.drawBars = exports.TARGET_SAMPLE_RATE = void 0;
|
|
4
4
|
const constants_1 = require("./audio-waveform/constants");
|
|
5
5
|
Object.defineProperty(exports, "TARGET_SAMPLE_RATE", { enumerable: true, get: function () { return constants_1.TARGET_SAMPLE_RATE; } });
|
|
6
6
|
const draw_peaks_1 = require("./audio-waveform/draw-peaks");
|
|
7
7
|
Object.defineProperty(exports, "drawBars", { enumerable: true, get: function () { return draw_peaks_1.drawBars; } });
|
|
8
|
+
const get_visible_waveform_volume_1 = require("./audio-waveform/get-visible-waveform-volume");
|
|
9
|
+
Object.defineProperty(exports, "getVisibleWaveformVolume", { enumerable: true, get: function () { return get_visible_waveform_volume_1.getVisibleWaveformVolume; } });
|
|
8
10
|
const load_waveform_peaks_1 = require("./audio-waveform/load-waveform-peaks");
|
|
9
11
|
Object.defineProperty(exports, "loadWaveformPeaks", { enumerable: true, get: function () { return load_waveform_peaks_1.loadWaveformPeaks; } });
|
|
10
|
-
const
|
|
11
|
-
Object.defineProperty(exports, "
|
|
12
|
+
const slice_visible_waveform_peaks_1 = require("./audio-waveform/slice-visible-waveform-peaks");
|
|
13
|
+
Object.defineProperty(exports, "sliceVisibleWaveformPeaks", { enumerable: true, get: function () { return slice_visible_waveform_peaks_1.sliceVisibleWaveformPeaks; } });
|
|
14
|
+
const subscribe_to_waveform_peaks_1 = require("./audio-waveform/subscribe-to-waveform-peaks");
|
|
15
|
+
Object.defineProperty(exports, "subscribeToWaveformPeaks", { enumerable: true, get: function () { return subscribe_to_waveform_peaks_1.subscribeToWaveformPeaks; } });
|
|
12
16
|
const slice_waveform_peaks_1 = require("./audio-waveform/slice-waveform-peaks");
|
|
13
17
|
Object.defineProperty(exports, "sliceWaveformPeaks", { enumerable: true, get: function () { return slice_waveform_peaks_1.sliceWaveformPeaks; } });
|
|
14
18
|
const waveform_peak_processor_1 = require("./audio-waveform/waveform-peak-processor");
|
|
15
19
|
Object.defineProperty(exports, "createWaveformPeakProcessor", { enumerable: true, get: function () { return waveform_peak_processor_1.createWaveformPeakProcessor; } });
|
|
16
20
|
Object.defineProperty(exports, "emitWaveformProgress", { enumerable: true, get: function () { return waveform_peak_processor_1.emitWaveformProgress; } });
|
|
17
|
-
const draw_repeating_image_thumbnail_1 = require("./image-thumbnail/draw-repeating-image-thumbnail");
|
|
18
|
-
Object.defineProperty(exports, "drawRepeatingImageThumbnail", { enumerable: true, get: function () { return draw_repeating_image_thumbnail_1.drawRepeatingImageThumbnail; } });
|
|
19
|
-
const get_scaled_image_thumbnail_dimensions_1 = require("./image-thumbnail/get-scaled-image-thumbnail-dimensions");
|
|
20
|
-
Object.defineProperty(exports, "getScaledImageThumbnailDimensions", { enumerable: true, get: function () { return get_scaled_image_thumbnail_dimensions_1.getScaledImageThumbnailDimensions; } });
|
|
21
21
|
const clamp_timestamps_to_duration_1 = require("./clamp-timestamps-to-duration");
|
|
22
22
|
Object.defineProperty(exports, "clampTimestampsToDuration", { enumerable: true, get: function () { return clamp_timestamps_to_duration_1.clampTimestampsToDuration; } });
|
|
23
23
|
const extract_frames_1 = require("./extract-frames");
|
|
@@ -30,17 +30,22 @@ Object.defineProperty(exports, "getAspectRatioFromCache", { enumerable: true, ge
|
|
|
30
30
|
Object.defineProperty(exports, "getFrameDatabaseKeyPrefix", { enumerable: true, get: function () { return frame_database_1.getFrameDatabaseKeyPrefix; } });
|
|
31
31
|
Object.defineProperty(exports, "getTimestampFromFrameDatabaseKey", { enumerable: true, get: function () { return frame_database_1.getTimestampFromFrameDatabaseKey; } });
|
|
32
32
|
Object.defineProperty(exports, "makeFrameDatabaseKey", { enumerable: true, get: function () { return frame_database_1.makeFrameDatabaseKey; } });
|
|
33
|
+
const draw_repeating_image_thumbnail_1 = require("./image-thumbnail/draw-repeating-image-thumbnail");
|
|
34
|
+
Object.defineProperty(exports, "drawRepeatingImageThumbnail", { enumerable: true, get: function () { return draw_repeating_image_thumbnail_1.drawRepeatingImageThumbnail; } });
|
|
35
|
+
const get_scaled_image_thumbnail_dimensions_1 = require("./image-thumbnail/get-scaled-image-thumbnail-dimensions");
|
|
36
|
+
Object.defineProperty(exports, "getScaledImageThumbnailDimensions", { enumerable: true, get: function () { return get_scaled_image_thumbnail_dimensions_1.getScaledImageThumbnailDimensions; } });
|
|
33
37
|
const loop_display_1 = require("./loop-display");
|
|
38
|
+
Object.defineProperty(exports, "getLoopDisplaySegments", { enumerable: true, get: function () { return loop_display_1.getLoopDisplaySegments; } });
|
|
34
39
|
Object.defineProperty(exports, "getLoopDisplayWidth", { enumerable: true, get: function () { return loop_display_1.getLoopDisplayWidth; } });
|
|
35
40
|
Object.defineProperty(exports, "shouldTileLoopDisplay", { enumerable: true, get: function () { return loop_display_1.shouldTileLoopDisplay; } });
|
|
36
41
|
const render_frame_strip_1 = require("./render-frame-strip");
|
|
42
|
+
Object.defineProperty(exports, "WEBCODECS_TIMESCALE", { enumerable: true, get: function () { return render_frame_strip_1.WEBCODECS_TIMESCALE; } });
|
|
37
43
|
Object.defineProperty(exports, "calculateTimestampSlots", { enumerable: true, get: function () { return render_frame_strip_1.calculateTimestampSlots; } });
|
|
38
44
|
Object.defineProperty(exports, "drawSlot", { enumerable: true, get: function () { return render_frame_strip_1.drawSlot; } });
|
|
39
45
|
Object.defineProperty(exports, "ensureSlots", { enumerable: true, get: function () { return render_frame_strip_1.ensureSlots; } });
|
|
40
46
|
Object.defineProperty(exports, "fillFrameWhereItFits", { enumerable: true, get: function () { return render_frame_strip_1.fillFrameWhereItFits; } });
|
|
41
47
|
Object.defineProperty(exports, "fillWithCachedFrames", { enumerable: true, get: function () { return render_frame_strip_1.fillWithCachedFrames; } });
|
|
42
48
|
Object.defineProperty(exports, "getDurationOfOneFrame", { enumerable: true, get: function () { return render_frame_strip_1.getDurationOfOneFrame; } });
|
|
43
|
-
Object.defineProperty(exports, "WEBCODECS_TIMESCALE", { enumerable: true, get: function () { return render_frame_strip_1.WEBCODECS_TIMESCALE; } });
|
|
44
49
|
const render_frame_strip_to_canvas_1 = require("./render-frame-strip-to-canvas");
|
|
45
50
|
Object.defineProperty(exports, "renderFrameStripToCanvas", { enumerable: true, get: function () { return render_frame_strip_to_canvas_1.renderFrameStripToCanvas; } });
|
|
46
51
|
const resize_video_frame_1 = require("./resize-video-frame");
|
package/dist/loop-display.d.ts
CHANGED
|
@@ -4,6 +4,17 @@ export type TimelineLoopDisplay = {
|
|
|
4
4
|
startOffset: number;
|
|
5
5
|
};
|
|
6
6
|
export declare const shouldTileLoopDisplay: (loopDisplay: TimelineLoopDisplay | undefined) => loopDisplay is TimelineLoopDisplay;
|
|
7
|
+
export type LoopDisplaySegment = {
|
|
8
|
+
loopIndex: number;
|
|
9
|
+
absoluteOffsetInFrames: number;
|
|
10
|
+
loopOffsetInFrames: number;
|
|
11
|
+
durationInFrames: number;
|
|
12
|
+
};
|
|
13
|
+
export declare const getLoopDisplaySegments: ({ displayDurationInFrames, displayOffsetInFrames, loopDurationInFrames, }: {
|
|
14
|
+
readonly displayDurationInFrames: number;
|
|
15
|
+
readonly displayOffsetInFrames: number;
|
|
16
|
+
readonly loopDurationInFrames: number;
|
|
17
|
+
}) => LoopDisplaySegment[];
|
|
7
18
|
export declare const getLoopDisplayWidth: ({ visualizationWidth, loopDisplay, }: {
|
|
8
19
|
visualizationWidth: number;
|
|
9
20
|
loopDisplay: TimelineLoopDisplay | undefined;
|
package/dist/loop-display.js
CHANGED
|
@@ -1,10 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLoopDisplayWidth = exports.shouldTileLoopDisplay = void 0;
|
|
3
|
+
exports.getLoopDisplayWidth = exports.getLoopDisplaySegments = exports.shouldTileLoopDisplay = void 0;
|
|
4
4
|
const shouldTileLoopDisplay = (loopDisplay) => {
|
|
5
5
|
return loopDisplay !== undefined && loopDisplay.numberOfTimes > 1;
|
|
6
6
|
};
|
|
7
7
|
exports.shouldTileLoopDisplay = shouldTileLoopDisplay;
|
|
8
|
+
// Computes the visible loop segments by loop index instead of accumulating
|
|
9
|
+
// floating-point segment durations. With fractional display offsets (e.g. from
|
|
10
|
+
// horizontal timeline virtualization), an accumulating `processed += segment`
|
|
11
|
+
// loop can stall once the residue is smaller than the ULP of `processed`,
|
|
12
|
+
// growing arrays unboundedly until the tab runs out of memory.
|
|
13
|
+
const getLoopDisplaySegments = ({ displayDurationInFrames, displayOffsetInFrames, loopDurationInFrames, }) => {
|
|
14
|
+
if (!Number.isFinite(displayDurationInFrames) ||
|
|
15
|
+
displayDurationInFrames <= 0 ||
|
|
16
|
+
!Number.isFinite(displayOffsetInFrames) ||
|
|
17
|
+
!Number.isFinite(loopDurationInFrames) ||
|
|
18
|
+
loopDurationInFrames <= 0) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
const displayEndInFrames = displayOffsetInFrames + displayDurationInFrames;
|
|
22
|
+
const firstLoopIndex = Math.floor(displayOffsetInFrames / loopDurationInFrames);
|
|
23
|
+
const lastLoopIndex = Math.floor(displayEndInFrames / loopDurationInFrames);
|
|
24
|
+
const segments = [];
|
|
25
|
+
for (let loopIndex = firstLoopIndex; loopIndex <= lastLoopIndex; loopIndex++) {
|
|
26
|
+
const loopStartInFrames = loopIndex * loopDurationInFrames;
|
|
27
|
+
const segmentStart = Math.max(displayOffsetInFrames, loopStartInFrames);
|
|
28
|
+
const segmentEnd = Math.min(displayEndInFrames, loopStartInFrames + loopDurationInFrames);
|
|
29
|
+
const durationInFrames = segmentEnd - segmentStart;
|
|
30
|
+
if (durationInFrames <= 0) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
segments.push({
|
|
34
|
+
loopIndex,
|
|
35
|
+
absoluteOffsetInFrames: segmentStart,
|
|
36
|
+
loopOffsetInFrames: segmentStart - loopStartInFrames,
|
|
37
|
+
durationInFrames,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return segments;
|
|
41
|
+
};
|
|
42
|
+
exports.getLoopDisplaySegments = getLoopDisplaySegments;
|
|
8
43
|
const getLoopDisplayWidth = ({ visualizationWidth, loopDisplay, }) => {
|
|
9
44
|
if (!(0, exports.shouldTileLoopDisplay)(loopDisplay)) {
|
|
10
45
|
return visualizationWidth;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/timeline-utils"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/timeline-utils",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.515",
|
|
7
7
|
"description": "Internal utilities for rendering Remotion timelines",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"scripts": {
|
|
@@ -21,11 +21,12 @@
|
|
|
21
21
|
"url": "https://github.com/remotion-dev/remotion/issues"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"mediabunny": "1.
|
|
24
|
+
"mediabunny": "1.55.1",
|
|
25
|
+
"remotion": "4.0.515"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
|
-
"@mediabunny/server": "1.
|
|
28
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
28
|
+
"@mediabunny/server": "1.55.1",
|
|
29
|
+
"@remotion/eslint-config-internal": "4.0.515",
|
|
29
30
|
"eslint": "9.19.0",
|
|
30
31
|
"@typescript/native-preview": "7.0.0-dev.20260217.1"
|
|
31
32
|
},
|