È possibile utilizzare una GPU per codificare h264?


13

Mi chiedo se ottengo una scheda grafica migliore potrebbe accelerare la codifica h264 sulla mia macchina usando il freno a mano?

In tal caso, come posso sapere quale scheda grafica lo supporterà?

Sono consapevole che la GPU può eseguire la decodifica hardware di h264, ma non sono sicuro della codifica.


Correlati: Compressione video accelerata - in ogni caso, vuoi avere una scheda NVIDIA per questo ed essere disposto a spendere soldi.
slhck,

Un altro post di blog correlato: codifica i tuoi video usando la tua GPU
slhck,

Per la codifica h.264, il freno a mano utilizza l'encoder software x264 (videolan) . Alcune risposte sottostanti implicano che il freno a mano utilizza ffmpeg, che può utilizzare implementazioni x264 o hw (GPU). Sebbene questa vecchia domanda (ma ancora pertinente) probabilmente non sta chiedendo "come rendere più veloce il freno a mano", ma piuttosto "come rendere più veloce la codifica h.264". Le risposte avranno una durata di conservazione (alcune sono già scadute); ma per ora, se si esegue l'elaborazione ML e / o batch potrebbe essere necessario abbinare un'implementazione al proprio hardware
michael

In fin dei conti, ho trovato interessante questo commento di ffmeg : "Gli encoder hardware in genere generano output di qualità significativamente inferiore rispetto ai buoni encoder software come x264, ma sono generalmente più veloci e non usano molte risorse della CPU. (Cioè, richiedono un bitrate più elevato per rendere output con la stessa qualità percettiva, oppure producono output con una qualità percettiva inferiore allo stesso bitrate.) "
michael

Risposte:


7

Usando il freno a mano la risposta sarebbe no. Il freno a mano è un codificatore h.264 solo CPU, anche se ora è in grado di utilizzare OpenCL per il ridimensionamento video e ha un supporto per DXVA per la decodifica video.

La domanda collegata da Slhck menziona MediaCoder , ma richiede una scheda grafica Nvidia o una CPU Intel con un core grafico di seconda generazione.

Ci sono un paio di prodotti più vecchi che sono stati obsoleti, in particolare Badaboom e il software ATi Avivo.

Badaboom che potrebbe utilizzare i processori grafici Nvidia e Intel per accelerare il processo di codifica, ma ora è fuori uso e non supporta schede grafiche più recenti.

ATi aveva il proprio codificatore video che un tempo si chiamava "Avivo" prima di essere unito al pacchetto AMD Codec che includeva AMD Video Converter sebbene non fosse più disponibile.


Quindi al momento sto usando una CPU AMD, significa che per me è una perdita di tempo? Può essere una qualsiasi scheda NVIDIA - oh, quindi deve supportare CUDA?
Pietro,

Ho trovato questo link, en.wikipedia.org/wiki/CUDA , il che suggerisce che molte schede NVIDIA supportano CUDA.
Pietro,

Ho aggiornato la mia risposta con un collegamento al pacchetto software AMD che potrebbe aiutarti a utilizzare la GPU per codificare il video, ma richiede una scheda della serie HD2000 o superiore. Se hai una CPU particolarmente potente ma una scheda grafica economica, il freno a mano potrebbe essere ancora più veloce.
Mokubai

Badaboom è in esaurimento dal 18/04/2012.
HVS,

2
La risposta sopra non è / non è più corretta.
totaam

4

x264 ora supporta l'accelerazione di codifica OpenCL. Quanta accelerazione otterrai dipenderà dalle prestazioni della tua scheda grafica, sul mio GTS 450 non ne ottengo nessuna e con le schede più lente rallenta effettivamente la codifica. Le carte migliori possono aiutare. Tutto quello che devi fare è aggiungere --opencl alla riga di comando x264. Credo che il freno a mano faccia uso delle stesse librerie x264 e offra la stessa accelerazione OpenCL nelle nuove build.


Come dovrei usare l'accelerazione di codifica OpenCL?
Dr.jacky,

2

https://trac.ffmpeg.org/wiki/HWAccelIntro

FFmpeg fornisce un sottosistema per l'accelerazione hardware.

L'accelerazione hardware consente di utilizzare dispositivi specifici (generalmente una scheda grafica> o altri dispositivi specifici) per eseguire l'elaborazione multimediale. Ciò consente di utilizzare hardware dedicato per eseguire calcoli impegnativi liberando la CPU da tali calcoli. In genere l'accelerazione hardware consente a specifici dispositivi hardware (di solito la GPU) di eseguire operazioni relative alla decodifica e codifica di flussi video o al filtraggio di video.

