UNPKG

@henteko/kumiki

Version:

A video generation tool that creates videos from JSON configurations

78 lines 2.8 kB
import path from 'node:path'; import { FFmpegService } from '../services/ffmpeg.js'; import { logger } from '../utils/logger.js'; export class TransitionService { static instance; constructor() { } /** * Get singleton instance */ static getInstance() { if (!TransitionService.instance) { TransitionService.instance = new TransitionService(); } return TransitionService.instance; } /** * Apply transition between two scenes */ async applyTransition(options) { const { transition } = options; logger.info('Applying transition', { type: transition.type, duration: transition.duration, scene1: path.basename(options.scene1Path), scene2: path.basename(options.scene2Path), }); switch (transition.type) { case 'fade': return this.applyFadeTransition(options); case 'wipe': return this.applyWipeTransition(options); case 'dissolve': return this.applyDissolveTransition(options); default: logger.warning('Unknown transition type', { type: transition.type }); return options.scene2Path; // Fallback to no transition } } /** * Apply fade transition */ async applyFadeTransition(options) { const { transition, scene1Path, scene2Path, outputPath } = options; logger.debug('Applying fade transition', { duration: transition.duration, }); const ffmpeg = FFmpegService.getInstance(); await ffmpeg.fadeTransition(scene1Path, scene2Path, outputPath, transition.duration); return outputPath; } /** * Apply wipe transition */ async applyWipeTransition(options) { const { transition, scene1Path, scene2Path, outputPath } = options; const direction = transition.direction || 'left'; logger.debug('Applying wipe transition', { duration: transition.duration, direction, }); const ffmpeg = FFmpegService.getInstance(); await ffmpeg.wipeTransition(scene1Path, scene2Path, outputPath, transition.duration, direction); return outputPath; } /** * Apply dissolve transition */ async applyDissolveTransition(options) { const { transition, scene1Path, scene2Path, outputPath } = options; logger.debug('Applying dissolve transition', { duration: transition.duration, }); const ffmpeg = FFmpegService.getInstance(); await ffmpeg.dissolveTransition(scene1Path, scene2Path, outputPath, transition.duration); return outputPath; } } //# sourceMappingURL=transition.js.map