UNPKG

@remotion/renderer

Version:

Render Remotion videos using Node.js or Bun

51 lines (50 loc) 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderPartitions = void 0; const renderPartitions = ({ frames, concurrency, }) => { const partitions = []; let start = 0; for (let i = 0; i < concurrency; i++) { const end = start + Math.ceil((frames.length - start) / (concurrency - i)); partitions.push(frames.slice(start, end)); start = end; } return { partitions, getNextFrame: (pageIndex) => { if (partitions[pageIndex].length === 0) { const partitionLengths = partitions.map((p) => p.length); if (partitionLengths.every((p) => p === 0)) { throw new Error('No more frames to render'); } let longestRemainingPartitionIndex = -1; for (let i = 0; i < partitions.length; i++) { if (longestRemainingPartitionIndex === -1) { longestRemainingPartitionIndex = i; continue; } if (partitions[i].length > partitions[longestRemainingPartitionIndex].length) { longestRemainingPartitionIndex = i; } } if (longestRemainingPartitionIndex === -1) { throw new Error('No more frames to render'); } // Round up - let's say only one frame is left to render, we should take this one const slicePoint = Math.ceil(partitions[longestRemainingPartitionIndex].length / 2) - // but don't forget it's zero indexed :) 1; partitions[pageIndex] = partitions[longestRemainingPartitionIndex].slice(slicePoint); partitions[longestRemainingPartitionIndex] = partitions[longestRemainingPartitionIndex].slice(0, slicePoint); } const value = partitions[pageIndex].shift(); if (value === undefined) { throw new Error('No more frames to render'); } return value; }, }; }; exports.renderPartitions = renderPartitions;