只給一段錄音,AI自動配畫面剪成短影音:Pexels加Whisper實作紀錄
直接回答
只有錄音檔沒有影像也能做短影音:用Whisper轉逐字稿加逐字時間戳,把句子按語意分組,每組配一組英文查詢詞去Pexels免費影片API抓直式素材,裁成1080x1920接起來再燒字幕。我用82.2秒的錄音實作,扣掉開頭8.6秒空白、結尾4.4秒辨識幻聽、中間4.0秒氣口,產出65.5秒成品共16個鏡頭,全程26分鐘,素材成本0元。
只丟一個 82.2 秒的錄音檔,沒有任何影像素材,26 分鐘後拿到一支 65.5 秒的成品:16 個直式空景鏡頭、繁中字幕、畫面跟著內容走。素材成本 0 元。
流程是:Whisper 轉逐字稿加逐字時間戳,把句子按語意分組,每組配一組英文查詢詞去 Pexels 免費影片 API 抓直式素材,裁成 1080x1920 加慢推鏡,接起來燒字幕再疊回旁白。
中間踩了 4 個坑,其中一個讓 2 秒的素材變成 317 秒、單檔 123MB。
為什麼是「只給錄音」這個起點
一般做短影音的順序是先拍再剪。但很多內容其實是「話先想好了,畫面還不知道要拍什麼」,尤其是講觀念、講心得這種沒有具體場景可拍的題材。
這時候如果還卡在「要先去拍素材」,那支影片就永遠不會出生。
所以我想試的是反過來:話先錄,畫面交給程式去配。
82.2秒錄音檔,0個影像素材,26分鐘產出65.5秒成品,16個鏡頭,素材成本0元。畫面來自Pexels免費影片API,每小時200次額度,一支影片用15到20次。
—
第一步:辨識完不要直接用,先量兩頭的音量
Whisper 轉完 82.2 秒的錄音,逐字稿看起來很完整。但把音量印出來看,開頭 8.6 秒是 -45 到 -52dB,就是底噪,沒有人在講話。
結尾更麻煩。辨識結果最後多出這幾句:
- 都沒有了
- 感覺是兩個人
- 也沒見過
- ARTMRO
- 感謝觀看
量那段的音量只有 -47 到 -51dB,跟開頭的底噪同一個層級。也就是說,這幾句是 Whisper 在靜音上自己生出來的,錄音的人根本沒講。
這件事如果沒抓到,最後成品會多出十幾秒沒有聲音、字幕卻在跑的畫面。
真正有內容的範圍是 8.62 到 77.84 秒,再扣掉中間 4.0 秒的氣口,剩下 65.2 秒。
—
第二步:鏡頭長度照語意,不要照秒數
我先拆了一支 IG 上同類型的影片:33.6 秒、17 個鏡頭、平均 2 秒換一次。
但如果直接照 2 秒切,出來的東西會有機械感,因為講話的節奏本來就不平均。
改成照語意分組之後,16 個鏡頭的長度從 1.5 秒到 6.7 秒都有:
- 「我是一個失敗的人」1.5 秒,配一個人的背影,話落下去畫面就切走
- 「我不值得被愛」1.6 秒,配窗簾自己在飄的空房間
- 「可是很多時候 / 消失的並不是那個事情的全部 / 而只是它原來的一個形狀」三句同一個意思,共用一個山霧的畫面 6.7 秒
短句自己一個短鏡頭,長的鋪陳三句共用一個畫面。節奏跟著話走,不跟著碼表走。
—
第三步:查詢詞要錨定實際的句子
第一版我把查詢詞按比例平均分給字幕行,結果畫面跟話對不起來:講「AI 的能力」配到咖啡廳的女生。
原因很單純:平均切不管每句話多長,錨點會一路飄掉。
改成每個鏡頭錨定一句實際的字幕文字,畫面從那句開始、到下一組的錨點為止,才對得上。
—
踩到的 4 個坑
坑 1:zoompan 的 d 不是總長度。
我給每個鏡頭加了慢推鏡,寫成 d=dur*30(我以為是總畫格數)。實際上 d 的意思是「每一張輸入畫格要輸出幾張」。
結果 2 秒的素材被撐成 317 秒,單個鏡頭的檔案 123MB,整條線卡在那邊磨了 15 分鐘。影片素材要用 d=1,zoom 會沿著畫格自己累積。
坑 2:Python 呼叫 Pexels 會 403。
urllib 的預設 User-Agent 被擋。要帶 User-Agent: curl/8.4.0 加 Accept: */*。順帶一提,不帶金鑰時大約五個查詢會通一個(打到 CDN 快取),但那不可靠,還是要申請金鑰。
坑 3:查詢詞會帶回調性完全相反的東西。
有一支講「放下」的內容,我搜 smoke drifting slow 想要煙霧慢慢飄散,抓回來是一輛跑車燒胎的煙。抽格才看到。
做法是抓完全部鏡頭之後拼成一張長圖一次看完,不要只看數量對不對。
坑 4:查詢詞盡量避開有臉的素材。
Pexels 的人物素材多半是外國面孔,配上自己的故事會很出戲。空景(海、霧、光影、走路、窗、雲)安全得多,而且更容易對上抽象的內容。
—
畫面怎麼對上話
實際配出來的對照,可以感覺一下這個做法的效果:
| 講的話 | 配的畫面 |
|---|---|
| 都在躺平 | 亂掉的床 |
| 事業上有阻礙跟困擾 | 烏雲 |
| 平常要花費非常多時間 | 時鐘特寫 |
| 我們以前是一起 | 桌上的舊照片 |
| 靠到凌晨一點多 | 夜裡的筆電 |
| 那種戰友感 | 兩個人的剪影 |
| 很慶幸有這個能力 | 日出 |
zoompan的d參數是「每張輸入畫格輸出幾張」不是總畫格數。寫成d=dur*30會把2秒素材撐成317秒、單檔123MB。影片素材要用d=1,zoom沿畫格自己累積。
—
結論:畫面可以外包,節奏不行
這條路走得通,而且成本是 0。但真正決定成品好不好看的不是素材庫,是兩件事:鏡頭長度有沒有跟著語意走,以及每個畫面有沒有對上它那句話。
這兩件事程式做不到,是人要先想清楚的。我目前的查詢詞還是人工對的,因為自動翻譯出來的英文在素材庫幾乎搜不到東西,而畫面對不對題就是這種片型的成敗。
要往下一步走,我會先解決素材的味道問題:改成抓自己手機裡的隨手拍建素材庫,讓畫面真的是自己的生活,而不是別人的庫存。