行 · 實作筆記

餵小說給 AI,自動生成短劇說漫:這套 AI 漫劇流水線終於有點樣子了

記錄如何把小說改寫成短影音旁白,透過 GPT-SoVITS 配音、自動分鏡、宮格生圖與 9:16 裁切,建立一套小說轉 AI 短劇說漫的完整工作流。

旁白先行短影音流程的第一幀封面

這篇是一次短影音產線的工作筆記。

我這次想做的不是「先做一堆圖,再想辦法硬配音」,而是反過來:先把故事變成能聽的旁白,再讓畫面去服務旁白。素材來自小說劇情,目標是產出 9:16 直式短影音,有旁白、有字幕、有分鏡,最後還要有 contact sheet 可以檢查。

以前我常覺得 AI 影片流程最麻煩的是生圖或生影片。這次做完才發現,真正決定成片穩不穩的,是聲音和時間軸。旁白秒數先確定,畫面才知道自己該站在哪裡。

開場:為什麼要做這套流程

我想要的是一條能處理小說/劇情內容的短影音流程。

小說很長,情緒很多,角色也不只一個。如果直接丟給模型生圖,很容易得到一堆漂亮但不連貫的畫面;如果先切分鏡,又會卡在每格到底要多長、字幕要跟誰對齊、配音會不會比畫面長。

所以這次我把順序倒過來。

先讀小說或劇情,理解主線、角色關係和情緒轉折;再把它改寫成 250-300 字內的短影音旁白。這個字數不是文學最完整的版本,而是短影音能承受的密度:有鉤子,有轉折,有一點情緒,但不能塞到像朗讀全文。

核心原則:旁白先行,畫面第二

這條流程的核心原則很簡單:旁白先行,畫面第二。

旁白不是成片後面才補上的音軌,它是整支影片的骨架。我要先知道一段旁白實際講了幾秒,才能決定這段要一格畫面、兩格畫面,還是三格畫面。

所以我的流程不是:

圖片 → 分鏡 → 硬配音 → 字幕勉強對齊

而是:

旁白 → 旁白秒數 → 自然段落 → 分鏡數 → 畫面 → 字幕與聲音對齊

這樣做的好處是節奏比較自然。字幕跟逐句 TTS 對齊,畫面則跟自然旁白段對齊。觀眾聽到的是一句一句清楚的聲音,看到的是一段一段情緒完整的畫面。

實際流程

這次最後收斂成這條流程:

階段產物我檢查的事
小說/劇本原始劇情理解主線、角色、情緒轉折是否清楚
250-300 字口語旁白可念的短影音稿有沒有像人在說話,不是像摘要
TTS 句子逐句旁白 JSON每句不能太長,方便 GPT-SoVITS 穩定輸出
GPT-SoVITS 生成與量測raw/trimmed audio秒數、RMS、peak,確認不是有字幕沒聲音
自然旁白段合併後的段落聽起來像自然敘事,不是機械切片
分鏡數與 panel mapping每段對應幾格畫面依實際秒數決定格數
直接生成宮格圖一張完整 contact-like grid角色、服裝、光線、場景一致性
裁切 9:16 panels每格直式畫面每一格都強制 portrait frame
合成影片聲音、字幕、畫面字幕逐句對齊,畫面對自然段
contact sheet QA總檢查圖快速檢查分鏡順序與畫面節奏
final output最終短影音手機直式觀看是否成立

換成一行就是:

小說/劇本 → 250-300 字口語旁白 → TTS 句子 → GPT-SoVITS 生成與量測 → 自然旁白段 → 分鏡數與 panel mapping → 直接生成宮格圖 → 裁切 9:16 panels → 合成影片 → contact sheet QA → final output

分鏡節奏規則

這次我沒有先拍腦袋決定「要 13 格」。

我先讓 GPT-SoVITS 把逐句 TTS 做出來,量測每句秒數,再把句子合併成自然旁白段。所謂自然旁白段,不是照標點硬切,而是照觀眾聽起來的情緒單位切。

例如一段可能是「人物處境」,下一段才是「情緒反轉」。這兩段在文字上可能只差幾句,但聽覺上是不同 beat。

