🎨

影片號深度科普影片全案

👤 golikegod 📦 v1.0.0 ⭐ 4.4 ⬇️ 619 下載
🎨 設計多媒體 免費

📖 技能介紹


name: "video-mindmap-animator" description: "影片號深度科普影片全案:思維導圖動畫 + 長句旁白 + BGM + 多時長壓縮。適用圖文轉影片、科普內容影片化。"


video-mindmap-animator

影片號深度科普影片全案 — 從圖文/筆記到多時長成片的端到端製作技能

何時使用

  • 老闆有現成公眾號圖文/筆記/長文,想做成影片號深度科普影片
  • 想避免"真人出鏡 / 數字人 / T2V 崩壞",偏好結構化思維導圖動畫
  • 內容調性:去 AI 味、口語化、我們站位、長句敘述
  • 老闆反饋多次:AI 味、半句話、英文符號 TTS 怪異、文案與畫面不同步

核心定位

不是引流短影片鉤子型(30 秒帶量),而是科普深度影片(3-5 分鐘立人設)。

維度 引流短影片 科普深度影片(本技能)
時長 30s 3-5 分鐘(可壓 1.5-2x → 1:55-3:20)
畫面 強衝擊人物 思維導圖動畫,無人物
旁白 可選靜音字幕 必有長句旁白
目的 流量轉化 IP 沉澱 + 知識傳遞

端到端 9 步流程

Step 1:內容評估與方向判斷

  • 老闆給圖文/筆記 → 評估長度(建議 2000-5000 字)
  • 拆分核心算式(一句話能寫下的命題)
  • 5-7 個場景分段(鉤子/歸因/細節/反差/反饋/總結)
  • 決策:是否值得做影片(看受眾是否影片號主流量)

Step 2:文字分鏡(script.md)

S1 鉤子       0:00-0:15   幀 0-450
S2 歸因       0:15-0:45   幀 450-1350
S3 員工阻力   0:45-1:30   幀 1350-2700
S4 四個機制   1:30-2:30   幀 2700-4500
S5 反差       2:30-3:15   幀 4500-5850
S6 反饋迴路   3:15-3:45   幀 5850-6750
S7 總結       3:45-4:00   幀 6750-7200
  • 每個場景列畫面元素清單(圓節點、副標、底部金句等)
  • 文字與畫面一一對應

Step 3:渲染影片幀(思維導圖動畫)

工具:Python PIL + ffmpeg - 畫幅 1080×1920(9:16 影片號) - 30 fps - 字型 msyh.ttc / msyhbd.ttc - 配色:#1e3a5f 深藍 / #d4af37 金 / #faf8f4 米 / #c0392b 紅警示

核心程式碼模式

def render_scene(frame_idx, total_in_scene):
    t = frame_idx / total_in_scene  # 0-1
    img = Image.new("RGB", (W, H), COL_BG)  # 基礎淺米畫布
    # 每個元素:make_layer() + 繪製 + apply_layer_alpha() + paste
    return img

關鍵函式: - ease_out_cubic(t) = 1 - (1-t)**3(節點浮現) - ease_in_out_cubic(t)(文字淡入) - apply_layer_alpha(layer, factor)用 split/merge 正確處理 alpha(不是 putalpha!)

踩坑(必看): - ❌ layer.putalpha(N) 把整圖層 alpha 設為 N → 黑色覆蓋整畫布 - ✅ 修復:r,g,b,a = layer.split(); a = a.point(lambda p: int(p * f)); Image.merge(...)

ffmpeg 合成

ffmpeg -framerate 30 -i frames/frame_%04d.png \
  -c:v libx264 -pix_fmt yuv420p -crf 18 -preset slow \
  output.mp4

Step 4:旁白稿(去 AI 味 5 原則)

5 大原則(老闆多次反饋沉澱): 1. 長句敘述 40-60 字/句,不是短句堆砌 2. 口語連線詞:"講到這" / "你看" / "回頭看" / "我們" 3. 數字漢字化:"七成三" 而非 "73%" 4. 人名漢化:"科特" 而非 "Kotter" 5. 符號零容忍:刪除引號/破折號/百分號/小數

