marketing-video Remotion 视频管线搭建

· MarketingVideo

今日进展

  1. 搭建 marketing-video 项目:Remotion 4 + React 18 + TypeScript
  2. 实现 Python 4 步管线:TTS 配音 -> Whisper 字幕 -> Remotion 渲染 -> 平台发布
  3. 实现项目注册表:7 个项目模板(FinBuddy/Stock/Marketing/Legao/AnimalView/BookReading/Presentation)
  4. 实现 5 种转场效果:Iris/Pixelate/Push/Wipe/Zoom

关键代码/伪代码

Python 4 步管线

# pipeline.py: 4 步流水线

CLASS VideoPipeline:
    STEPS = ["voiceover", "subtitles", "render", "publish"]

    ASYNC DEF run(self, job: VideoJob):
        context = PipelineContext(job=job)

        # Step 1: TTS 配音
        context.audio_path = AWAIT self.tts_engine.generate(
            text=job.script,
            voice=job.voice_config,
            engine=job.tts_engine,  # edge_tts / openai / volcengine
        )

        # Step 2: Whisper 字幕
        context.subtitles = AWAIT self.subtitle_engine.transcribe(
            audio_path=context.audio_path,
            model="base",  # Whisper model size
        )

        # Step 3: Remotion 渲染
        context.video_path = AWAIT self.renderer.render(
            project=job.project,
            template=job.template,
            props={
                "audio": context.audio_path,
                "subtitles": context.subtitles,
                "data": job.content_data,
            },
            resolution=job.resolution,  # 16:9 / 9:16 / 1:1
        )

        # Step 4: 平台发布
        context.publish_result = AWAIT self.publisher.publish(
            video_path=context.video_path,
            platform=job.platform,  # douyin / ...
        )

        RETURN context

Remotion 项目注册表

// registry.ts: 项目注册表

INTERFACE ProjectConfig {
  id: string;
  name: string;
  templates: TemplateConfig[];
  resolutions: Resolution[];
}

CONST registry: ProjectConfig[] = [
  {
    id: "finbuddy",
    name: "FinBuddy",
    templates: [ProductPromo, NewsFeature],
    resolutions: ["16:9", "9:16"],
  },
  {
    id: "stock",
    name: "Stock",
    templates: [MarketDaily, StockFlash, InstitutionalSurvey],
    resolutions: ["9:16"],  // 竖屏为主
  },
  {
    id: "marketing",
    name: "Marketing",
    templates: [BrandStory, DataShowcase, EventPromo, SocialFlash],
    resolutions: ["16:9", "9:16", "1:1"],
  },
]

遇到的问题

  • Remotion 渲染需要 Chrome,服务器上安装 headless Chrome 遇到依赖问题,最终用 Docker 镜像解决
  • Whisper 中文识别准确率不够:金融术语经常识别错,需要加自定义词典后处理
  • Edge TTS 免费但音质一般,OpenAI TTS 音质好但贵,最终做了 TTS 引擎路由:默认 Edge TTS,重要内容用 OpenAI TTS

明日计划

  • 实现抖音发布模块:视频上传 + 封面生成 + 标题/标签
  • 实现 OBS 录屏集成:自动录制操作演示