ENDERU
GitHub22 репозиторияDaily Tech4 подписчикаaudion.devвитрина продуктовRSSлента выпусков
← Все заметкиProjects

Консольная команда

English · Руководство · Операции · Пресеты · ИИ-агент

Содержание

vs_cli.cmd в корне программы запускает то же, что кнопки окна: пресет, профиль или службу, с теми же полями. Окно — лицо этой команды: всё, что оно запускает, оно запускает через неё, и первая строка каждого прогона в его журнале — готовая команда, которую можно повторить в консоли.

Команда нужна, когда пресет запускает не человек у окна: пакетный файл, другая программа, ИИ-агент, долгая ночь расчётов.

Команды

КомандаЧто делает
describeПрограмма, операции с полями, вариантами и умолчаниями, раскладка окна и что есть у машины для нейросетевых пресетов (machine: rtx, mlrt, neural) — одной строкой JSON.
runЗапустить операцию.
frameОдин кадр видео до и после пресета со значениями — двумя PNG.
list presets / encoders / profiles / pathsСтроки для чтения: пресеты с умолчаниями, 34 кодера, профили, папки программы.
mapКарта программы из её данных. --out ФАЙЛ пишет её в файл; --docs пишет справочные документы (OPERATIONS_* и таблицы этого и других руководств).
componentsVapourSynth, плагины, MLRT, FFmpeg, драйвер видеокарты; --latest добавляет свежие выпуски (GitHub спрашивается не чаще раза в сутки), --refresh — спросить сейчас.
plan --operation install_vapoursynthЧто скачает установщик: файлы, откуда, размер. Ещё install_vs_plugins, install_ffmpeg, install_mlrt. Ничего не скачивается.
formСервер форм окна: запрос JSON строкой на вход, ответ строкой на выход.
versionНомер программы.

--root ПАПКА перед командой называет другую копию программы; --language ru или en — язык журнала (без него — язык окна).

Запуск операции

.\vs_cli.cmd run --operation film_35mm
.\vs_cli.cmd run --operation film_35mm --set stock=500T --set intensity=1.2 --encoder prores_422hq
.\vs_cli.cmd run --operation shadow_denoise_sota --set vs_accel=cpu --source D:\Footage --target D:\Clean
.\vs_cli.cmd run --operation profile_run --set profile=filmic_warm_35mm --source D:\Footage\take.mov
.\vs_cli.cmd run --operation deband_safe --dry-run
.\vs_cli.cmd run --operation doctor
КлючЧто делает
--operation IDОперация: пресет, profile_run, profile_save или служба.
--source ПУТЬФайл или папка — все видео в ней и в её подпапках; без ключа — input\ программы.
--target ПУТЬПапка, в которую ложатся результаты; без ключа — output\.
--set ИМЯ=ЗНАЧЕНИЕПоле операции; сколько угодно раз. Поле, которое не названо, берёт своё умолчание.
--encoder ИМЯКодер из list encoders — на карточки кодера; --set карточки ложится поверх.
--params ФАЙЛПоля JSON-объектом {"имя": значение}; --set ложится поверх.
--dry-runКоманды vspipe и FFmpeg для каждого файла Источника, ничего не запускается.
--result ФАЙЛИтог в JSON, пишется при любом исходе.
--cancel-file ФАЙЛФайл, появление которого останавливает прогон.
--only mov,mxfТолько эти виды файлов Источника.
--live, --coloursДля того, кто читает вывод трубой: полоса кадров служебными строками, коды цвета оставлены.

Относительные --source и --target считаются от корня программы; --result, --params, --cancel-file — от папки того, кто зовёт.

Поля, которые есть у каждого пресета, — обработка, карточки кодера и прогон:

<!-- map:machine --> Эти поля стоят на каждой странице: обработка и карточки кодера одни на всё окно - заданные на одной странице, они заданы на всех.

ПолеВидПо умолчаниюВариантыЧто это
vs_accel Обработкавыборautoauto Авто, cpu Процессор, gpu ВидеокартаГде работает BM3D. Авто: на видеокарте, когда VapourSynth видит рабочее устройство Vulkan, иначе на процессоре. Остальные фильтры всегда идут на процессоре.
encode_family Кодеквыборx264x264 x.264, x265 x.265, prores ProRes, dnxhr DNxHRЧем записывается результат.
encode_backend Кодервыборcpucpu Процессор, nvenc NVIDIA, qsv QuickSync, amf AMFПроцессор или аппаратный кодер видеокарты. Аппаратный, не прошедший проверку на этой машине (СЕРВИС - Возможности оборудования), выключен. (видно, когда encode_family - одно из x264, x265)
encode_quality Качествовыбор1414 14, 17 17, 21 2114 - почти без потерь, для архива; 17 - потери почти незаметны; 21 - веб, прокси, просмотр. (видно, когда encode_family - одно из x264, x265)
encode_container Контейнервыборmp4mp4 MP4, mkv MKVФайл, в который пишутся x.264 и x.265. (видно, когда encode_family - одно из x264, x265)
prores_profile Профиль ProResвыборltlt LT, 422 422, hq HQLT достаточно для грейдинга; HQ - для кеинга и повторных проходов. (видно, когда encode_family = prores)
prores_wrapper Обёрткавыборmovmov MOV, mxf MXFMOV для Resolve и Final Cut; MXF для Premiere и Avid. (видно, когда encode_family = prores)
dnxhr_profile Профиль DNxHRвыборhqhq HQ, hqx HQX, lb LB, sq SQLB - низкий поток, SQ - стандарт, HQ - высокое качество, HQX - 10 бит. (видно, когда encode_family = dnxhr)
overwrite ПерезаписатьфлажокfalseСделать результат заново там, где он уже есть. Выключено: готовый файл пропускается.