節奏錨定: - 預設 4.3 字/秒(rate=-15%) - 4 分鐘 ≈ 1000 字 + 自然停頓 - 2 分鐘 ≈ 500-600 字

v3 長句 vs v2 短句對比

v2 (AI 味)              v3 (長句敘述)
管理者盲區,七成。        管理者盲區七成,這個數字看著大,裡面其實有四個具體
決定勝敗的兩成。          的機制在起作用,每一個都會讓我們在自我察覺這件事上
四個機制疊在一起。        失效。第一個機制是約哈里之窗的盲區,自己不知別人知。
                         比如我們自己的口頭禪、習慣動作,全世界都看得見,
                         自我們自己看不見。

Step 5:配音生成(Edge TTS)

關鍵認知: - ❌ edge_tts.Communicate 不支援 SSML - 傳 <speak><voice><prosody><break> 整段當純文本 → TTS 念出標籤 - 註釋 <!-- 註釋 --> 也被朗讀

正確用法

communicate = edge_tts.Communicate(
    TEXT,                       # 純文本,無標籤
    voice="zh-CN-YunxiNeural",  # 成熟男聲
    rate="-15%",                # 自然略慢
    pitch="+0Hz",
)
await communicate.save("out.mp3")

中文男聲備選: - zh-CN-YunxiNeural(成熟,推薦) - zh-CN-YunyangNeural(新聞) - zh-CN-YunjianNeural(渾厚)

Step 6:BGM 生成(mmx music)

mmx music generate \
  --prompt "soft contemplative piano, 60 bpm, minimal, hopeful undertone, cinematic, no vocals" \
  --instrumental \
  --out bgm.mp3

踩坑: - mmx music-2.6 預設 4 分鐘,不能指定時長 - 需要更短 → ffmpeg -t 裁剪(不要 atempo 加速) - 需迴圈 → ffmpeg -stream_loop -1

Step 7:音影片混合

ffmpeg -y \
  -i video.mp4 \
  -i voiceover.mp3 \
  -stream_loop -1 -i bgm.mp3 \
  -filter_complex "[2:a]volume=0.18,afade=t=in:st=0:d=1.0,afade=t=out:st=N-1:d=1.0[b];[1:a][b]amix=inputs=2:duration=longest[a]" \
  -map 0:v -map "[a]" \
  -c:v copy -c:a aac -b:a 128k \
  -shortest \
  output.mp4

踩坑: - -c:v copy 與 filter 衝突 → 用 -c:v libx264 -preset fast 重編碼 - 輸出 0 位元組 → 加 -movflags +faststart - moov atom not found → 同樣 -movflags +faststart

Step 8:多時長壓縮

目標 影片 旁白 BGM
4:00 完整 setpts 1.0x 1.0x(自然) 1.0x
2:24 中等 setpts 0.6x 重生精簡稿 1.0x -t 144 裁剪
1:55 緊湊 setpts 0.8x wave 1.25x wave 1.25x
2:00 極速 setpts 0.5x atempo 2.0x ❌ 詭異 裁 2:00

音訊加速(最關鍵): - ❌ atempo 2.0+ 失真詭異(老闆親口反饋) - ❌ wave 重取樣 1.65x → 老闆嫌薄 - ✅ wave 重取樣 1.25x 略微加速(1/1.25 = 80% 時長) - ✅ 或 atempo 1.0x(不加速)配精簡字數

wave 重取樣程式碼(保 pitch):

new_framerate = int(framerate * speed)  # 24000 * 1.25 = 30000
audio = audio._spawn(raw, overrides={"frame_rate": new_framerate})
audio = audio.set_frame_rate(framerate)  # 改回

或 ffmpeg:

ffmpeg -i in.mp3 -af "asetrate=28800,aresample=24000" out.mp3

