iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
自我挑戰組

一天一招,快速上手 mpv-lazy系列 第 28

Day28:壓制超分與補幀:效能不夠就先算完再播

  • 分享至 

  • xImage
  •  

之前原本是想分享補幀後的效果給別人看,後來才發現這其實不算「錄製」,比較接近直接把影片壓制成檔案。

如果你的電腦沒辦法即時跑補幀,可以先用這個方式把影片輸出成檔案,再透過播放器播放。

這篇當作參考看看就好,外面應該已經有現成工具把這些流程整合好了。這邊算是用比較「本土煉鋼」的方式自己串起來做壓制。
我本身也不是這方面的專家,所以整體流程和參數可能還有不少優化空間。

使用說明

這邊會用到 vspipe(VapourSynth 內附的工具)以及 ffmpegffmpeg請自行安裝。

因為 vspipe 只會輸出影像,不包含聲音,所以音訊需要另外從原始影片接進來。

# 請開 command line 在 D:\mpv-lazy 操作,聽說 powershell 很容易遇到奇怪問題
vspipe -c y4m "k7f_zenRecord.vpy" - | ffmpeg -i - -i "原片.mp4" -map 0:v -map 1:a -c:v h264_nvenc -preset p5 -rc vbr -cq 23 -b:v 5M -c:a copy -y output_with_audio.mp4

VapourSynth 腳本範例如下:

import vapoursynth as vs
from vapoursynth import core
import k7sfunc as k7f
video_in = core.lsmas.LWLibavSource(source=r"原片.mp4")
#video_in = core.ffms2.Source(source=r"原片.mp4")

clip = video_in
clip = k7f.FMT_CTRL(clip, h_max=1080)
clip = k7f.UAI_NV_TRT(clip, model_pth="the_database_AnimeJaNaiV2L1_x2_fp16_op17.onnx", fp16_qnt=True, gpu=0, gpu_t=2, st_eng=True)
clip = k7f.FMT_CTRL(clip, h_max=2160)

fps_in = video_in.fps.numerator / video_in.fps.denominator

clip = k7f.RIFE_NV(clip, model=426, fps_in=fps_in,fps_num=5, gpu=0, gpu_t=2)
if not (clip == video_in) :
    clip.set_output()

你會發現原片.mp4放置兩個位置。而且沒辦法外面帶參數,但我目前也只能做到這樣。說不定會有更好的方式。

這種方式輸出後的影片檔案通常都會滿大的,因此即時補幀還是有它的優勢:不用事先產生一個容量很大的成品檔案,播放時即時處理即可。

不過如果電腦效能不足、沒辦法順暢即時補幀,那麼先離線處理並輸出成影片,也是一種可行的做法。

怎麼真實錄製?

可以用 OBS 錄製螢幕畫面,不過錄製也會吃顯卡效能。所以你設定還滿吃緊的話,可能錄製出來可能也會lag。如果有興趣可以找望路資源去錄製看看。

相關文章


上一篇
Day27:我一路用過的播放器
下一篇
Day29:mpv 透過捷徑套用不同設定
系列文
一天一招,快速上手 mpv-lazy30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言