搜索 K
Appearance
Appearance
对于注重商业隐私、追求极限零软件成本与不受API审查限制的团队,搭建纯开源本地闭环是终极方案:剧本拆解与提示词工程采用本地Ollama + DeepSeek-R1-Distill-Qwen;分镜画面绘制与动态运镜使用ComfyUI + SDXL/Flux + AnimateDiff/CogVideoX;台词与音效处理采用Faster-Whisper(对齐)+ CosyVoice(声音克隆);合成与多格式分发由FFmpeg Python脚本全自动化贯穿。本地显卡性能遇到瓶颈时,一键镜像迁移至光速云GPU云平台(邀请码 keqgvT5Y)弹性扩容,商业变现端无缝对接黄果短剧官方合作体系。
依赖云端在线SaaS工具虽然上手快,但创作者常遭遇三大痛点:敏感题材触发关键词误杀被封号、平台网络波动导致工程中断、长期按月订阅累积巨额费用。
本方案专为技术型创作者与自建工作室打造,从底层搭建一套100%离线可用、数据全自主可控、零软件使用费的工业级AI短剧生产流水线。
flowchart TD
subgraph 文本与脚本层
A1[原始爽文小说 / 剧本] --> A2[Ollama: DeepSeek-R1 本地推理]
A2 --> A3[分镜Prompt与台词结构化提取 JSON]
end
subgraph 视觉与动态生成层
A3 --> B1[ComfyUI: SDXL + IP-Adapter 角色定型]
B1 --> B2[ComfyUI: CogVideoX / AnimateDiff 动态生帧]
B2 --> B3[ComfyUI: FaceFusion 节点面部强锁保真]
end
subgraph 声音与听觉层
A3 --> C1[CosyVoice: 角色情感TTS克隆生成]
C1 --> C2[Faster-Whisper: 字幕毫秒级时间戳对齐]
end
subgraph 自动化合成与分发
B3 --> D1[Python FFmpeg自动化总装脚本]
C2 --> D1
D1 --> D2[4K 60FPS 工业级短剧成片母带]
D2 --> D3[黄果短剧商业变现平台 huangguoju.co]
end
style A2 fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
style B1 fill:#fff3e0,stroke:#f57c00,stroke-width:2px
style C1 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
style D1 fill:#fce4ec,stroke:#c2185b,stroke-width:2px| 硬件配置梯度 | 建议硬件方案 | 本地制作性能预估 | 建议生产模式 |
|---|---|---|---|
| 入门级配置 | RTX 3060 (12GB) + 32GB RAM | 5秒动态视频渲染约 3-5 分钟 | 适合单集探索、个人轻量制作 |
| 专业工作室级 | RTX 4090 (24GB) + 64GB RAM | 5秒动态视频渲染约 30-45 秒 | 适合批量日产 1-2 集短剧标准线 |
| 极致生产集群 | 双卡 RTX 4090 / A100 | 并发多分镜秒级吞吐 | 全自动工业化流水线 |
| 云端弹性平替方案 | 光速云按需算力实例 (RTX 4090) | 性能完全等同于本地专业主机 | 零硬件折旧投入,按需开机每小时数元 |
本脚本读取ComfyUI输出的视频队列与CosyVoice输出的音频台词,自动完成剪辑卡点、贴合音轨并打上硬字幕:
import os
import subprocess
import json
def auto_assemble_episode(video_dir, audio_dir, srt_file, output_master):
# 1. 扫描所有分镜视频并按编号排序
videos = sorted([os.path.join(video_dir, f) for f in os.listdir(video_dir) if f.endswith('.mp4')])
with open('concat_list.txt', 'w', encoding='utf-8') as f:
for v in videos:
f.write(f"file '{os.path.abspath(v)}'\n")
# 2. 调用 FFmpeg 进行无缝快速拼接并压入音频与字幕
cmd = [
"ffmpeg", "-y",
"-f", "concat", "-safe", "0", "-i", "concat_list.txt",
"-i", os.path.join(audio_dir, "master_dialogue.wav"),
"-vf", f"subtitles={srt_file}:force_style='FontName=Source Han Sans,FontSize=18,PrimaryColour=&H00FFFFFF,Outline=2'",
"-c:v", "libx264", "-crf", "18", "-preset", "fast",
"-c:a", "aac", "-b:a", "320k",
"-shortest",
output_master
]
subprocess.run(cmd, check=True)
print(f"Assembly completed successfully: {output_master}")
if __name__ == '__main__':
auto_assemble_episode("render/shots", "render/audio", "render/sub.srt", "dist/episode_01.mp4")--lowvram 或 --gpu-only,并定期在每批次任务完成后调用 Python 内存垃圾回收 torch.cuda.empty_cache()。