分鏡數就依這些自然段的實際秒數來決定:

  • 很短的段落,一格畫面就夠。
  • 中等段落,可以兩格畫面交替。
  • 情緒或資訊量比較高的段落,才增加到三格。
  • 不讓畫面太頻繁切,也不讓同一格停太久。

這樣做之後,畫面比較像是跟著旁白呼吸,而不是字幕在追畫面、畫面在追配音。

直接宮格生成與 9:16 裁切

這次比較關鍵的改法,是直接生成整張宮格分鏡圖,再裁切每一格。

以前如果每格分開生,角色很容易漂。服裝、髮型、光線、場景都會慢慢變掉。直接讓模型一次生成整張宮格,雖然單張控制難度比較高,但整體一致性反而更好。

做法是先把每個 panel 的畫面需求寫清楚,再一次生成整張 grid。生成後不是拿整張圖進影片,而是把每一格裁切出來,並且強制轉成 9:16 portrait frame。

這件事很重要。

短影音不是「把橫圖塞進手機」,也不是「用一張大圖在畫面裡滑」。每一格都要先被當成手機畫面來檢查:人物位置、字幕空間、主體大小、上下安全區都要能用。

GPT-SoVITS / 字幕 / 編碼 QA

這次踩最多坑的地方,不是分鏡,而是文字和聲音。

一開始我用中文經過 PowerShell inline / 命令列時,字幕和旁白文字會被轉成 ??? 或亂碼。這種錯很可怕,因為影片可能照樣輸出成功,但你最後看到的是一堆問號。

修正方式是:所有中文旁白與字幕,都先寫成乾淨的 UTF-8 JSON / ASS 檔,再由腳本讀檔處理。不要把中文硬塞進 PowerShell inline command,也不要讓命令列轉來轉去。

最終輸出前,我現在一定檢查:

  • 字幕裡沒有 ???
  • 沒有 Unicode replacement character。
  • JSON 是 UTF-8。
  • ASS 是 UTF-8。
  • final video 的字幕不是從亂碼檔燒進去的。

GPT-SoVITS 也有一個坑:某句可能有字幕,但沒聲音。

這不一定會在肉眼看 timeline 時立刻發現,因為字幕還在,畫面也在,但音訊那一句其實是空的。所以每句 TTS 生成後,我會檢查 raw / trimmed 音訊的秒數、RMS、peak。

如果秒數異常短、RMS 幾乎沒有、peak 太低,就不能直接放進合成。那句要重生,不然成片會出現「字幕在講話,聲音消失」的斷裂感。

ASS 字幕也踩了一個很細的坑。

我要微調字幕位置時,override tag 必須插在 Text 欄位裡,不可以插到 margin 欄位。插錯地方不一定會直接報錯,但字幕位置會跑偏,而且 debug 起來很煩。

這種小坑很不華麗,但它們就是自動化流程能不能穩定的差別。

這次的輸出結果

這次輸出的是 9:16 直式短影音,1080×1920、30fps,長度約 55 秒。

下載影片檔

第一幀 QA 封面:

第一幀 QA 封面

Contact sheet:

旁白先行短影音流程的 contact sheet

這張 contact sheet 對我來說很重要。它不是拿來好看的,而是拿來快速檢查:

  • 分鏡順序是不是符合旁白情緒。
  • 人物和場景有沒有明顯漂移。
  • 哪幾格可能太像、太空、太難讀。
  • 字幕安全區是否可能擋住主體。
  • final video 前有沒有需要重切 panel。

我會繼續改進的地方

這條流程已經可以出片,但還不是終點。

接下來我會想繼續改幾件事:

  1. 讓旁白段落切分更自動,不要每次靠人工直覺修。
  2. 把每句 TTS 的秒數、RMS、peak QA 報表做成更直覺的表格。
  3. 讓 panel mapping 可以半自動產生,再由我只改少數不順的地方。
  4. 針對 9:16 安全區做更嚴格的畫面檢查,避免字幕和臉撞在一起。
  5. 把 contact sheet QA 做成固定流程,每次 final video 前一定輸出。

這次最大的收穫不是多做了一支影片,而是流程順序終於對了。

旁白先行,畫面第二。

聲音先穩,分鏡才穩;時間軸先穩,影片才不會像硬湊出來的。

← 回工作檯