命令行进阶讲解
注意
此页说明属于进阶内容,请优先阅读高级内容详解
SVFI 支持使用命令行调用
提示
为避免可能的性能损耗,使用纯OLS命令行执行任务速度最快。
在可能的情况下,使用全VSPipe工作流速度最快。
环境搭建
- 在SVFI安装根目录新建
steam_appid.txt
,填写如下内容
1692080
提示
填写该文本文件将使SVFI以独立应用程序模式启动,以避免Steam客户端的干扰。
可实现软件多开、软件安装位置迁移、软件版本保留等特殊操作。
- 软件版本保留:在steam操作回退到指定分支后,复制整个SVFI安装文件夹并确保
steam_appid.txt
存在,以后即可点击该文件夹下的SVFI.Professional
或者SVFI.Community
运行该版本的SVFI。 - 建议关闭偏好设置的强制退出选项,以避免SVFI任务结束后导致所有OLS进程退出。
- 在SVFI安装根目录启动命令提示符
cmd
(若安装位置不在系统盘,则无需管理员权限),输入one_line_shot_args -h
并回车,应能够看到以下类似内容:
usage: #### SVFI CLI tool by Jeanna #### [-h] -i INPUT --config CONFIG -t TASK_ID [--concat-only] [--extract-only] [--render-only]
[--force-args FORCE_ARGS [FORCE_ARGS ...]] [-p] [--pipe-in] [--pipe-out] [--pipe-iwPIPE_IN_WIDTH]
[--pipe-ih PIPE_IN_HEIGHT] [--pipe-in-fps PIPE_IN_FPS]
[--pipe-in-pixfmt {rgb24,rgb48be,rgb48le,gbrp,gbrp16le}] [--pipe-rgb]
[--pipe-colormatrix {470bg,170m,2020ncl,709}]
To enhance Long video/image sequence quality
options:
-h, --help show this help message and exit
Basic Settings:
-i INPUT, --input INPUT
Path of input video/image sequence folder. leave '-' for stdin.
--config CONFIG Path of config, should be .ini or .json file.
-t TASK_ID, --task-id TASK_ID
13-digit Task id, can not leave blank
--concat-only Concat Chunk only
--extract-only Extract input to frames Only
--render-only Render only without VFI process
--force-args FORCE_ARGS [FORCE_ARGS ...]
Force to update config. Examples: --force-args output_chunk_cnt=-1 interp_start=-1
-p, --preview [Dilapidated] Preview Settings.
Pipe Settings:
Set the follow parameters when '-mid' is assigned, or you will encounter exceptions.Output Y4M at YUV444P10
--pipe-in This enables OLS to obtain input data from stdin, use with '-i -'
--pipe-out This enables OLS to pipe y4m or rgb/rgb48be output to stdout
--pipe-iw PIPE_IN_WIDTH
Width of input raw RGB, effective and mandatory when --pipe-in appointed
--pipe-ih PIPE_IN_HEIGHT
Height of input raw RGB, effective and mandatory when --pipe-in appointed
--pipe-in-fps PIPE_IN_FPS
Input stream FPS, effective and mandatory when --pipe-in appointed
--pipe-in-pixfmt {rgb24,rgb48be,rgb48le,gbrp,gbrp16le}
Pixel format of input raw RGB input, effective and mandatory when --pipe-in appointed
--pipe-rgb Pipe pixel format of rgb or rgb48be raw data to stdout, otherwise pipe y4m. Effective when --pipe-out appointed
--pipe-colormatrix {470bg,170m,2020ncl,709}
Colormatrix for RGB-YUV Conversion, effective when --pipe-in appointed and --pipe-rgb NOT appointed
典型使用场景说明
多开SVFI
one_line_shot_args
(以下简称OLS
)程序在完成以上配置后支持多开,支持多任务同步操作,请注意这可能会造成极大的资源占用。
三个必需参数:
--input
: 待进行画质处理的视频文件或图片序列所在文件夹--config
:SVFI GUI程序生成的配置文件,一般位于安装目录的Configs文件夹--task-id
:任务ID,非空的字符串,用于区分不同任务。
管道输入
SVFI支持从其他进程输入RGB流,目前支持rgb24,rgb48be,rgb48le,gbrp,gbrp16le
五种像素格式的裸流输入。
必须填写--pipe-in
以启用SVFI管道输入功能,并另行指定--pipe-iw
输入图像像素长,--pipe-ih
宽,--pipe-in-fps
输入流帧率(仅支持浮点型),--pipe-in-pixfmt
输入的像素格式。
提示
rgb48be,rgb48le,gbrp16le
表示输入数据为48位,16bit高精度输入。使用VSPipe输出RGB流,OLS接受RGB流时,若不确定VSPipe的RGB输出通道顺序,请指定ols的
--pipe-in-pixfmt
该参数为gbrp
或gbrp16le
。
管道输出
SVFI支持输出rgb24
或rgb48be
或YUV444P10
的Y4M流到stdout
中。
必须填写--pipe-out
以启用此功能,
- 若需要输出
YUV444P10
,请指定--pipe-colormatrix
用于SVFI进行RGB到YUV流的正确色彩转换。Y4M
输出为默认操作。 - 若要输出
RGB
流,请指定--pipe-rgb
,具体的输出像素格式由配置文件各选项控制,一般而言开启高精度工作流则输出rgb48
,非高精度工作流输出rgb24
。
强行指定SVFI使用的GPU编号
- 在SVFI界面内选择GPU下拉列表的第一项启动任务,生成任务配置文件,然后按照在线教程另外新建命令行cmd。
- 输入
set CUDA_VISIBLE_DEVICES=1
回车。 - 调用
OLS
,将指定在PCIE第二卡位的GPU运行SVFI。 - 这个方法可以解决使用int8量化时无法指定使用显卡的问题。
命令行示例
使用同一套设置批量处理文件夹内所有mp4、webm、gif文件
for %i in ("文件夹路径/*.mp4" "文件夹路径/*.webm" "文件夹路径/*.gif") do (one_line_shot_args.exe --input "%i" --task-id "%~ni" --config "SVFI_Config_vfi_sr.ini")
其中:
- 要在SVFI安装软件根目录下使用命令提示符
cmd
执行。 SVFI_Config_vfi_sr.ini
是通过点击高级设置下方导出设置按钮导出的设置文件。- 该操作会输出所有文件到配置文件中指定的文件夹。
ffmpeg->OLS->ffmpeg
示例一:使用
ffmpeg
进行高精度16bit拆帧、输入OLS
进行仅压制处理,输出高精度rgb48be
到ffmpeg
进行压制
ffmpeg -loglevel error -vsync passthrough -hwaccel auto -i test.mp4 -map 0:v:0 -sws_flags +bicubic+full_chroma_int+accurate_rnd -vf copy,format=yuv444p10le,format=rgb48be,minterpolate=fps=24.000:mi_mode=dup -f image2pipe -pix_fmt rgb48 -vcodec rawvideo - | one_line_shot_args.exe -i - --config "Configs/SVFI_Config_pipe_test.ini" -t pipe_2 --pipe-in --pipe-iw 1920 --pipe-ih 1080 --pipe-in-fps 24 --render-only --pipe-out --pipe-rgb --pipe-in-pixfmt rgb48be | ffmpeg.exe -y -vsync cfr -s 1920x1080 -vsync cfr -pix_fmt rgb48be -f rawvideo -r 24 -i - -preset:v slow -c:v hevc_nvenc -pix_fmt yuv420p -crf 16 output.mp4 -y -loglevel error -hide_banner -y
ffmpeg->OLS->OLS->ffmpeg
示例二:使用
ffmpeg
进行高精度16bit拆帧、输入第一个OLS
管道进行超分处理、输入第二个OLS
管道进行补帧处理、输出Y4M
到ffmpeg
进行压制
ffmpeg -loglevel error -vsync passthrough -hwaccel auto -i test.mp4 -map 0:v:0 -sws_flags +bicubic+full_chroma_int+accurate_rnd -vf copy,format=yuv444p10le,format=rgb48be,format=rgb24,minterpolate=fps=24.000:mi_mode=dup -f image2pipe -pix_fmt rgb48be -vcodec rawvideo - | one_line_shot_args.exe -i - --config Configs/SVFI_Config_pipe_1.ini -t pipe_1 --pipe-in --pipe-iw 960 --pipe-ih 540 --pipe-in-fps 24 --render-only --pipe-out --pipe-rgb --pipe-in-pixfmt rgb48be | one_line_shot_args.exe -i - --config Configs/SVFI_Config_pipe_2.ini -t pipe_2 --pipe-in --pipe-iw 1920 --pipe-ih 1080 --pipe-in-fps 24 --pipe-out --pipe-in-pixfmt rgb48be | ffmpeg.exe -loglevel error -hide_banner -y -vsync cfr -i - -preset:v slow -c:v hevc_nvenc -pix_fmt yuv420p -crf 16 output.mp4 -y
Vapoursynth->ffmpeg->OLS->ffmpeg
示例三:使用
Vapoursynth
对输入进行预处理、输入ffmpeg
进行Y4M
转高精度rgb48be
、转低精度rgb24
、输入OLS
处理并压制
使用的Vapoursynth
脚本input.vpy
:
import vapoursynth as vs
from vapoursynth import core
video = core.lsmas.LWLibavSource(r'test.mp4') # 960x540, 24fps
# DO SOMETHING
video.set_output() # output yuv
命令行:
vspipe input.vpy --y4m - | ffmpeg -loglevel error -vsync passthrough -hwaccel auto -i - -map 0:v:0 -sws_flags +bicubic+full_chroma_int+accurate_rnd -vf copy,format=yuv444p10le,format=rgb48be,format=rgb24,minterpolate=fps=24.000:mi_mode=dup -f image2pipe -pix_fmt rgb24 -vcodec rawvideo - | one_line_shot_args.exe -i - --config Configs/SVFI_Config_pipe_test.ini -t pipe_2 --pipe-in --pipe-iw 960 --pipe-ih 540 --pipe-in-fps 24
Vapoursynth->OLS->ffmpeg
示例四:使用
Vapoursynth
对输入进行预处理、输出RGB到OLS
并转RGB
给ffmpeg压制
使用的Vapoursynth
脚本input.vpy
:
import vapoursynth as vs
from vapoursynth import core
video = core.lsmas.LWLibavSource(r'test.mp4') # 960x540, 24fps
# DO SOMETHING
video = mvf.ToRGB(input=video, matrix="709", depth=8, kernel='bicubic')
video.set_output() # output gbrp
命令行:
vspipe input.vpy - | one_line_shot_args.exe -i - --config "Configs/SVFI_Config_pipe_test.ini" -t pipe_2 --pipe-in --pipe-iw 1920 --pipe-ih 1080 --pipe-in-fps 24 --pipe-out --render-only --pipe-in-pixfmt gbrp --pipe-rgb | ffmpeg.exe -y -vsync cfr -s 1920x1080 -vsync cfr -pix_fmt rgb24 -f rawvideo -r 24 -i - -preset:v slow -c:v hevc_nvenc -pix_fmt yuv420p -crf 16 output.mp4 -y -loglevel error -hide_banner -y
提示
- 使用管道时尽量保证精度对齐,尽量使用
y4m
以避免y4m
转rgb
时出现的精度丢失 - 建议先使用SVFI配置任务参数并启动任务后,使用
Configs
文件夹下生成的Config.ini
进行命令行任务