在 AI 視頻跨過懸崖之前,我這樣把一篇文章做成短片
這個系列一直在說 AI 視頻還沒跨過懸崖。那在它跨過去之前,我每天怎麼把一篇文章變成一支能發佈的短片?先看成品,再把這條產線整個攤開給你看 — 包括一個可能讓你意外的事實:這支影片裡,沒有一格是 AI 生成的動態畫面。
前言
這個系列,前兩篇一直在談 AI 視頻「還沒跨過懸崖」。第一篇〈前三秒驚艷,第五秒穿幫〉說,在它跨過去之前,最聰明的做法不是乾等一鍵生成的按鈕,而是沿著崖壁先搭一條走得通的路;上一篇〈2026 年中 AI 視頻工具評比〉,則比較了現在這些工具各自站在哪。
這一篇,我把話說得更白:我每天就是這樣,把一篇文章,做成一支能直接發佈的短片。先看成品 — 下面這支一分多鐘的直式短片,講的是我之前寫的〈AI Native 產品為什麼難〉。
aire 編輯室為〈AI Native 產品為什麼難〉做的短片,直式、有旁白、有字幕,節奏跟著聲音走它看起來像那麼回事:有旁白、有字幕、節奏踩在聲音上。但我得先講一句可能讓你意外的話 — 這支「影片」裡,沒有一格是 AI 生成的動態畫面。
我刻意繞過了 AI 視頻
為什麼? 因為第一篇講的那三道牆,我現在還跨不過去,而我要的是「穩定交件」,不是「驚艷一次」。所以我做了一個很務實的取捨:把影片拆成 AI 已經能穩定做好的零件,自己把它們接起來。畫面用靜態場景卡(可控、零漂移)、聲音用 TTS、節奏靠一段對時的工程。
這支短片,本質是「資訊型短片」,不是 AI 動態視頻;但它能準時、可重複、聽話地產出,而那正是我現在需要的。其實這正好示範了第一篇那個三角:可控性,是最貴的一角 — 既然最貴,我乾脆暫時繞過它,把它從 AI 手上拿回自己手上。
這條產線長什麼樣
一句話:文章 → 場景卡 → 配音 → 對時 → 合成。拆開講,是六步。
整條產線:左邊是內容(文章拆成旁白與場景卡),右邊是工程(配音、對時、合成),AI 散在每一道工序裡(by aire 編輯室)
一、把文章拆成旁白(旁白即字幕)
先把那篇文章,濃縮成 14 句旁白。這裡有條我自己定的紀律:每一句旁白,就是螢幕上那一格的字幕 — 旁白即字幕,一一對應。這 14 句接下來會在好幾個地方被引用到,所以從頭到尾必須對齊;只要有一句不一致,字幕、聲音、時間軸就會開始錯位。
二、畫面:HTML 場景卡,不去抽 AI 影片
14 句旁白,對應 14 張場景卡。我不去 AI 抽動態影片,而是用 HTML + CSS 把每一格畫成一張靜態卡(aire 的霧紫版型),再用 Chrome headless 截成 1080×1910 的直式 PNG(這是我這條產線沿用的工作尺寸,接近標準的 1080×1920;最終平台播放時視覺上幾乎沒有差別)。
為什麼這樣? 因為它可控到極致:文字一字不差、配色永遠一致、絕不會漂移、要改一句只要改一行。這是我把「可控性」這一角,實實在在拿回自己手上的方法。而且這些場景卡用的,跟你現在讀的這篇文章、跟系列每一張封面,是同一套霧紫設計語言 — 同一組顏色、同一款襯線字。產線的另一個好處,就是品牌一致性可以內建在模板裡,而不必每次重調。字幕也在這一步,就直接烤進圖裡(版型底部預留了一塊字幕安全區),所以字幕跟畫面天生同步,不必到後面再去對。
三、配音:TTS 文字朗讀
把旁白文字丟進剪映的文字朗讀(或同類的 TTS),導出一支 mp3。這一步幾乎零成本,而且想換語氣、改個字,重念一次就好。
四、對時:整條產線最費工的一段
這是最容易被低估、卻最關鍵的一步。問題在於:我一開始是用「每秒約 4 個字」去估每一格的時間的,但真人語速跟估算永遠對不上 — 配音念完是 78 秒,我估的是 75.6 秒,而且每一句的快慢還都不一樣。
更麻煩的是,這 2.4 秒的誤差不會乖乖待在片尾,它會一路累積:第三格慢了半秒,後面每一格的字幕就跟著全部慢半秒,到結尾整個對不上嘴。所以對時不能只對總長度,得逐格去對。
硬幹的話,你得在剪映裡一格一格手動拖到對齊,很痛。我把它自動化了:用 ffmpeg 的 silencedetect 去偵測配音裡的每一個停頓(句與句之間的靜音),取每段靜音的中點當作「候選切點」。再用每句旁白的字數比例,先猜每一格大概切在哪、然後把這個猜測「吸附」到最近的那個真實停頓上(限制在 ±1 秒內、保持遞增、每格至少撐 1.2 秒;萬一附近沒有停頓,就保留原本的估算)。
講白話:字數比例負責「大概在哪」,silencedetect 負責「精準對到聲音的縫」。 兩個合起來,才能讓每一格畫面,剛好卡在旁白換句的那個呼吸點上。要特別說一句:這裡用的不是語音辨識、不是 Whisper,只是偵測「哪裡變安靜」 — 便宜、穩、而且夠用。
五、合成:ffmpeg 把它接起來
有了每一格的真實秒數,用 ffmpeg 的 concat 把 14 張場景卡按秒數串成一支幻燈片式的影片、掛上那支配音 mp3,最後把整支長度鎖定在配音的長度上。這樣畫面跟聲音保證同時結束,不會有一邊拖著尾巴。輸出,就是你上面看到的那支成片。
六、字幕的備援:SRT 與 ASS
前面說字幕已經烤進 PNG 了,那為什麼還要另外存 SRT 跟 ASS? 兩個原因。一是這台機器的 ffmpeg 沒裝 libass,沒辦法在合成時用字幕濾鏡即時燒字幕,把字幕烤進圖是目前最穩的繞法。二是順手另存一份 SRT/ASS,將來換一台機器、或想把字幕丟回剪映當可編輯的軌,都還有可攜的版本在。能用的零件,順手留一份備份,以後省事。
這條產線,到底划不划算
老實算一筆帳。這套流程裡,真正花我時間的,是最前面那一步 — 把一篇長文,提煉成 14 句「念出來順、看著也順」的旁白。那是真正需要動腦、也最需要我自己把關的部分,大概佔掉整個製作八成的心力。
剩下的,幾乎全是機器的事:場景卡是腳本批次生成、配音是 TTS 很快能完成的事、對時跟合成是一行指令跑完。換句話說,一旦旁白定稿,把它變成一支成片的邊際人工成本就很低;要改一句話、換個配色、重念一次,也都是分鐘級的事。
這就是「產線」這個詞的重點:它不是讓你某一次做得特別驚艷,而是讓你每一次都能穩定、低成本地交出一支「能用」的片子。驚艷拚的是運氣的上限,產線拚的是可靠度的下限 — 你看,又繞回了這個系列從頭到尾的那句話。
AI 在這條產線裡,到底做了什麼
你看到這裡可能會問:這樣講下來,AI 好像只負責配音? 其實不是。
AI 在這條產線上,不是那個「一鍵生成整支影片」的魔法按鈕,而是散在每一道工序裡的助手:跟我一起把長文拆成有節奏的旁白、幫每一格想標題文案、配音的 TTS、甚至連 silencedetect 那段對時腳本,都是我跟 AI 一起寫出來的。它不負責「變出影片」,負責「讓我這條產線跑得更快、更省力」。
這跟整個系列想講的,其實是同一件事:在工具還沒跨過懸崖之前,真正的槓桿,不是去賭那個還不穩定的一鍵生成,而是看清楚 AI 現在已經能穩定做好哪些零件,再把它們接成一條你自己掌控的產線。
結語
等到哪天 AI 視頻真的迎來它的 ChatGPT 時刻(第一篇講的那一刻),這條產線會變嗎? 會,但大概只會變一格:現在「靜態場景卡」那一步,會換成真正生成的動態鏡頭。可是它的骨架 — 拆旁白、配音、silencedetect 對時、concat 合成 — 多半還是這一套。先把骨架搭穩,等那個零件成熟了,直接換上去就好;而到那天,你早就比別人多練了幾百支片的手感,不會手忙腳亂。
說到底,我並不是因為看好「靜態卡做影片」這件事本身才這樣做,而是因為它現在就能穩定交件。等更好的零件來了,我換掉它毫不留戀 — 但在那之前,我不想停在崖底乾等。
而下一篇〈我真的拿錢去抽卡了:Veo 3.1 與 Kling 3.0 實測〉,我就真的拿錢去驅動了那個「會生成動態鏡頭」的零件:從一句 prompt 到一顆能用的鏡頭,中間到底卡著多少眉角。
關於這支成片:影片、場景卡與對時腳本,是 aire 編輯室為〈AI Native 產品為什麼難〉那篇實際做出來的產物。工具鏈為 Chrome headless(場景卡渲染)+ 剪映/TTS(配音)+ ffmpeg、ffprobe(silencedetect 對時與合成),全程在一台 Mac 上完成,沒有用到任何雲端影片生成服務。
常見問題
這支影片是 AI 生成的嗎?
不是 AI 生成的動態影片。它是把文章拆成 14 句旁白、每句配一張用 HTML 做的靜態場景卡(Chrome headless 截圖)、加上 TTS 配音與字幕,再用 ffmpeg 串成的「資訊型短片」。AI 參與的是拆旁白、想文案、TTS 配音,以及輔助撰寫對時腳本,而不是「變出畫面」。
旁白跟畫面怎麼對時?
先用字數比例估算每一格的時間,再用 ffmpeg 的 silencedetect 偵測配音裡的停頓、取每段靜音的中點當切點,把估算「吸附」到最近的那個真實停頓上(限制在 ±1 秒內、保持遞增、每格至少 1.2 秒)。用的是偵測靜音,不是語音辨識。
為什麼字幕用「烤進圖片」而不是合成時即時燒字幕?
因為這台機器的 ffmpeg 沒裝 libass,合成時無法用字幕濾鏡即時燒錄。把字幕在做場景卡那一步就畫進 PNG 最穩,還能保證字幕與畫面天生同步;另外會另存一份 SRT/ASS 當可攜的備援版本。
沒有 AI 動態畫面,這還算 AI 視頻嗎?
看你怎麼定義。如果「AI 視頻」指純模型生成的動態鏡頭,那這不是;如果指「用 AI 當主力工序、把內容做成影片的產線」,那這就是。在動態生成還沒能穩定交件的此刻,這條產線是務實的中間解 — 等模型成熟,只要把「靜態場景卡」那一格,換成真正生成的鏡頭即可。
📚 收進你的工具
For AI Reading Era把這篇文章交給你日常用的工具——做研究、整理筆記,或當 AI 的 context。