Quando si utilizza FFmpeg lo strumento, la decodifica assistita da HW viene abilitata tramite l' -hwaccelopzione, che abilita un decodificatore specifico. Ogni decodificatore può avere limitazioni specifiche (ad esempio un decodificatore H.264 può supportare solo il profilo di base). La codifica assistita da HW è abilitata mediante l'uso di un codificatore specifico (ad esempio nvenc_h264). Il filtro L'elaborazione assistita da HW è supportata solo in alcuni filtri e in tal caso si abilita il codice OpenCL tramite un'opzione di filtro.

Esistono diverse API standard di accelerazione hardware, alcune delle quali sono supportate in parte da FFmpeg.

L'opzione "-hwaccel auto" consente di selezionare la decodifica accelerata basata su hardware da utilizzare per la sessione di codifica. Puoi aggiungere questo parametro con "auto" prima dell'input (se il tuo x264 è compilato con il supporto OpenCL puoi provare ad aggiungere il parametro -x264opts), ad esempio:

ffmpeg -hwaccel auto -i input -vcodec libx264 -x264opts opencl output

Siamo spiacenti, ma non ricordo come elencare tutte le opzioni disponibili per "-hwaccel".

Inoltre puoi provare questo: https://wiki.archlinux.org/index.php/Hardware_video_acceleration


Non sembra che questo risponda specificamente alla domanda, sebbene sembri utile. Che ne dici di aggiungere alcuni dettagli che mostrano come ffmpeg e i suoi argomenti possono aiutare l'OP.
music2myear,

Questa risposta implica l'uso di ffmpeg invece del freno a mano per la codifica h.264, il che probabilmente va bene, poiché la domanda probabilmente sta solo chiedendo il modo più veloce per codificare - e presume che la GPU lo abiliti. Si noti che non tutte le GPU sono ugualmente potenti (ad esempio GPU integrate o dedicate) e che le CPU hanno anche ottimizzazioni che le librerie possono utilizzare se la libreria viene compilata per supportarla. Quindi "l'accelerazione hardware" è la strada giusta da percorrere, sia che si tratti di CPU o GPU.
michael

0

Al momento, Handbrake supporta i seguenti codificatori con accelerazione hardware per H.264 / AVC:

  1. Intel QuickSync (su Windows e su Linux). Questo è compatibile con almeno le linee di processori Intelbridge Sandybridge (Core di seconda generazione) con grafica integrata abilitata ed esposta al sistema operativo. Hardware consigliato per una qualità di codifica accettabile: Haswell (serie Core di quarta generazione) e oltre, che ha introdotto il concetto di livelli target (TU) a grana fine, funzioni lookahead (come le modalità di codifica LA-BRC e ICQ ) con prestazioni significativamente migliori. Vedere la guida all'uso dalla documentazione del freno a mano qui .

  2. NVENCIA di NVIDIA : questo richiede almeno le GPU della serie Kepler (GK +) di NVIDIA e superiori dalle SKU consumer ad alte prestazioni (serie GTX) e le formazioni professionali (GPU Quadro e Tesla basate su Kepler e oltre). Questo è disponibile su Windows e Linux.

Da notare che con NVENC, sarete artificialmente limitati al massimo a due sessioni di codifica simultanee sulle SKU consumer, mentre la formazione professionale non ne è influenzata. Per riferimento su specifiche capacità dell'encoder, consultare la matrice GPU . Per prestazioni e qualità dell'encoder ottimali, attenersi all'ultima iterazione delle GPU Pascal e Volta .

opzionalmente:

  1. AMD Il supporto di codifica AMF è disponibile anche nelle build notturne attuali SOLO per Windows. Una nota speciale sull'AMF di AMD (che si collega all'encoder VCE integrato nell'hardware in tutte le GCN + SKU) è quella su hardware più recente, come Polaris (serie RX 400+) e Vega , alcune avanzate sintonizzazioni dell'encoder per H.264 / AVC sono stati deprecati quando hanno introdotto il supporto per la codifica HEVC. Ciò che AMD ha abbandonato è stata la codifica B-frame, senza supporto per la quantizzazione adattativa (AQ), una caratteristica che i suddetti codificatori basati su hardware (QuickSync e NVENC) hanno implementato per generazioni senza regressioni. Inoltre, vedere questo nelle note relative alle metriche della velocità effettiva su cosa aspettarsi.

Per quanto riguarda il supporto di Apple, questo è nella migliore delle ipotesi, provvisorio . Anche l' API di VideoToolBox , implementata oltre l'ambito di Handbrake, sembra avere un set molto limitato di controlli. Anche se il freno a mano lo adotta a monte, non aspettatevi miracoli in termini di conservazione della qualità e produttività.

Si noti che potrebbe essere necessario utilizzare l'ultima build notturna per utilizzare le ultime funzionalità di codifica sulla piattaforma, come al momento. Questo cambierà sicuramente in futuro.

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.