marketing-video Remotion 视频管线搭建
· MarketingVideo
今日进展
- 搭建 marketing-video 项目:Remotion 4 + React 18 + TypeScript
- 实现 Python 4 步管线:TTS 配音 -> Whisper 字幕 -> Remotion 渲染 -> 平台发布
- 实现项目注册表:7 个项目模板(FinBuddy/Stock/Marketing/Legao/AnimalView/BookReading/Presentation)
- 实现 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 录屏集成:自动录制操作演示