Куда ложится результат. <Назначение>\<Палитра>\<пресет>_<кодер>\<папки Источника>\<имя>.<расш>; профиль - <Назначение>\Profiles\<профиль>_<кодер>\.... Имя исходника сохраняется. Готовый результат пропускается, если не включено Перезаписать. <!-- /map -->

Аппаратный кодер, который эта машина не прошла (СЕРВИС → «Возможности оборудования»), заменяется процессором, и строка [NOTE] об этом говорит. vs_accel что-то меняет только у пресетов с BM3D и нейросетевых; у остальных принимается и ничего не делает.

Значение проверяется до прогона. Число вне диапазона, вариант, которого у поля нет, поле, которого нет у операции, --dry-run у операции, которая не умеет говорить свои команды, — неверный вызов: код 2 и причина, ничего не запускается. Значение никогда не подвигается в диапазон молча.

JSON-значение из PowerShell. Поле со значением JSON (profile_values у profile_save) передаётся через --params ФАЙЛ: PowerShell портит кавычки JSON по пути в .cmd.

Кадр до и после

.\vs_cli.cmd frame --operation polaroid --source D:\Footage\take.mov
.\vs_cli.cmd frame --operation mild_denoise --set strength=strong --source D:\Footage\take.mov --at 0.25 --out D:\Look --max-width 0
КлючЧто делает
--operation IDПресет или profile_run с --set profile=ИМЯ.
--source ПУТЬВидео или папка — её первое видео.
--at ДОЛЯГде в ролике: доля длины от 0 до 1; без ключа — 0,5 (середина).
`--side both\before\after`Какие картинки: без ключа — обе.
--out ПАПКАКуда кладутся before.png и after.png; без ключа — ._runtime\frame\.
--max-width NКадр шире N уменьшается до N; без ключа — 1920, 0 — как есть (шумодав судят в 100 %).
--set, --paramsПоля, как у run.

Исполняется тот же .vpy с теми же значениями, что у прогона; в Назначение ничего не пишется. Ответ — одна строка JSON: before и after с path, frame, frames, width, height, fps; seconds, params и noise у шумодава. Пресет, который меняет число кадров (RIFE), читается на той же доле длины. Если не выходит — нет движка, нейросетевой пресет без MLRT, нет видео, — ok равен false, error говорит почему, код 1; неверный вызов — код 2.

Вывод

Журнал — обычные строки:

