影片加速:setpts=0.5*PTS 只改畫面,聲音要另用 atempo(0.5~100),輸出幀率不夠還會丟格

影片加速其實是兩件事:畫面用 setpts 改每一格的時間戳記(0.5*PTS 就是 2 倍速),聲音要另外用 atempo 改速度,兩邊倍率對不上,影像和聲音就會越播越錯開。再加上輸出幀率沒設好會丟畫格,所以先搞懂這三個步驟,再挑適合你的做法。
哈囉!又到了快樂的教學時光。這篇不教你按哪個軟體的按鈕,而是把「加速」背後在動什麼講清楚,之後不管你用剪輯軟體還是 ffmpeg,都知道每個數字為什麼這樣填。想找更多剪輯與特效基礎,也可以逛逛 影片後製 分類。
加速到底改了什麼:時間戳記,不是畫面本身
影片的每一格畫面都帶著一個「顯示時間」(PTS,presentation timestamp)。ffmpeg 官方 wiki 的說法是:改變影片速度,就是改每一格的 PTS。原本在第 1 秒和第 2 秒出現的兩格,想變 2 倍速,就要把時間乘上 0.5,變成 0.5 秒和 1 秒出現。
聲音沒有「畫格」,它是一連串取樣,所以不能用同一招,要換成改速度的音訊濾鏡。這就是為什麼很多人把影片拉到 2 倍速、匯出後發現畫面快了、聲音還是原速,兩邊長度根本不一樣。
倍率對照表
畫面的 setpts 倍率是「速度的倒數」,聲音的 atempo 則直接填速度,下表是常見組合:
| 想要的速度 | 畫面 setpts | 聲音 atempo |
|---|---|---|
| 2 倍速 | setpts=0.5*PTS | atempo=2.0 |
| 4 倍速 | setpts=0.25*PTS | atempo=2.0,atempo=2.0 |
| 0.5 倍(慢動作) | setpts=2.0*PTS | atempo=0.5 |
| 0.25 倍 | setpts=4.0*PTS | atempo=0.5,atempo=0.5 |
setpts 的 0.5 與 2.0 兩個範例直接出自 ffmpeg 濾鏡文件(0.5 是快動作,2.0 是慢動作),其餘倍率只是同一個乘法:想快 N 倍,就乘上 1/N。
畫面加速:setpts 要重新編碼,還要注意丟格
最短的指令長這樣,2 倍速、不處理聲音:
ffmpeg -i input.mkv -an -filter:v "setpts=0.5*PTS" output.mkv
ffmpeg wiki 提醒兩件事。第一,setpts 屬於濾鏡,一定會重新編碼,沒辦法像換封裝那樣不動畫質(想複習可以看我們整理的 影片壓縮)。第二,這個方法為了達到想要的速度會丟畫格,想避免就把輸出幀率設得比輸入高,wiki 的例子是把 4 fps 的輸入加速到 4 倍,輸出就指定 16 fps。
用數字想比較直覺:一支 30 fps、10 秒的影片共有 300 格。加速 2 倍後長度變 5 秒,如果輸出還是 30 fps,只塞得下 150 格,另外 150 格就被丟掉;如果輸出改成 60 fps,5 秒剛好容納 300 格,一格都不會少。
這也是 ffmpeg 的 fps 濾鏡在做的事:它把影片轉成固定幀率,需要時複製或丟掉畫格,預設值是 25。所以要不要丟格,不是 setpts 決定,而是最後輸出幀率決定。想看 fps 參數怎麼取捨,我們在 GIF 製作 那篇也寫過同一個概念。
聲音加速:atempo 的 0.5~100 限制與串接
聲音用 atempo 濾鏡,ffmpeg 文件寫得很清楚:只接受一個參數,也就是速度,範圍是 0.5 到 100.0;速度大於 2 時,濾鏡會「略過部分取樣」而不是把它們混合,如果你介意,可以把多個 atempo 串在一起。文件的例子是 3 倍速,用兩個 atempo=sqrt(3) 串接。
要同時處理影音,ffmpeg wiki 給的是 filter_complex 寫法:
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv
慢動作的聲音反過來:0.5 倍就是 atempo=0.5。因為下限是 0.5,要慢到 0.25 倍,就得串兩個 atempo=0.5。atempo 的參數就只有速度這一個,要調倍率時照上面的表填就好。
先在瀏覽器預覽也可以
MDN 說明網頁影片的 playbackRate 屬性:1.0 是正常速度,小於 1.0 變慢,大於 1.0 變快,它是用來做快轉和慢動作的控制;音訊預設會修正音高,Gecko 在 0.25 到 4.0 以外還會直接靜音。所以如果你只是想在網頁上提供倍速觀看,不需要重新輸出檔案;但要產出一支「本身就是 2 倍速」的影片,還是得回到上面的 setpts 與 atempo。
慢動作:乘 2.0 會變卡,補幀要另外做
把 setpts 設成 2.0*PTS 就是慢一倍,但畫格數沒變、時間拉長,等於每格停得更久,看起來會一格一格跳。ffmpeg wiki 提到可以用 minterpolate 濾鏡做動態補償補幀(也叫 optical flow),範例把幀率補到 120:
ffmpeg -i input.mkv -filter:v "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=120'" output.mkv
補出來的畫格是演算法推算的,快速運動或畫面遮擋時可能出現殘影,使用前要自己逐段檢查。如果你想用外掛做更細的慢動作,可以參考我們以前寫的 Twixtor 超級變速,但那是舊版教學,介面請以你現在的版本為準。
另外,如果你的目的不是整支加速,而是想要「卡卡的、節奏感很強」的抽幀,那是另一種做法,請看 抽幀是什麼。要設定專案幀率,則先看 DaVinci Resolve 專案設定。

