FFmpeg non transcodifica in tempo reale


0

Ho creato una build di registrazione per un amico che assomigli alla mia, ma non riesco a far funzionare le cose in tempo reale nonostante l'hardware sufficiente (per quanto posso dire).

Specifiche di sistema: 8600K, GTX 1050ti, 16Gb RAM, 1tb 860 EVO

Comando di prova (aggiornato per semplicità):

ffmpeg -y -hide_banner -thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&24df76f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-map 0 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Left\Left.ts `
-map 1 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Right\Right.ts

L'obiettivo di questo comando è di registrare 2 output sincronizzati separati. Tuttavia, per un motivo o per l'altro, questo comando non sta transcodificando il video in tempo reale, il che è un grosso problema quando si tenta di registrare, non semplicemente convertire un file. Quando ometto una delle due uscite o se dimezzo la risoluzione di ciascun ingresso / uscita, tutto funziona in tempo reale. Questo mi farebbe credere che ci sia un collo di bottiglia nel sistema da qualche parte, ma quando si controlla tutto in Task Manager nulla è nemmeno vicino al limite (codificatore GPU, CPU, RAM e SSD con un utilizzo inferiore al 30%).

Inoltre, quando provo a registrare entrambi i flussi in un video 4K60 tramite OBS, le cose funzionano perfettamente, come in tempo reale. Quindi non capisco come la transcodifica di due stream 1080p60 in FFmpeg sarebbe più intensiva di uno stream 4K60 in OBS ...

Da allora ho sostituito la 1050ti con una GTX 1080 senza differenze di prestazioni. Questo mi porta a credere che la CPU sia in errore. Sembra che FFmpeg stia davvero colpendo solo 1-2 thread ... un modo per costringerlo a usarne di più? -threads non sembra avere alcun effetto indipendentemente da dove l'ho iniettato nel comando. La cosa davvero strana è che ho un comando molto simile, ma sto facendo due stream 4K60 rispetto a due stream 1080p60 con GTX 1080 e 6800K ... Per quanto posso dire, l'8600K ha prestazioni per thread più elevate rispetto al 6800 K quindi non sono sicuro di come riesco a cavarmela con molto di più.

Qualsiasi intuizione sarebbe molto apprezzata.


Non sta usando più thread perché stai comprimendo nvenc.
masticare calzini

La maggior parte di quella CPU è probabilmente audio, in realtà. Puoi provare a rimuovere tutti i flag relativi all'audio e metterli -anal loro posto per testarlo.
masticare calze

Grazie per il commento, ho provato a rimuovere tutto l'audio e ho inserito -an. Le cose stanno ancora iniziando molto al di sotto in tempo reale e poi si insinuano, sembra che occorrerebbero circa 40-50 minuti ... Quello che non capisco è se uso lo stesso comando sul mio PC (cambio le schede di acquisizione) tutto funziona fin dall'inizio e ha una CPU teoricamente inferiore. Potrebbe essere qualcosa a che fare con questa CPU priva di hyper threading? nvenc sta codificando ma la CPU sta ancora decodificando, giusto? L'encoder GPU non viene quasi toccato.
Agile

I tuoi input sono dshow, quindi non c'è molto "decodifica" di cui parlare, principalmente operazioni di I / O di memoria.
Gyan,

Non dedurrebbe che la CPU non sia necessaria molto nel processo? Il motivo per cui gli ho suggerito di ottenere un 8600K rispetto agli 8700K è che ho pensato che la GPU stesse facendo tutto il lavoro pesante. Sto solo confrontando il suo PC con il mio e davvero l'unica differenza notevole è che i miei hyperthread della CPU mentre il suo no. È tutto molto frustrante, sono stato qui circa un milione di volte con FFmpeg e alla fine l'ho capito.
Agile

Risposte:


0

Il problema era con le schede di acquisizione, ne ho estratto uno dal suo sistema e l'ho messo nel mio e sono stato in grado di replicare il problema. Questo non è riproducibile con nessuna delle mie altre carte di acquisizione e ne ho 4.

Il problema sembra essere causato dal bloatware del motore di flusso di Avermedia memorizzato sulla scheda stessa. La scheda mostra in realtà come due dispositivi, uno senza motore di streaming nel nome e uno con, se si seleziona quello con i problemi vengono alleviati ma ancora presenti. Ad ogni modo visto che posso confermare che il problema è inesistente su HD60 Pro di Elgato, abbiamo effettuato un ordine per 2 di questi.

In retrospect bloatware / firmware non convenzionale spiega facilmente i problemi estremamente difficili da diagnosticare. Fortunatamente abbiamo acquistato Avermedia Live Gamer HD 2s e possiamo rivenderli per un rimborso completo, buon viaggio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.