技術筆記
把圖與聲音組成一支繪本影片:FFmpeg 實戰
從「影片其實就是影格加音軌」談起,說明繪本影片的合成流程怎麼拆解,FFmpeg 在這條線裡扮演什麼角色,以及語速、頁間停頓、字幕這些實際加工怎麼做。
圖有了、每一句話的語音也有了,最後一步是把它們組成一支可以播放的繪本影片。這篇的主角和前幾篇不一樣——它不是模型,是一個純工具:FFmpeg。但要用好它,得先理解「影片」到底是什麼。
技術前導:影片其實就是影格加音軌
影片聽起來很複雜,拆開來其實只有兩樣東西:一連串快速播放的圖片(影格),配上一條對齊的聲音(音軌)。
所謂「合成一支影片」,講白了就是三個決定:每張圖要顯示多久、聲音從哪裡開始、最後把畫面和聲音封裝成一個檔案。繪本影片尤其單純——一頁就一張圖,這張圖要停留的時間,剛好就是這頁語音的長度。想通這一點,後面的操作就都有了依據。
統概:合成流程怎麼拆
與其一次算出整支片,實務上會先把每一頁各自做成一小段「場景片」,再串起來。
這樣拆有兩個好處。一是好除錯:哪一頁圖聲不同步、語音出錯,直接看那一段就好,不用在一支長片裡大海撈針。二是可以只重做出錯的那一頁:改了第 8 頁的語音,只要重生第 8 頁的場景片,再重新串接,不必整支重算。對一本十幾頁、要反覆微調的繪本來說,這個差別很有感。
FFmpeg:這條流程裡唯一的純工具
前面的文字、圖、語音都靠模型,只有這一步是確定性的工具。FFmpeg 做的事可以歸成一句話:吃進輸入,照濾鏡鏈加工,再編碼封裝輸出。
FFmpeg 的指令一開始看起來像天書,但只要抓住三塊就讀得懂大半:-i 是輸入(圖片、音檔)、-filter_complex 是濾鏡鏈(實際的加工步驟)、-map 是對應(哪個畫面配哪條聲音)。把一張圖用 -loop 定格成影片、接上該頁的語音,就是一段場景片。
常見加工:語速、停頓、字幕
繪本影片實際會用到的濾鏡不多,但都很實用:
- 語速調整:
atempo可以在不改變音高的前提下加速或放慢語音。念太快或太慢,用它微調,聲音不會變得像卡通或低沉。 - 頁間停頓:
apad在每段語音後面補一小段靜音,翻頁之間才有喘息,不會一句接一句擠在一起。 - 字幕與縮放:把文字疊上畫面、把不同尺寸的圖統一縮放對齊,也都在濾鏡這一層完成。
這些加工都是「可預期」的——同樣的指令,結果永遠一樣。這也是為什麼把它放在流程最後:前面模型生成的東西有隨機性,到了 FFmpeg 這關,一切都變回精確可控。
為什麼值得自己搭這一段
你可能會問,直接用影片剪輯軟體不是更快嗎?對一支片是這樣,但繪本系統要的是自動化:故事一次十幾頁、之後還會一直出新書,靠人手動剪不可能規模化。把合成寫成一段 FFmpeg 流程,程式就能在生完圖和語音之後,自動把整支片組出來。理解了「影片=影格+音軌」和「先分段再串接」這兩件事,你就掌握了這條流程的全貌——從一句文字,到一支能播放的繪本影片,中間的每一步都不再是黑盒子。