我們會怎麼做:能用內建功能,就不先找外掛
先講我們的立場:變速這件事,剪輯軟體內建的變速功能做得到的,就不用先找外掛,我們建議先用內建,不夠再談外掛;只有「批次處理一堆素材」或「放進流程自動化」才值得寫指令。
多數人會卡在三個地方:只改畫面忘了聲音、輸出幀率沒設高、慢動作直接乘 2.0 結果很卡。假設你是只剪一兩支短片的人,我們不建議你為了加速學指令,內建功能比較省時間;假設你每週要處理幾十支素材,或要把流程寫成腳本,ffmpeg 的 setpts 加 atempo 才有明顯回報。
還有一點:畫面節奏比特效數量重要。整支影片都 2 倍速,觀眾可能連重點都來不及看,不如選真正拖的段落加速(過場、等待、重複動作),保留說話與重點動作的原速,影片反而更好看。
輸出前檢查清單
- 畫面倍率是不是速度的倒數(2 倍速用 0.5,不是 2)。
- 聲音有沒有同步處理,atempo 是否在 0.5~100.0 範圍內,超過 2 倍時要不要串接。
- 輸出幀率有沒有設得夠高,避免丟畫格。
- 快速段落有沒有出現動態殘影或不自然的卡頓。
- 匯出後影片與聲音的長度是否一致。
如果你所在的團隊每天要處理大量影音素材,想看看哪些步驟可以自動化,也可以先約 30 分鐘免費諮詢,聊聊你們的影音流程怎麼導入 AI 工具;只是自己剪片的話,照上面的清單檢查就夠了。

參考資料
企業 AI 導入諮詢
公司想導入 AI 卻不知道從哪開始?約 30 分鐘免費諮詢
留下聯絡方式,顧問會先了解你們的團隊與流程,再一起找出最值得先用 AI 改善的環節。方便的話,在下方寫上公司名稱與產業。
六指淵特效教學網編輯團隊,2015 年起以友善的中文教學分享 After Effects、Premiere、Photoshop、特效合成與 MG 動態設計,讓特效沒有距離。