Step 9:9 步審 + 交付

  1. 解析度 1080×1920 ✅
  2. 時長匹配版本 ✅
  3. 字幕對齊畫面元素 ✅
  4. 音訊同步(不漂移)✅
  5. 首幀合規(無敏感內容)✅
  6. BGM 不蓋過旁白(音量 ≤ 20%)✅
  7. 旁白音調自然(不要 atempo 2.0+)✅
  8. 數字/人名無英文 ✅
  9. 影片號尺寸 2.35:1 封面(如需公眾號同步)✅

關鍵踩坑清單(必記)

# 修復
1 edge_tts.Communicate 不支援 SSML 用純文本 + rate/pitch/voice 引數
2 SSML 註釋被朗讀 刪除所有 XML 註釋
3 atempo 2.0+ 音調詭異 不超過 1.5x,或用 wave 重取樣
4 wave 重取樣 1.65x 變薄 不超過 1.30x
5 ffmpeg 鏈式 atempo 行為異常 改用單段 atempo 或 wave 重取樣
6 pydub speedup 缺 ffprobe 用 imageio_ffmpeg 路徑 + env var
7 PIL putalpha 整圖層 split/merge 單獨處理 alpha
8 ffmpeg 寫 mp4 moov atom not found -movflags +faststart
9 ffmpeg concat 列表 BOM 干擾 UTF-8 無 BOM(PS 用 .NET UTF8Encoding $False)
10 PS 5.1 GBK 輸出 emoji 報錯 輸出用 ASCII 或 sys.stdout 編碼
11 mmx music 預設 4 分鐘 ffmpeg -t 裁剪
12 ffmpeg -c:v copy 與 filter 衝突 -c:v libx264 -preset fast
13 imageio_ffmpeg 路徑含特殊字元 用 raw string r"..."

工具鏈固定路徑

Python: C:\Users\ZWB2016\AppData\Local\Programs\Python\Python312\python.exe
ffmpeg: C:\Users\ZWB2016\AppData\Local\Programs\Python\Python312\Lib\site-packages\imageio_ffmpeg\binaries\ffmpeg-win-x86_64-v7.1.exe
字型: C:\Windows\Fonts\msyh.ttc / msyhbd.ttc
專案目錄: output/videos/<project_name>/<episode>/
  ├── <episode>_script.md          文字分鏡
  ├── <episode>_voiceover.md       旁白稿
  ├── render_<episode>.py          影片幀渲染指令碼
  ├── voiceover_<episode>.py       TTS 生成指令碼
  ├── make_<episode>.py            完整混合指令碼
  ├── voiceover_<ver>.mp3         各種旁白
  ├── bgm_<ver>.mp3               BGM
  ├── <episode>_video_<dur>.mp4   影片流(無音)
  └── <episode>_v<N>_<dur>_with_voice.mp4  最終成片

老闆風格觀察(深度沉澱)

老闆對"AI 味"極度敏感(多次反饋),核心判斷標準:

老闆厭惡 老闆認可
短句堆砌("X 是 Y" / "X 與 Y") 長句敘述(主謂賓齊全)
格言警句式結尾 樸素陳述 + 自然過渡
"綜上所述" / "值得注意的是" "講到這" / "回頭看"
數字英文(73% / Kotter) 數字漢字(七成三 / 科特)
旁白與畫面不同步 旁白與畫面元素一一對應
符號(引號 / 破折號 / 百分號) 全部刪掉或換說法
atempo 加速 自然語速 + 精簡字數

老闆話術風格: - 極簡、不囉嗦 - 反饋精準(如"音調詭異"、"半句話感覺") - 傾向快速迭代(v1→v2→v3→v3.1→v3.2→v4.0→v5.0) - 不喜歡"等一下讓我重做"——希望直接出方案

完整指令碼模板(直接複用)

1. 影片幀渲染(render_xxx.py)

W, H = 1080, 1920
FPS = 30
DURATION = 240
TOTAL_FRAMES = FPS * DURATION

COL_BG = (250, 248, 244)
COL_NAVY = (30, 58, 95)
COL_GOLD = (212, 175, 55)
COL_RED = (192, 57, 43)
COL_GRAY = (44, 62, 80)

