短视频编辑 — 第 1 级(简洁 & 极简)
将 01-crudo/ 中的原始视频转换为 9:16 竖版 Reel,清晰且可供审阅:无静音段、卡拉 OK 字幕、细微移动和淡出效果。
基本规则:先创建草稿(DRAFT);只有在用户批准后才能生成最终版本。未经事先询问,切勿使用任何付费服务。
整个过程在本地且免费(Python + FFmpeg + Whisper)。脚本已存放在 scripts/ 中。不要重写它们:直接使用。
步骤 0 — 准备工具(仅首次)
首先运行 python scripts/verificar_entorno.py:检查 Python、FFmpeg(包含本工具套件使用的滤镜)以及 Whisper,并说明缺失的内容。如果一切正常,则继续下一步。如果缺少某些内容,请按以下命令解决。静默检查所需内容是否存在。如果缺少某物,请在安装时友好提示(“我正在准备工具,第一次需要几分钟时间”):
python --version
ffmpeg -version
ffprobe -version
python -c "import whisper"
如果缺失:
- Python:请用户从 python.org 下载并安装(勾选“Add Python to PATH”),然后重启终端。
- FFmpeg(Windows):
winget install Gyan.FFmpeg— 然后重启终端。Mac 上:brew install ffmpeg。 - Whisper:
pip install openai-whisper(首次会下载small模型,完全免费且运行在用户自己的电脑上)。
如果某些内容无法安装,不要卡住:解释缺少什么,并提供最简单的替代方案。
步骤 1 — 检查素材
- 列出
01-crudo/中的内容(以及02-assets/中的资源)。 - 如果只有一个视频,直接使用它。如果有多个,询问用户使用哪个。如果文件夹为空,请用户将视频复制到此处。
- 确认视频时长以及是否包含音频:
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "01-crudo/文件名.mp4" - 最多只问一个偏好问题,仅在必要时才问(例如:是否希望手动剪掉某些口头禅?)。否则使用默认值继续。
步骤 2 — 生成草稿 (DRAFT)
运行完整流水线(转录 → 清理静音 → 导出竖版视频):
python scripts/pipeline.py "01-crudo/文件名.mp4"
每个步骤的作用(以防需要单独运行或调整):
| 步骤 | 脚本 | 结果 |
|---|---|---|
使用 Whisper (small 模式,带词级时间戳) 转录 | scripts/transcribir.py | 02-assets/subtitulos/文件名.srt 和 .words.json |
| 去除静音段(> 0.5 秒,阈值 -35 dB) | scripts/limpiar_silencios.py | 02-assets/sin_silencios/文件名.mp4 和 .timeline.json |
| 导出 9:16 视频,带字幕、缩放和淡出 | scripts/exportar_reel.py | 03-output/文件名.mp4 |
limpiar_silencios.py 中的可用参数(仅当用户要求或结果需要时才使用):
--silence-duration 0.35→ 剪裁更短的停顿(节奏更快)。--cut-range 开始 结束(可重复)→ 剪裁一个精确的时间段(以原始视频的秒为单位)。这是去除口头禅(如“呃”、“嗯”、“就是说”)或失败镜头的方法:查看02-assets/subtitulos/文件名.words.json,找到它们的时间,然后作为范围传入。如果剪裁较多,请在应用前向用户展示剪裁列表。--speed-range 开始 结束 速度(可重复)→ 在某个时间段内设置不同的播放速度(以原始视频的秒为单位),例如--speed 1.32 --speed-range 13 21.8 1.5。用于加速较慢或解释性的部分,同时保持重要部分正常。如果用户要求最大时长(例如 55 秒),请调整--speed以满足要求,并使用ffprobe测量。--speed 1.1→ 略微加速并保持音调(范围 0.5 至 2.0)。仅在用户要求时使用。
若要仅重新运行清理步骤进行参数调整,然后重新导出:
python scripts/limpiar_silencios.py "01-crudo/文件名.mp4" --cut-range 12.4 13.1
python scripts/exportar_reel.py "02-assets/sin_silencios/文件名.mp4" "02-assets/subtitulos/文件名.srt" --output "03-output/文件名_draft.mp4"
保存草稿时使用后缀 _draft(以及 _draft2、_draft3… 如果有多轮迭代)以避免覆盖之前的版本。如果使用了 pipeline.py,请将输出重命名为 文件名_draft.mp4。
风格标准(已内置在脚本中 — 未经要求不要更改)
- 格式:竖版 9:16,1080×1920,30 fps。
- 卡拉 OK 字幕:暖白底文字,当前词用柔和金色高亮,半透明深蓝背景,最多两行,位于安全区域内(远离底部边缘和应用按钮)。
- 移动:低强度的缩放和平移,最大 2.5%。不要叠加特效或在本就饱和的图像上添加图形。
- 结尾:淡出效果(画面和音频)。
- 音频:原始音频清晰,标准化至 -14 LUFS,不添加任何装饰性音乐或音效(可选的开场音效由用户自行提供,见下文)。
- 节奏:紧凑地呈现亮点;如果用户要求突出关键词,使用金色高亮,但不要过度。
自定义开场音效(可选)
默认情况下,Reel 不带任何额外音效。如果用户希望在开头添加声音标志,必须是用户自己的:询问用户是否已有 .wav 或 .mp3 文件,或帮助他们创建自己的音效(例如,使用 FFmpeg 或 Python 合成,或使用其有权使用的资源)。然后在导出时将其与原始语音混合:
python scripts/exportar_reel.py "02-assets/sin_silencios/文件名.mp4" "02-assets/subtitulos/文件名.srt" --sonido "路径/我的音效.wav" --output "03-output/文件名_draft.mp4"
- 如果遮挡了语音,请在
scripts/exportar_reel.py中调低SOUND_VOLUME(默认为 0.55)。 - 未经询问并确认可以使用,不要下载或使用第三方或付费音效。
步骤 3 — 交付前审查草稿
在声明草稿完成之前:
- 确认文件存在于
03-output/中,并使用ffprobe测量其时长。 - 截取 2-3 帧以确认字幕可见且未超出安全区域:
检查这些图像,并在完成后删除ffmpeg -y -ss 5 -i "03-output/文件名_draft.mp4" -frames:v 1 "03-output/_chequeo.png"_chequeo.png。 - 比较原始时长与最终时长。
如果出现错误(Whisper 无法转录、FFmpeg 报错),请用通俗易懂的语言解释问题,修正后重试。不要交付字幕不同步或被裁剪的草稿。
步骤 4 — 展示并等待批准
打开草稿供用户查看和听取:
- Windows:
start "" "03-output/文件名_draft.mp4" - Mac:
open "03-output/文件名_draft.mp4"
简单总结几句话:
- 文件路径和时长(原始 → 最终)。
- 剪裁的内容(静音段以及适用的口头禅或手动剪裁段)。
- 应用的特效(字幕、缩放、淡出)。
最后询问:“你批准这个版本吗?还是需要调整什么?”(音频、字幕、节奏、缩放、剪裁)。
在收到明确同意之前,不要生成最终版本。
步骤 5 — 迭代并交付最终版本
- 如果用户要求修改:应用修改,生成新的草稿(
_draft2),然后返回步骤 3。 - 当用户批准时:使用相同的导出命令导出最终版本,添加
--output "03-output/文件名_final.mp4"。 - 提供最终文件的路径,并建议发布到 Reels / TikTok / Shorts。
规则
- 在使用任何付费服务之前必须询问(API、云端编辑器、音乐库、AI 语音)。标准流程不需要这些。
- 本地 Whisper 用于转录。不要将视频上传到外部服务。
- 不要删除或覆盖
01-crudo/中的文件。原始文件始终保留。 - 将结果保存在
03-output/中,中间文件保存在02-assets/中。 - 使用简单语言:用户可能不懂编辑或编程。
- 如果用户要求超出第 1 级范围的内容(复杂动画、运动图形、多机位、色彩分级),坦诚说明:本流程涵盖清理、字幕和细微移动;建议将其作为单独的步骤处理。