更新于 2025年9月19日
9 分钟
ffmpeg 用于视频操作)以及你选择的 ASR(例如 Whisper)用于转录相结合。video-automation/├─ config/│ ├─ brand_voice.yaml│ ├─ platforms.yaml│ └─ prompts/│ ├─ script_prompt.md│ ├─ title_desc_prompt.md│ └─ clip_rules.md├─ data/│ ├─ raw/│ ├─ processed/│ └─ captions/├─ scripts/│ ├─ generate_script.py│ ├─ transcribe.py│ ├─ autoclip.py│ ├─ captions.py│ ├─ repurpose.py│ └─ schedule_upload.py└─ Makefileconfig/prompts 中保持提示的模块化,以便 Claude 可以在不触及你的代码的情况下优化各个步骤。platforms.yaml 中。Makefile 或任务运行器来链接工作流程:make shorts,make upload。config/brand_voice.yaml,其中包含诸如语气、目标受众、价值主张、禁用短语和格式规则之类的属性。Claude Code 可以帮助规范和验证架构,然后在提示中引用它。brand:persona: "务实但乐观的教育者"audience: "B2B SaaS 营销人员和独立创作者"pillars:- "重实践自动化而非理论"- "数据驱动的决策"- "眼见为实"banned_phrases:- "颠覆者"- "变革者"style:tone: "清晰、简洁、友好"reading_level: "8–9 年级"ctas:primary: "订阅以获取每周自动化构建"secondary: "获取工作流程模板"script_prompt.md,将品牌声音和你的主题结合起来。示例提示内容:你是一位资深的视频营销人员和剧本作家。编写一个 60–90 秒的剧本,该剧本:- 在 3 秒内用一个数据点吸引观众<a3>- 提供 1 个可操作的要点</a2>- 使用 brand_voice.yaml 中的品牌声音- 输出一个带有时间戳、建议的 B-roll 和屏幕文字的场景列表scripts/generate_script.py,它:scripts/transcribe.py:# 提取音频ffmpeg -y -i data/raw/input.mp4 -vn -acodec pcm_s16le data/processed/audio.wav# 运行 Whisper(示例)whisper data/processed/audio.wav \--model medium \--language en \--task transcribe \--output_dir data/captions.srt 转换为 .ass 或刻录字幕:ffmpeg -i data/raw/input.mp4 -vf subtitles=data/captions/input.srt -c:a copy data/processed/captioned.mp4config/prompts/clip_rules.md 中定义剪辑规则:scripts/autoclip.py 以:ffmpeg 修剪和简单的缩放/平移ffmpeg 剪切和放大:# 剪切 00:02:10–00:02:40ffmpeg -ss 00:02:10 -to 00:02:40 -i input.mp4 -c copy out_clip.mp4# 放大效果(缩放 + 裁剪)ffmpeg -i out_clip.mp4 -filter:v "scale=iw*1.08:ih*1.08, crop=iw:ih" -c:a copy out_clip_zoom.mp4config/prompts/title_desc_prompt.md 和 platforms.yaml 中以进行约束:scripts/captions.py 和 scripts/repurpose.py 以:pango 文本的本地模板)以导出变体。schedule_upload.py 中。platforms.yaml 中读取平台配置。.env 中并使用 OAuth 流程。Makefile 目标:shorts: transcribe autoclip captions repurpose@echo "短片已在 data/processed/shorts 中创建"longform: generate_script captionsupload:python scripts/schedule_upload.py --platform youtube --input data/processed/shortsargparse 或 typer)。data/raw/。make shorts 以转录和自动剪辑。clip_rules.md 重新生成任何较弱的剪辑。make upload 以安排带有字幕和元数据的帖子。clip_rules.md,提出 6 个带有时间戳和标题的剪辑。确保每个剪辑都有一个强大的引人入胜的开头和独特的角度。”autoclip.py 以接受 JSON 转录并确保时间戳在 29.97fps 时是帧精确的。”pytest 测试。”ffmpeg 用于剪切、缩放、重新计时、音频标准化。.gitignore 中忽略媒体输出。import refrom typing import List, TupleHOOK_PATTERNS = [r"\bhere's the\b", r"\bthe mistake\b", r"\bdo this\b", r"\bin 30 seconds\b",]def score_line(line: str) -> int:s = 0if len(line) < 140: s += 10if re.search(r"\b\d+%|\d+x|\b\d+ (seconds|minutes|steps)\b", line): s += 20if any(re.search(p, line.lower) for p in HOOK_PATTERNS): s += 20if line.endswith: s += 10return min(s, 100)def propose_clips(transcript: List[Tuple[float, float, str]], max_len=35):clips = []cur = []cur_len = 0for start, end, text in transcript:cur.append((start, end, text))cur_len += (end - start)if cur_len >= max_len or score_line(text) > 40:clips.append((cur[0][0], end))cur, cur_len = [], 0if cur:clips.append((cur[0][0], cur[-1][1]))return clipsffmpeg 命令。data/ 挂载为卷。brand_voice.yaml 和提示文件。transcribe.py、autoclip.py 和 repurpose.py。Makefile 目标并运行你的第一个 make shorts。ffmpeg 命令。将简单的启发式方法与 LLM 提示相结合,以确保每个剪辑都有一个引人入胜的开头、一个要点和一个 CTA。ffmpeg 将 SRT 转换为 ASS 或刻录。Claude Code 可以将其包装到脚本中并添加验证,以便时间戳在各个平台上保持同步。brand_voice.yaml 中并在提示中引用它。Claude Code 可以在生成标题、描述和屏幕文字时强制执行约束,例如禁用短语、阅读级别和 CTA 位置。