{"version":3,"file":"VideoMaker.cjs","sources":["../../../src/core/VideoMaker.js"],"sourcesContent":["import { Timeline } from './Timeline.js';\r\nimport { Renderer } from './Renderer.js';\r\nimport { BackgroundLayer } from '../layers/BackgroundLayer.js';\r\nimport { ElementLayer } from '../layers/ElementLayer.js';\r\nimport { OverlayLayer } from '../layers/OverlayLayer.js';\r\nimport { DEFAULT_CONFIG } from '../types/constants.js';\r\nimport { deepMerge } from '../utils/helpers.js';\r\nimport { generateId } from '../utils/helpers.js';\r\n\r\n/**\r\n * 视频制作器主类\r\n */\r\nexport class VideoMaker {\r\n  constructor(config = {}) {\r\n    this.id = generateId('composition');\r\n    this.config = deepMerge({}, DEFAULT_CONFIG, config);\r\n    this.width = this.config.width;\r\n    this.height = this.config.height;\r\n    this.fps = this.config.fps;\r\n    this.backgroundColor = this.config.backgroundColor;\r\n    this.duration = this.config.duration;\r\n    \r\n    // 时间范围控制\r\n    this.startTime = config.startTime !== undefined ? config.startTime : 0;\r\n    this.endTime = config.endTime !== undefined ? config.endTime : undefined;\r\n    \r\n    // 如果指定了endTime但没有duration，自动计算duration\r\n    if (this.endTime !== undefined && this.duration === undefined) {\r\n      this.duration = this.endTime - this.startTime;\r\n    }\r\n    \r\n    // 如果指定了duration但没有endTime，自动计算endTime\r\n    if (this.duration !== undefined && this.endTime === undefined) {\r\n      this.endTime = this.startTime + this.duration;\r\n    }\r\n\r\n    // 创建时间线\r\n    this.timeline = new Timeline({\r\n      duration: this.duration,\r\n      fps: this.fps,\r\n    });\r\n\r\n    // 创建渲染器\r\n    this.renderer = new Renderer({\r\n      width: this.width,\r\n      height: this.height,\r\n      fps: this.fps,\r\n      quality: this.config.renderQuality,\r\n    });\r\n\r\n    // 图层管理\r\n    this.layers = [];\r\n    this.backgroundLayer = null;\r\n\r\n    // 音频管理\r\n    this.audioElements = [];\r\n\r\n    // 初始化背景图层\r\n    this.initBackgroundLayer();\r\n  }\r\n\r\n  /**\r\n   * 初始化背景图层\r\n   */\r\n  initBackgroundLayer() {\r\n    this.backgroundLayer = new BackgroundLayer({\r\n      backgroundColor: this.backgroundColor,\r\n      zIndex: -9999,\r\n    });\r\n    this.backgroundLayer.initBackground(this.width, this.height);\r\n    this.addLayer(this.backgroundLayer);\r\n  }\r\n\r\n  /**\r\n   * 设置尺寸\r\n   */\r\n  setSize(width, height) {\r\n    this.width = width;\r\n    this.height = height;\r\n    this.config.width = width;\r\n    this.config.height = height;\r\n    this.renderer.setSize(width, height);\r\n    if (this.backgroundLayer) {\r\n      this.backgroundLayer.initBackground(width, height);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 设置背景颜色\r\n   */\r\n  setBackgroundColor(color) {\r\n    this.backgroundColor = color;\r\n    this.config.backgroundColor = color;\r\n    if (this.backgroundLayer) {\r\n      this.backgroundLayer.setBackgroundColor(color);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 设置持续时间\r\n   */\r\n  setDuration(duration) {\r\n    this.duration = duration;\r\n    this.config.duration = duration;\r\n    this.timeline.setDuration(duration);\r\n    \r\n    // 更新endTime\r\n    if (this.endTime !== undefined) {\r\n      this.endTime = this.startTime + duration;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 设置时间范围\r\n   * @param {number} startTime - 开始时间（秒）\r\n   * @param {number} endTime - 结束时间（秒），如果未指定则使用duration计算\r\n   */\r\n  setTimeRange(startTime, endTime) {\r\n    this.startTime = startTime;\r\n    if (endTime !== undefined) {\r\n      this.endTime = endTime;\r\n      this.duration = endTime - startTime;\r\n      this.config.duration = this.duration;\r\n      this.timeline.setDuration(this.duration);\r\n    } else if (this.duration !== undefined) {\r\n      this.endTime = startTime + this.duration;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 判断合成在指定时间是否激活\r\n   * @param {number} time - 时间（秒）\r\n   * @returns {boolean}\r\n   */\r\n  isActiveAtTime(time) {\r\n    if (this.endTime === undefined) {\r\n      return time >= this.startTime;\r\n    }\r\n    return time >= this.startTime && time <= this.endTime;\r\n  }\r\n\r\n  /**\r\n   * 添加图层\r\n   */\r\n  addLayer(layer) {\r\n    if (!this.layers.includes(layer)) {\r\n      this.layers.push(layer);\r\n      this.timeline.addLayer(layer);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 移除图层\r\n   */\r\n  removeLayer(layer) {\r\n    const index = this.layers.indexOf(layer);\r\n    if (index > -1) {\r\n      this.layers.splice(index, 1);\r\n      this.timeline.removeLayer(layer);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 获取所有图层\r\n   */\r\n  getLayers() {\r\n    return [...this.layers];\r\n  }\r\n\r\n  /**\r\n   * 创建元素图层\r\n   */\r\n  createElementLayer(config = {}) {\r\n    const layer = new ElementLayer(config);\r\n    this.addLayer(layer);\r\n    return layer;\r\n  }\r\n\r\n  /**\r\n   * 创建叠加图层\r\n   */\r\n  createOverlayLayer(config = {}) {\r\n    const layer = new OverlayLayer(config);\r\n    this.addLayer(layer);\r\n    return layer;\r\n  }\r\n\r\n  /**\r\n   * 添加音频元素\r\n   * @param {AudioElement} audioElement - 音频元素\r\n   */\r\n  addAudio(audioElement) {\r\n    if (audioElement && audioElement.type === 'audio') {\r\n      this.audioElements.push(audioElement);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 获取所有音频元素\r\n   * @returns {Array<AudioElement>}\r\n   */\r\n  getAudioElements() {\r\n    return this.audioElements;\r\n  }\r\n\r\n  /**\r\n   * 收集所有音频元素（包括嵌套合成中的音频）\r\n   * @returns {Array<Object>} 音频配置数组\r\n   */\r\n  async collectAllElements() {\r\n    const audioConfigs = [];\r\n\r\n    // 收集当前合成的音频元素\r\n    for (const audioElement of this.audioElements) {\r\n      if (audioElement && audioElement.type === 'audio') {\r\n        // 如果音频已加载，使用加载后的配置；否则使用当前配置\r\n        await audioElement.initialize();\r\n        if (audioElement.loaded && audioElement.audioPath) {\r\n          audioConfigs.push(audioElement.getAudioConfig());\r\n        } else if (audioElement.audioPath) {\r\n          // 即使未加载，也尝试收集配置（可能在导出时加载）\r\n          audioConfigs.push(audioElement.getAudioConfig());\r\n        }\r\n      }\r\n    }\r\n    \r\n    // 收集图层中的音频元素（如果有）\r\n    for (const layer of this.layers) {\r\n      if (layer.elements) {\r\n        for (const element of layer.elements) {\r\n          if (element && element.type === 'audio') {\r\n            await element.initialize();\r\n            if (element.loaded && element.audioPath) {\r\n              audioConfigs.push(element.getAudioConfig());\r\n            } else if (element.audioPath) {\r\n              audioConfigs.push(element.getAudioConfig());\r\n            }\r\n          }else if(element && element.type === 'video') {\r\n            // 确保视频已初始化（如果还未初始化，getAudioConfig 会返回 null，但会在导出时初始化）\r\n            // 这里先尝试获取配置，如果 audioPath 存在则收集\r\n            await element.initialize();\r\n            if (element.audioPath || (!element.mute && element.videoPath)) {\r\n              const audioConfig = element.getAudioConfig();\r\n              if (audioConfig && audioConfig.path) {\r\n                audioConfigs.push(audioConfig);\r\n              }\r\n            }\r\n          }else if(element.initialize){\r\n            await element.initialize();\r\n          }\r\n          \r\n        }\r\n      }\r\n      \r\n    }\r\n    \r\n    return audioConfigs;\r\n  }\r\n\r\n  /**\r\n   * 渲染一帧\r\n   * @param {number} time - 时间（秒）\r\n   */\r\n  async renderFrame(time) {\r\n    await this.renderer.init();\r\n    const canvas = await this.renderer.renderFrame(this.timeline.getLayers(), time, this.backgroundColor);\r\n    return canvas;\r\n  }\r\n\r\n  /**\r\n   * 获取当前帧的 Canvas 缓冲区\r\n   */\r\n  getFrameBuffer(time) {\r\n    return this.renderer.getCanvasBuffer();\r\n  }\r\n\r\n  /**\r\n   * 播放合成（预览）\r\n   */\r\n  async play() {\r\n    this.timeline.play();\r\n    // 这里可以实现预览逻辑\r\n  }\r\n\r\n  /**\r\n   * 暂停\r\n   */\r\n  pause() {\r\n    this.timeline.pause();\r\n  }\r\n\r\n  /**\r\n   * 停止\r\n   */\r\n  stop() {\r\n    this.timeline.stop();\r\n  }\r\n\r\n  /**\r\n   * 跳转到指定时间\r\n   */\r\n  seek(time) {\r\n    this.timeline.seek(time);\r\n  }\r\n\r\n  /**\r\n   * 导出动画帧序列（类似 paper.view.exportFrames）\r\n   * @param {Object} options - 导出选项\r\n   * @param {number} options.amount - 要导出的总帧数\r\n   * @param {string} options.directory - 保存帧的目录（默认 './frames'）\r\n   * @param {number} options.fps - 帧率（默认使用合成的 fps）\r\n   * @param {number} options.startTime - 开始时间（秒，默认 0）\r\n   * @param {number} options.endTime - 结束时间（秒，默认使用合成的 duration）\r\n   * @param {Function} options.onProgress - 进度回调函数 (current, total) => {}\r\n   * @param {Function} options.onComplete - 完成回调函数 (framePaths) => {}\r\n   * @returns {Promise<string[]>} 返回所有导出帧的文件路径数组\r\n   */\r\n  async exportFrames(options = {}) {\r\n    const {\r\n      amount,\r\n      directory = './frames',\r\n      fps = this.fps,\r\n      startTime = this.startTime || 0,\r\n      endTime = this.endTime || (this.duration ? startTime + this.duration : undefined),\r\n      onProgress,\r\n      onComplete,\r\n    } = options;\r\n\r\n    await this.renderer.init();\r\n    \r\n    return await this.renderer.exportFrames(this.timeline.getLayers(), {\r\n      amount,\r\n      directory,\r\n      fps,\r\n      startTime,\r\n      endTime,\r\n      backgroundColor: this.backgroundColor,\r\n      onProgress,\r\n      onComplete,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 导出视频\r\n   * @param {string} outputPath - 输出路径\r\n   * @param {Object} options - 选项\r\n   */\r\n  async export(outputPath, options = {}) {\r\n    const { VideoExporter } = await import('./VideoExporter.js');\r\n    const exporter = new VideoExporter({\r\n      fps: this.fps,\r\n      quality: this.config.renderQuality,\r\n      ...options,\r\n    });\r\n    return await exporter.export(this, outputPath, options);\r\n  }\r\n\r\n  /**\r\n   * 销毁合成\r\n   */\r\n  destroy() {\r\n    this.layers.forEach(layer => layer.destroy());\r\n    this.layers = [];\r\n    if (this.renderer) {\r\n      this.renderer.destroy();\r\n    }\r\n    this.timeline.reset();\r\n  }\r\n}\r\n\r\n"],"names":["generateId","deepMerge","DEFAULT_CONFIG","Timeline","Renderer","BackgroundLayer","ElementLayer","OverlayLayer"],"mappings":"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"}