跳至主要內容

命令行进阶讲解

Justin62628大约 6 分钟

注意

此页说明属于进阶内容,请优先阅读高级内容详解

SVFI 支持使用命令行调用

提示

为避免可能的性能损耗,使用纯OLS命令行执行任务速度最快。
在可能的情况下,使用全VSPipe工作流速度最快。

环境搭建

  1. 在SVFI安装根目录新建steam_appid.txt,填写如下内容

1692080

提示

填写该文本文件将使SVFI以独立应用程序模式启动,以避免Steam客户端的干扰。

可实现软件多开软件安装位置迁移软件版本保留等特殊操作。

  • 软件版本保留:在steam操作回退到指定分支后,复制整个SVFI安装文件夹并确保steam_appid.txt存在,以后即可点击该文件夹下的SVFI.Professional或者SVFI.Community运行该版本的SVFI。
  • 建议关闭偏好设置的强制退出选项,以避免SVFI任务结束后导致所有OLS进程退出。
  1. 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该参数为gbrpgbrp16le

管道输出

SVFI支持输出rgb24rgb48beYUV444P10的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进行仅压制处理,输出高精度rgb48beffmpeg进行压制

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管道进行补帧处理、输出Y4Mffmpeg进行压制

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以避免y4mrgb时出现的精度丢失
  • 建议先使用SVFI配置任务参数并启动任务后,使用Configs文件夹下生成的Config.ini进行命令行任务
上次编辑于:
贡献者: Justin62628,DAMNCRAB,obj-277