影片的時間一致性:修復後的畫面為什麼會閃爍、紋理游移、出現鬼影
處理後的影片為什麼會閃爍、紋理游移、拖出殘影,補幀後又為什麼出現重影;怎麼量測,以及實測過的 FFmpeg 解法。
重點速覽
時間一致性是指:除非物體真的變了,它在前後幀裡看起來都應該一樣。影片處理常以四種方式破壞它:亮度閃爍、細紋理閃動或蠕動、移動物體後方拖出殘影,以及補幀產生的重影。每種問題成因不同,解法也各不相同。
- 時間一致性是指:除非物體真的變了,它在每一幀裡看起來都應該一樣。處理過程會以四種方式破壞它:閃爍、紋理游移、拖影和重影。
- 大部分閃爍和紋理游移的根源,是每一幀各自處理,因為幀與幀之間的細微差異會導致不同的判斷。
- 多幀平均能去除雜訊,但會把會動的東西抹糊。在我們的測試中,對一段移動的空拍鏡頭做單純平均,分數比帶雜訊的輸入還差;自適應濾鏡則比帶雜訊的輸入高出 2.7 dB。
- 用混合幀的方式補幀會產生重影;在平穩的空拍鏡頭上,運動補償補幀得到 35.5 dB,混合只有 29.6 dB,但到了晃動的素材上,優勢就不見了。
- 時間上的問題要以原片幀率、在播放中判斷。單看一幀,這些問題全都看不出來。
時間一致性是什麼
一張靜態圖片只要看起來對一次就好。影片的一幀除了本身要對,還得和前後幀一致,因為眼睛對變化非常敏感:某個紋理在這一幀靜止、下一幀卻動了,就算每一幀單獨看都沒問題,播放時也會看成閃動。
| 問題 | 看到的現象 | 常見原因 |
|---|---|---|
| 亮度閃爍 | 整個畫面忽明忽暗 | 燈光本身在閃、老膠片的曝光差異、逐幀自動調整 |
| 紋理閃動或蠕動 | 場景靜止,細節卻在翻騰、游移 | 模型在每一幀各自重建紋理 |
| 拖影 | 移動物體後面拖著一個淡淡的複本 | 多幀平均時沒考慮運動 |
| 重影與變形 | 新產生的幀裡出現兩個疊在一起的複本,或邊緣彎曲 | 用混合方式補幀,或運動匹配得不好 |
| 頓挫或卡頓 | 動作是跳的,不連貫 | 幀率轉換或掉幀 |
頓挫和掉幀比較屬於時序問題,而不是一致性問題;請見 如何修復卡頓、不流暢的影片。
逐幀處理為什麼會閃爍
影像模型和濾鏡並不知道第 101 幀接在第 100 幀後面。逐幀分開執行時,它們每次都重新判斷一次。幀與幀之間的雜訊、壓縮和細微移動各不相同,判斷結果也就跟著不同:銳化器強調的邊緣略有差異,生成式模型編出的毛孔和葉子略有差異,自動調色選的色階也略有差異。Lai 等人在 2018 年的論文中總結得很清楚:把影像處理演算法獨立套用到每一幀,結果在時間上往往不一致。
解法有三種:
- 改用能看到多幀的模型。 多幀與循環式修復模型會對齊鄰近幀,重複使用它們一致的部分,所以細節出現一次之後就會固定下來。AI 修復為什麼看起來像塑膠 說明了它們的原理和失效的地方。
- 事後讓結果穩定下來。 盲時間一致性的研究拿原始影片和逐幀處理的結果,產生一個更穩定的版本。Lai 的方法用短期與長期時間損失訓練循環網路;Deep Video Prior 只用這一支影片訓練網路,不需要大型資料集,也不需要光流。
- 調低強度。 逐幀處理對畫面改得越少,能閃的東西就越少。這就是為什麼輕度設定在播放中常常比強力設定穩定,即使強力設定在靜止畫面上看起來更好。
影片生成器產出的片段很常出現紋理蠕動,相關做法請見 如何減少 AI 生成影片的閃爍。
亮度閃爍與 deflicker 濾鏡
整個畫面的閃爍,通常來自素材本身,而不是處理過程:
- 燈光。 Sony 的閃爍說明指出,較舊的日光燈每秒閃 100 或 120 次,LED 照明則可能每秒閃數百到數千次。快門速度和這個週期對不上時,每一幀捕捉到的是燈光的不同時刻。
- 膠片。 膠片掃描的每一幀都是分開曝光的,曝光與密度的細微差異在播放時就會變成忽明忽暗;完整的清理流程請見 8mm 與 16mm 膠片掃描。
- 自動調整。 自動曝光、自動白平衡,或任何逐幀自動調整色階的濾鏡,都可能在幀與幀之間來回擺盪。
FFmpeg 的 deflicker 濾鏡會量測每一幀的平均亮度,算出鄰近幀的移動平均,再把每一幀往這個平均值縮放。我們在一段內建的範例片段上加入強烈的閃爍,量測相鄰兩幀之間平均亮度的跳動幅度:
| 版本 | 幀間跳動(標準差) |
|---|---|
| 原始片段 | 0.27 |
| 加入閃爍 | 8.71 |
deflicker=size=5:mode=pm | 1.30 |
deflicker=size=9:mode=am | 1.22 |
deflicker=size=15:mode=pm | 0.67 |