FONT_PATH = r"C:\Windows\Fonts\msyh.ttc"
FONT_BOLD = r"C:\Windows\Fonts\mshybd.ttc"

def ease_out_cubic(t): return 1 - (1 - t) ** 3
def ease_in_out_cubic(t):
    if t < 0.5: return 4 * t * t * t
    return 1 - (-2 * t + 2) ** 3 / 2

def apply_layer_alpha(layer, factor):
    r, g, b, a = layer.split()
    a = a.point(lambda p: int(p * factor))
    return Image.merge("RGBA", (r, g, b, a))

def make_layer(): return Image.new("RGBA", (W, H), (0, 0, 0, 0))

# SCENE_MAP 排程
# render_s1 ~ render_s7 各場景函式
# main() 按幀號分發渲染

2. TTS 生成(voiceover_xxx.py)

import asyncio, edge_tts

TEXT = """<純文本,無 SSML>
"""

async def main():
    communicate = edge_tts.Communicate(
        TEXT,
        voice="zh-CN-YunxiNeural",
        rate="-15%",
        pitch="+0Hz",
    )
    await communicate.save("voiceover.mp3")

3. 多版本混合(make_xxx.py)

推薦訪問7w4.net獲取更多AI技能。

import subprocess

FFMPEG = r"C:\Users\...\imageio_ffmpeg\binaries\ffmpeg-win-x86_64-v7.1.exe"

def mix(video, voiceover, bgm, output, duration):
    cmd = [
        FFMPEG, "-y",
        "-i", video,
        "-i", voiceover,
        "-stream_loop", "-1", "-i", bgm,
        "-filter_complex", f"[2:a]volume=0.18,afade=t=in:st=0:d=1.0,afade=t=out:st={duration-1}:d=1.0[b];[1:a][b]amix=inputs=2:duration=longest[a]",
        "-map", "0:v", "-map", "[a]",
        "-c:v", "libx264", "-preset", "fast", "-crf", "20",
        "-c:a", "aac", "-b:a", "128k",
        "-movflags", "+faststart",
        "-shortest",
        output,
    ]
    subprocess.run(cmd, check=True)

適用場景擴充套件

  • 公眾號圖文 → 影片號深度影片(本次主用)
  • 長文章/筆記 → 思維導圖講解影片
  • 5 條系列科普(E1-E5,本次規劃但未全做)
  • 跨平臺分發:影片號 + B 站 + 抖音 + 知乎 + 小紅書(同一影片素材)

不適用場景

  • 需要真人 IP(強鏡頭感、表情)的影片
  • 30 秒鉤子型引流短影片
  • 複雜電影級特效動畫
  • 即時直播

沉澱引用

  • 原始會話:2026-06-13 09:22 - 20:25
  • 專案目錄:output/videos/ceo_obstacle_v1/E1/
  • 全部產出:v1 靜默 / v2 短句 / v3.1 長句+加速 / v3.2 自然 / v4.0 2:24 / v5.0 1:55
  • 核心交付:v5.0_1min55_with_voice.mp4(推薦)

🤖 AI 評測

這是一個質量較高的專業技能文件,定位清晰,針對性強。優點是流程完整、細節豐富,提供了可直接使用的程式碼模板和命令,並總結了真實專案中的避坑經驗,實用性很強。不足是使用門檻較高,需要一定的技術基礎,模板程式碼需要根據個人環境調整後才能使用,且部分外部工具(如mmx music)缺乏使用說明。總體而言,這是一個認真打磨過的技能,適合有技術背景的使用者使用。

📊 多維度評分

適應性4.1
規範性4.3
有效性4.7
可靠性4.2
可信度4.8

📁 包含檔案 (5 個)

📄 SKILL.md 12 KB
📄 _meta.json 141 B
📄 scripts/make_video.py 2.4 KB
📄 scripts/render_template.py 2.6 KB
📄 skill-card.md 2.2 KB