Если у вас нету места, его не добавит compress.Кто нищий, тот всегда найдёт. Помните допайповую эпоху? Сначала кодируем в большой качественный промежуточный файл. Потом ещё раз кодируем в следующий большой качественный промежуточный файл. Наконец кодируем в маленький итоговый качественный файл.
Не знаю, долго ли ещё StarLight будет всё делать через runner, но оказалось, что и runner можно отправить в трубу!
По какой-то причине runner может экспортировать в pipe только rawvideo и только yuv420p. Да и то добавляет в начало стрима текст (53 буквы, "типа это я runner это сделал").
Вот командный файл PipedRunner.cmd: StarLight (Runner) | Обрезка | Dione (FFmpeg) | Кодирование (FFmpeg, -c:v libx265)
Входное видео 848x480 16:9, StarLight 2x 1696x960, Dione 1920x1080, ffmpeg -c:v libx265.
chcp 1251
REM mode con: cols=120 lines=1
pushd "%TVAI_MODEL_DIR%"
(
runner input.mkv - ^
--start-frame-idx 0 --end-frame-idx 99999 ^
--ffmpeg-encoding "-f rawvideo -pix_fmt yuv420p" ^
"--ffmpeg-preproc-filters" "setparams=range=limited:color_primaries=bt709:color_trc=bt709:colorspace=bt709" ^
--upscale-factor 2 --max-gpu-mem 12 --model_name astra
) ^
| skipbytes.cmd 53 ^
| TOPAZffmpeg "-hide_banner" "-nostdin" ^
-f rawvideo -pixel_format yuv420p -video_size 1696x960 -framerate 24000/1001 -i - ^
"-sws_flags" "spline+accurate_rnd+full_chroma_int" ^
"-filter_complex" "setsar=1,tvai_up=model=dtd-4:scale=1:preblur=0:noise=-0.25:details=0:halo=0:blur=0:compression=0:estimate=8:prenoise=0.02:blend=0.2:grain=0.02:gsize=2:device=0:vram=1:instances=0,scale=1920:1080:flags=spline:threads=0" ^
"-strict" "-1" "-pix_fmt" "yuv444p10" "-f" "yuv4mpegpipe" "-" 2>nul ^
| ОБЫЧНЫЙffmpeg.exe -hide_banner -nostdin ^
-f yuv4mpegpipe -i - ^
-pix_fmt yuv420p10 -aspect 16:9 ^
-bsf:v hevc_metadata=colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 ^
-c:v libx265 -x265-params sar=1:aq-mode=2:deblock=-3,-3:crf=19.0:interlace=0 ^
-y output.mkv 2>nul
Конечно, можно автоматизировать получение размера видео, умножение его на 2 (или 3) и т.д. и т.п.
skipbytes.cmd
@if (@X)==(@Y) @end /* JSCRIPT COMMENT BLOCK -- DO NOT REMOVE
@echo off
setlocal
if "%~1"=="" (
echo Usage: skipbytes ^<N bytes to skip^>
exit /b 1
)
cscript //nologo //E:JScript "%~f0" %1
exit /b %errorlevel%
*/
var skip = parseInt(WScript.Arguments(0), 10);
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;
// Read binary from stdin
var bytesSkipped = 0;
while (!stdin.AtEndOfStream) {
// Read raw bytes as a single chunk
var chunk = stdin.Read(4096); // JScript returns a binary-safe VT_UI1[] string
if (bytesSkipped < skip) {
// Skip bytes from this chunk
var remain = skip - bytesSkipped;
if (chunk.length <= remain) {
// Skip whole chunk
bytesSkipped += chunk.length;
continue;
} else {
// Skip part of chunk, output the rest
stdout.Write(chunk.substr(remain));
bytesSkipped = skip;
}
} else {
// Already fully skipped – output all
stdout.Write(chunk);
}
}