口播视频 → 信息图动效成片
把一条口播视频自动加工为竖屏信息图动效短视频:保留口播原声与人像(右上角圆形小窗),主画面改为逐屏信息图动画,元素出现时刻与口播逐句对齐。
环境准备(首次使用先检查)
- Python venv:
C:/Users/ZhuanZ/.workbuddy/binaries/python/envs/default/Scripts/python.exe,需含faster-whisper pillow numpy imageio-ffmpeg。缺失时安装到该 venv,不要污染全局。 - ffmpeg:优先用
imageio_ffmpeg.get_ffmpeg_exe()返回的二进制;备选/d/JianyingPro/*/ffmpeg.exe。 - 本地 whisper 模型:
D:/whisper-small(small/int8)。不存在时设HF_ENDPOINT=https://hf-mirror.com+HF_HUB_DISABLE_XET=1下载;若缓存 blob 完整但 snapshot 链接 0 字节,可从~/.cache/huggingface/hub/models--Systran--faster-whisper-small/blobs/手动组装 model.bin/config.json/tokenizer.json/vocabulary.txt。
工作流程
1. 预检输入视频
- 中文路径先
cp到工作目录的英文路径(ffmpeg 传参用D:/...Windows 风格)。 - 用 ffprobe/ffmpeg -i 看时长、分辨率、帧率;按 4-6 秒/张抽帧看画面:确认人物位置、是否有烧录字幕/标题/贴纸(决定口播窗裁切框)。
- 与用户确认:视觉风格(默认薄荷绿白亮色)、口播窗位置(默认右上角圆形)、画幅(默认竖屏 1080×1920)。
2. 搭建工作目录
- 建工作目录(如
work/),从assets/templates/复制 4 个文件:render.py、script.py、audio_mix.py、preview.py(四者通过from script import ...相互依赖,必须同目录)。 - 提取口播帧序列到
work/voice_frames/f_%05d.jpg(原视频全帧,供口播窗逐帧裁切)与 44.1k 单声道 wavwork/voice_44k.wav。
3. 语音识别(scripts/transcribe.py)
ffmpeg -i 输入 -vn -ac 1 -ar 16000 输入16k.wavpython scripts/transcribe.py 输入16k.wav asr_result.json(约 0.6 倍实时速度,长视频放后台)。- 检查转写结果,修正同音字错误写入
script.py的_FIX表(如 敲动→撬动、面料→变量),不要只改字幕不改表。
4. 编写分镜(编辑 script.py)
- 替换
SCREENS与TIMINGS:屏边界对齐 ASR 段起点,每屏 5-15 秒;模板中的 15 屏是完整示例,参考其字段结构。 - 元素级同步是本 skill 的核心特性:
card_delays/stats_delays/compare.delays/title_delay/sub_delay/cta_delay(相对本屏开始的秒数)必须逐一对齐该内容在口播中被讲到的时刻——讲到哪条弹出哪条,不要用默认错峰。 SUBS由 ASR json 自动生成(合并 <1.4s 短段 + _FIX 修正)。- 校验:
sum(TIMINGS) 换算后的总帧时长 ≥ 口播时长(见 references/workflow.md 的时长公式坑)。
5. 口播窗裁切校准(关键人工步骤)
- 修改
render.py中VOICE_N(源总帧数)、SRC_FPS(源帧率)、CROP(源视频人像方形裁切框)。 - CROP 必须避开源视频的烧录标题、底部字幕、互动图标;跑
preview.py后读预览帧确认窗口内无杂物,通常需迭代 2-3 次。
6. 预览自查 → 全量渲染 → 合成
preview.py渲染 10 张关键帧自查:布局无重叠、口播窗干净、字幕同步、各屏内容正确。- 全量链路(后台执行,30fps 约 4300 帧 ≈ 17 分钟):
audio_mix.py && render.py && ffmpeg -framerate 30 -i out/frame_%05d.png -c:v libx264 -preset medium -crf 20 -pix_fmt yuv420p -r 30 -movflags +faststart video_noaudio.mp4 && ffmpeg -i video_noaudio.mp4 -i audio/mix.wav -c:v copy -af "loudnorm=I=-15:TP=-1.5:LRA=11" -c:a aac -b:a 128k -ar 44100 -ac 2 -shortest final.mp4 - 成片抽帧拼贴(含屏切换前后、每屏中段、最后一帧)自查后交付到
输出/目录。
动画规格(用户确认过的偏好)
- 禁止:标题/卡片浮动漂移、星火闪烁、脉冲环、呼吸描边、全屏高光扫过、粒子背景。
- 保留:基础入场弹入(幅度收敛)、关键词高亮+下划线生长、数字滚动、折线/增长条生长、卡片打勾、CTA 胶囊入场。
- 渲染 30fps、屏间溶解过渡 12 帧;每个动效有配套 pluck 音效(时间点读同一批 delay 字段)。
详细参数说明、字段 schema、踩坑记录见 references/workflow.md。