視窗越寬,平滑得越多,但也會壓平你想保留的亮度變化,例如淡入淡出、雲飄過去,或有人開了燈。先從預設的 5 幀開始:
ffmpeg -i input.mp4 -vf "deflicker=size=5:mode=pm" -c:v libx264 -crf 18 -c:a copy deflickered.mp4deflicker 拉平的是整個畫面。畫面裡一條條滾過去的橫紋,是捲簾快門在燈光閃爍途中捕捉造成的,它修不了;這種情況真正的解法是拍攝時讓快門速度配合燈光。
時域降噪與鬼影拖尾
時域降噪威力很大,因為雜訊每一幀都在變,場景大多不變。問題就出在「大多」:只要有東西在動,把同一個像素位置跨幀平均,就會混進一個已經移走的物體,在後面留下鬼影。
我們在一段平穩的空拍鏡頭上加入雜訊,比較單純的多幀平均,和一種在像素變化太大時就停止平均的自適應時域濾鏡:
| 濾鏡 | 對乾淨片段的 PSNR |
|---|---|
| 帶雜訊的輸入 | 30.3 dB |
tmix=frames=3(3 幀單純平均) | 29.8 dB |
tmix=frames=5(5 幀單純平均) | 28.1 dB |
hqdn3d=8:6:12:9(空間加時域) | 33.0 dB |
atadenoise(自適應時域平均) | 33.1 dB |
單純平均的分數比什麼都不做還差:雜訊是少了,但移動的地景被抹糊,損失比收穫還多。拍攝對象移動得更快時,拖影一眼就看得出來。

所以要用能適應運動的時域濾鏡,時域強度保持適中,並檢查移動中的邊緣,不要只看平坦的背景:
ffmpeg -i input.mp4 -vf "atadenoise=0a=0.1:0b=0.2:1a=0.1:1b=0.2:2a=0.1:2b=0.2" -c:v libx264 -crf 18 -c:a copy denoised.mp4這些門檻值決定 atadenoise 什麼時候認定像素變了、停止平均。門檻越高,去掉的雜訊越多,出現拖影的風險也越大。空間降噪的部分請見 降噪、去區塊、銳化與色彩校正。
補幀:複製、混合、運動補償、AI
補幀是產生攝影機沒有記錄的幀,用來提高幀率或做慢動作。中間幀有四種做法:
- 複製 重複前一幀。不會編出新東西,但動作還是跟原本一樣頓。
- 混合 把前後兩幀疊在一起。所有會動的東西都出現兩次,各剩一半強度,這就是重影。
- 運動補償補幀 估算每一塊像素往哪裡移動,把它畫在路徑的中點。做得好時,結果是位置正確的單一清晰物體;在估算失準的地方,例如邊緣、遮擋處和重複圖樣,邊緣會彎曲、碎片會撕裂。
- AI 補幀 用神經網路估算運動並合成畫面。RIFE 直接估算中間光流,能在 GPU 上即時執行;FILM 用單一網路,專門處理幀與幀之間的大幅運動。
為了量測前三種,我們從兩段內建的範例片段中抽掉幾幀,用 FFmpeg 重建,再拿重建的幀和真實的幀比較:
| 方法 | 平穩空拍鏡頭,4×(6 到 24 fps) | 晃動的手持鏡頭,2×(15 到 30 fps) |
|---|---|---|
複製(fps) | 26.9 dB | 24.2 dB |
混合(framerate) | 29.6 dB | 25.5 dB |
運動補償(minterpolate,mci) | 35.5 dB | 25.2 dB |

