Собираю мозаику через FFMPEG:
ffmpeg -hide_banner -loglevel warning \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -i 'SERVER (1)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -i 'SERVER (2)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:14 -i 'SERVER (3)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:12 -i 'STREAM (1)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:08 -i 'STREAM (2)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:04 -i 'TEST-SERVER (Desktop)' \
-filter_complex "
nullsrc=size=1920x1080 [base];
[0:v] scale=640x540 [upperleft];
[1:v] scale=640x540 [uppercenter];
[2:v] scale=640x540 [upperright];
[3:v] scale=640x540 [lowerleft];
[4:v] scale=640x540 [lowercenter];
[5:v] scale=640x540 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][uppercenter] overlay=shortest=1:x=640 [tmp2];
[tmp2][upperright] overlay=shortest=1:x=1280 [tmp3];
[tmp3][lowerleft] overlay=shortest=1:y=540 [tmp4];
[tmp4][lowercenter] overlay=shortest=1:x=640:y=540 [tmp5];
[tmp5][lowerright] overlay=shortest=1:x=1280:y=540 \
" -c:v h264_nvenc -pix_fmt yuv420p -preset llhp -an -f nut - | ffmpeg -hide_banner -loglevel warning -i - -f decklink -pix_fmt uyvy422 -rtbufsize 1500M -an -r 25000/1000 'DeckLink Quad (3)' &
Не смотря на то, что пытаюсь использовать nvenc для кодирования потока, все равно получаю приличную загрузку процессора. При этом загрузка NVIDIA всего около 40%. Хочу оптимизировать скрипт, чтобы по максимуму все отрабатывало на NVIDIA. Поэтому хотел бы спросить, как сделать scale в этом скрипте на NVIDIA (ffmpeg собран с опцией --enable-libnpp)? Применить "железный" scale (тупо пишу вместо scale - scale_npp) не получается, скрипт валится с ошибками. Подскажите, возможно реализовать то, что я хочу?
И второй вопрос:
вот в этой части скрипта:
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:14 -i 'SERVER (3)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:12 -i 'STREAM (1)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:08 -i 'STREAM (2)' \
-hwaccel cuvid -f libndi_newtek -thread_queue_size 2048 -ss 00:00:04 -i 'TEST-SERVER (Desktop)' \
я использую опцию -ss {time}, потому что, пока потоки подгрузятся, появляется ощутимая задержка, причем пропорциональная. Минимальная задержка у последнего input, у предпоследнего она ощутимо больше и тд, а у первого максимальная задержка. Опция -ss {time} частично решает эту проблему, но это работает нестабильно. Чуть-чуть дольше прогружается поток и задержка увеличивается. Можно ли как-то сообщить ffmpeg, чтобы данные брались не из кеша, а как-бы live?