之前原本是想分享補幀後的效果給別人看,後來才發現這其實不算「錄製」,比較接近直接把影片壓制成檔案。
如果你的電腦沒辦法即時跑補幀,可以先用這個方式把影片輸出成檔案,再透過播放器播放。
這篇當作參考看看就好,外面應該已經有現成工具把這些流程整合好了。這邊算是用比較「本土煉鋼」的方式自己串起來做壓制。
我本身也不是這方面的專家,所以整體流程和參數可能還有不少優化空間。
這邊會用到 vspipe(VapourSynth 內附的工具)以及 ffmpeg。ffmpeg請自行安裝。
因為 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。如果有興趣可以找望路資源去錄製看看。
-c y4m 這些參數的來源。hevc_nvenc 的參數說明。