有兩個重點。在平穩的運動上,運動補償大幅勝出,比混合高出約 6 dB。在晃動的手持素材上,每種方法都很吃力,因為補幀假設兩幀之間的運動是平滑的,而晃動每一幀都在改變方向。攝影機有晃動的話,先用 影片防抖 或其他防抖工具穩定畫面,再補幀。
FFmpeg 的運動補償模式,加上場景切換偵測,避免在剪接點之間產生變形過渡:
ffmpeg -i input.mp4 -vf "minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1:scd=fdiff" -c:v libx264 -crf 18 -c:a copy smooth60.mp4它在 CPU 上很慢:在我們的筆電上,把 5 秒 24 fps 的 1080p 轉成 60 fps 花了 134 秒。混合版本很快,用在重影不容易看出來的慢速平移鏡頭上沒問題:
ffmpeg -i input.mp4 -vf "framerate=fps=60" -c:v libx264 -crf 18 -c:a copy blend60.mp4補幀瑕疵集中在幾個可以預料的地方:快速移動的手腳、旋轉的輪子、柵欄等重複圖樣、彼此交錯經過的物體,以及剪接點。到底該不該提高幀率,請見 如何把影片轉成 60 fps。
怎麼檢查時間一致性
這些問題沒有一個能從靜止畫面判斷。下面三項檢查能抓出大部分:
- 以原片幀率、在 100% 縮放下觀看。 看平坦區域有沒有紋理蠕動,看移動中的邊緣有沒有拖影,看新產生的幀有沒有重影。
- 把每一幀的平均亮度畫成圖。 平滑的線條沒問題;鋸齒狀就是閃爍:
ffmpeg -i input.mp4 -vf "signalstats,metadata=print:key=lavfi.signalstats.YAVG:file=yavg.txt" -f null -這個文字檔會列出每一幀的平均亮度(YAVG),可以直接貼進試算表畫圖。
- 看相鄰兩幀的差異。 在靜止的場景裡,處理後片段的變化不應該比原片多。紋理閃動會在平坦區域顯示成一片斑點:
ffmpeg -i input.mp4 -vf "tblend=all_mode=difference,eq=contrast=4" -c:v libx264 -crf 18 -an diff.mp4對原片和結果各跑一次同樣的指令,再拿來比較。
新的變化
- 影片模型取代影像模型。 影片超解析度與修復現在會在許多幀之間傳遞資訊,而不只處理一對一對的幀;以擴散為基礎的放大器則加入時間層,或直接從影片生成器出發,讓生成的細節在時間上保持一致。
- 補幀越來越快,也能處理更大的運動。 即時光流估算(RIFE)和處理大幅運動的單一網路設計(FILM),讓補幀從離線實驗走進了播放器和剪輯軟體。
- 一致性是量出來的,不是假設的。 盲時間一致性的研究讓業界有了量化閃爍的方法,它正逐漸成為與銳利度並列的公開指標。
KwaFlux 的做法
- 智能修復會參考鄰近幀。 在 畫質修復 中,智能修復 會借助鄰近幀,而不是每一幀從零重建。場景修復 的各類型是逐幀處理的,所以匯出前請在播放中預覽。
- 補幀最後執行。 畫質修復工作台依序執行 去隔行、畫質修復,然後是 智能補幀,所以新的幀是從修復後的畫面產生的。可以選 2x(預設)、3x、4x,或 30 到 144 fps 之間的 自定義 目標幀率,模式有 通用 和 快速。
- 畫質檢測會為流暢度打分數。 它的 流暢度 一項衡量「卡頓、抖動、閃爍,以及幀率是否夠用」,也能建議補幀的目標幀率。
- 用真實幀率預覽。 AI 預覽預設最高 15 fps;判斷閃爍或紋理閃動之前,先選 跟隨原幀率。開啟補幀的預覽會以輸出幀率播放。
- 先修掉素材本身的閃爍。 燈光或膠片造成的亮度閃爍,請在匯入之前先執行上面的
deflicker指令,再修復和補幀。
問題排解
| 問題 | 可能原因 | 解決方法 |
|---|---|---|
| 修復後的紋理在平坦區域翻騰 | 逐幀處理編出細節 | 改用多幀修復模型、調低強度、以原片幀率判斷 |
| 整個畫面忽明忽暗 | 素材本身的燈光或曝光閃爍 | 用 5 幀視窗的 deflicker;下次拍攝讓快門配合燈光 |
| 移動物體後方拖著淡淡的複本 | 時域平均沒有處理運動 | 改用 atadenoise 這類自適應濾鏡;調低時域強度 |
| 新產生的幀裡有重影 | 用混合方式補幀 | 改用運動補償或 AI 補幀 |
| 新產生的幀裡邊緣彎曲或碎片撕裂 | 遮擋處或重複圖樣上的運動估算失準 | 調低倍數,或這個鏡頭不補幀 |
| 兩個鏡頭之間出現變形過渡 | 跨剪接點補幀 | 開啟場景切換偵測,或先把片段剪開 |
| 晃動的素材補幀後更難看 | 幀與幀之間運動方向反轉 | 先防抖,再補幀 |
做不到的事
- 沒有任何補幀能找回攝影機沒記錄到的動作。 新的幀是估算出來的,快速或被遮住的動作只能用猜的。
- deflicker 修不了捲簾快門造成的橫紋,也修不了畫面各處不一樣的亮度變化。
- 時域平滑分不開快速運動和雜訊。 推得太用力,移動中的細節就會被抹糊。
- 多幀模型能減輕紋理閃動,但在對齊失敗的地方去不掉,例如水面、煙霧或人群。
結語
時間一致性,決定了影片看起來是「處理過的」還是「拍出來的」。從素材端修掉閃爍,選用會跨幀參考的濾鏡和模型,強度保持適中,每個結果都以原片幀率在播放中判斷。
KwaFlux 在你自己的 GPU 上執行智能補幀。AI 處理在你自己的 GPU 上執行,媒體檔案不會為了處理而上傳。可在 Windows 10(64 位元,1809 或更新版本)、Windows 11,以及搭載 Apple Silicon 的 macOS 12 或更新版本上執行。預覽不需要帳號:任何片段都能渲染 1、3 或 5 秒的預覽。僅在匯出、轉換、檔案修復和從連結下載檔案時需要登入並購買付費方案。
用你自己的真實素材實測效果
下載 KwaFlux,付費前先在自己的素材上免費預覽效果——無需註冊,在你的 GPU 上處理,媒體檔案不上傳。 影片預覽可選 1、3或5 秒;防抖預覽可選 5、15或30 秒。
常見問題
AI 處理過的影片為什麼會閃爍?
因為模型逐幀獨立處理,每次的判斷都略有不同,紋理和亮度就在幀與幀之間變來變去。重複使用對齊後鄰近幀的多幀模型能減輕這個問題,調低強度也有幫助。
FFmpeg 能去除影片閃爍嗎?
部分可以。deflicker 濾鏡能拉平整個畫面的亮度變化,在我們的測試中把幀間跳動減少了約 85%,但修不了滾動的橫紋或紋理閃動。那些需要更穩定的素材,或多幀修復模型。
補幀為什麼會產生鬼影?
因為把兩幀混合會讓移動中的物體出現兩次,而運動補償方法在誤判運動的地方(例如遮擋處或重複圖樣)會讓邊緣撕裂或彎曲。快速、晃動或部分被遮住的運動最難處理;請見 如何把影片轉成 60 fps。
時域降噪比空間降噪好嗎?
要看運動情況。在靜止的區域,多幀平均能去除雜訊又不會讓細節變軟;在運動的區域,單純平均會留下拖影,在我們的測試中分數甚至低於帶雜訊的輸入。自適應時域濾鏡結合了兩者,分數最高。
防抖要在補幀之前還是之後做?
之前。補幀假設兩幀之間的運動是平滑的,攝影機晃動會打破這個假設。在我們的手持測試中,運動補償對單純混合的優勢就沒了;先防抖,才能給它平滑的運動來處理。
參考資料
- Lai et al., "Learning Blind Video Temporal Consistency," ECCV 2018 (per-frame processing is inconsistent over time; short-term and long-term temporal losses) (2026-10-22 查閱)
- Lei, Xing, and Chen, "Blind Video Temporal Consistency via Deep Video Prior," NeurIPS 2020 (trained on one video pair, no optical flow) (2026-10-22 查閱)
- Huang et al., "Real-Time Intermediate Flow Estimation for Video Frame Interpolation" (RIFE) (2026-10-22 查閱)
- Reda et al., "FILM: Frame Interpolation for Large Motion" (single network for large motion) (2026-10-22 查閱)
- Chan et al., "BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment" (propagation across frames) (2026-10-22 查閱)
- Zhou et al., "Upscale-A-Video: Temporal-Consistent Diffusion Model for Real-World Video Super-Resolution" (temporal layers in a diffusion upscaler) (2026-10-22 查閱)
- Sony, "Understanding flicker" (fluorescent lights at 100 or 120 Hz, LED lighting faster; shutter speed and the flicker cycle) (2026-10-22 查閱)
- FFmpeg Filters Documentation (`deflicker`, `tmix`, `atadenoise`, `framerate`, `minterpolate`, `signalstats`, `tblend`) (2026-10-22 查閱)