[PREFLIGHT] OK engine: installed
[PREFLIGHT] OK Source: 3 video(s) in D:\Footage
[RUN] preset: film_looks/film_35mm, encoder h264_crf14, BM3D auto
[FILE] 1/3 take_01.mov
[PROGRESS] take_01.mov [##########--------------]  42% 105/250 18.40 fps ETA 00:08
Frame: 105/250 (18.40 fps)
[OK] take_01.mp4: 48,210,334 B in 13.6 s
[DONE] 3 done, 0 passed over, 0 failed

[NOISE] mild_denoise: noise 5.34 / 3.44 / 2.75 (8-bit, Y/U/V) -> DFTTest sigma 57.1 — что шумодав измерил и что из этого сделал. [SKIP] — результат уже есть; [FAIL] — файл не вышел, следующий идёт дальше; [DRY RUN], [STOPPED], [REFUSED], [NOTE] говорят то, что говорят. Тот, кто читает вывод трубой, получает ещё служебные строки ::vs::{...} (started, progress, activity, finished); консоль — нет. Журнал каждого прогона — logs\<время>_<операция>.log, отчёт — report\<время>_<операция>\run_report.json и .md, рядом JSON каждого файла.

Итог и коды выхода

КодЧто значит
0Готово.
1Файл не вышел (остальные прошли).
2Неверный вызов или отказ до начала: нет движка, нет видео в Источнике, нейросетевой пресет без MLRT, MLRT без карты RTX, Источник только из RAW камер (движок его не читает). Причину говорят строки [PREFLIGHT] FAIL; ничего не пишется.
130Остановлено.

--result ФАЙЛ пишется при любом исходе:

{"operation": "film_35mm", "outcome": "done", "ok": true, "message": "Operation finished.",
 "processed": 3, "skipped": 0, "failed": 0, "parameters": {"stock": "250D", "...": "..."}, "seconds": 41.2,
 "log_file": "...", "source": "D:\\Footage", "target": "E:\\...\\output", "data": {"files": ["..."], "encoder": "h264_crf14"}}

outcome — done, failed, refused или stopped. Файл — .json вне Источника.

Куда ложится результат

<Назначение>\<Палитра>\<пресет>_<кодер>\<папки Источника>\<имя>.<расш> — Precision\, Film Looks\, Retro\, Restoration\; профиль — <Назначение>\Profiles\<профиль>_<кодер>\…. Имя исходника сохраняется. Результат пишется как <имя>.writing-<pid>-<метка>.<расш> и получает своё имя, только когда дописан. Готовый результат пропускается, если не --set overwrite=true, так что второй прогон в то же Назначение даёт done с processed 0.

Кодеры и карточки, которым каждый соответствует:

<!-- map:encoders -->

КодерКарточки
dnxhr_hqencode_family=dnxhr, dnxhr_profile=hq
dnxhr_hqxencode_family=dnxhr, dnxhr_profile=hqx
dnxhr_lbencode_family=dnxhr, dnxhr_profile=lb
dnxhr_sqencode_family=dnxhr, dnxhr_profile=sq
h264_amf_q14encode_family=x264, encode_backend=amf, encode_quality=14, encode_container=mp4
h264_amf_q17encode_family=x264, encode_backend=amf, encode_quality=17, encode_container=mp4
h264_amf_q21encode_family=x264, encode_backend=amf, encode_quality=21, encode_container=mp4
h264_crf14encode_family=x264, encode_backend=cpu, encode_quality=14, encode_container=mp4
h264_crf17encode_family=x264, encode_backend=cpu, encode_quality=17, encode_container=mp4
h264_crf21encode_family=x264, encode_backend=cpu, encode_quality=21, encode_container=mp4
h264_nvenc_q14encode_family=x264, encode_backend=nvenc, encode_quality=14, encode_container=mp4
h264_nvenc_q17encode_family=x264, encode_backend=nvenc, encode_quality=17, encode_container=mp4
h264_nvenc_q21encode_family=x264, encode_backend=nvenc, encode_quality=21, encode_container=mp4
h264_qsv_q14encode_family=x264, encode_backend=qsv, encode_quality=14, encode_container=mp4
h264_qsv_q17encode_family=x264, encode_backend=qsv, encode_quality=17, encode_container=mp4
h264_qsv_q21encode_family=x264, encode_backend=qsv, encode_quality=21, encode_container=mp4
h265_amf_q14encode_family=x265, encode_backend=amf, encode_quality=14, encode_container=mp4
h265_amf_q17encode_family=x265, encode_backend=amf, encode_quality=17, encode_container=mp4
h265_amf_q21encode_family=x265, encode_backend=amf, encode_quality=21, encode_container=mp4
h265_crf14encode_family=x265, encode_backend=cpu, encode_quality=14, encode_container=mp4
h265_crf17encode_family=x265, encode_backend=cpu, encode_quality=17, encode_container=mp4
h265_crf21encode_family=x265, encode_backend=cpu, encode_quality=21, encode_container=mp4
h265_nvenc_q14encode_family=x265, encode_backend=nvenc, encode_quality=14, encode_container=mp4
h265_nvenc_q17encode_family=x265, encode_backend=nvenc, encode_quality=17, encode_container=mp4
h265_nvenc_q21encode_family=x265, encode_backend=nvenc, encode_quality=21, encode_container=mp4
h265_qsv_q14encode_family=x265, encode_backend=qsv, encode_quality=14, encode_container=mp4
h265_qsv_q17encode_family=x265, encode_backend=qsv, encode_quality=17, encode_container=mp4
h265_qsv_q21encode_family=x265, encode_backend=qsv, encode_quality=21, encode_container=mp4
prores_422encode_family=prores, prores_profile=422, prores_wrapper=mov
prores_422_mxfencode_family=prores, prores_profile=422, prores_wrapper=mxf
prores_422hqencode_family=prores, prores_profile=hq, prores_wrapper=mov
prores_422hq_mxfencode_family=prores, prores_profile=hq, prores_wrapper=mxf
prores_ltencode_family=prores, prores_profile=lt, prores_wrapper=mov
prores_lt_mxfencode_family=prores, prores_profile=lt, prores_wrapper=mxf

<!-- /map -->

Остановка

--cancel-file ФАЙЛ: когда файл появляется, движок гасит vspipe и FFmpeg, убирает недописанный файл и оставляет готовые; итог — stopped, код 130. СТОП окна — этот файл.

Правлено 20.10.2026