Esiste un modo per distribuire processi di codifica x264 su più computer (per aumentare la velocità di codifica)?


29

Qualcuno è a conoscenza di una soluzione attiva e attiva per codificare video x264 su molti computer (tramite la rete) per aumentare la codifica FPS?

Brownie punta su multipiattaforma e open source, ma solo per questo lo sapete, di solito uso Windows.


Programmi di cui ho sentito parlare e perché non credo siano adatti:

  • x264farm : non attivamente sviluppato. Buona interfaccia, ma non supporta la codifica a due passaggi e fallisce con le nuove build x264.
  • ANZIANO : Ancora una volta, non sviluppato attivamente, ma il mio problema era che non funzionava con le nuove build x264, ed era molto difficile da configurare (leggi: ha smesso di funzionare in modo casuale).

Anche se non ho assolutamente bisogno di un programma in fase di sviluppo attivo, vorrei uno che supporti la codifica a due passaggi e funzioni con nuove build (er) x264 .


Informazioni aggiuntive : Finora ho offerto (e assegnato!) Due taglie separate su questa domanda da quando l'ho pubblicato per la prima volta due anni fa, e non ho ancora trovato una soluzione a questo problema. Quello che sto cercando sostanzialmente è un semplice programma che mi permetta di codificare video x264 usando la potenza di elaborazione di più computer collegati su una LAN. Inoltre, sarebbe bello se funzionasse con nuove build (er) x264 e supportasse la codifica a due passaggi.

Se in qualsiasi momento qualcuno ha una risposta aggiornata o una nuova soluzione a questo problema, si prega di pubblicarla e verrà data una considerazione.


Aggiornamento 2016 :

Dopo gran parte della mia esperienza lavorativa con computer / visione artificiale, ho capito che l'overhead associato alla grande quantità di dati / memoria condivisa e il potenziale collo di bottiglia che presenta potrebbe superare i potenziali benefici.

Mentre mi piacerebbe ancora trovare qualcosa che mi consenta di sfruttare la potenza di elaborazione inattiva di diversi dispositivi, per ora, i moderni codificatori basati su GPGPU sono un approccio molto migliore se hai bisogno di una codifica migliorata / in tempo reale. Questo è ciò che offre la maggior parte delle piattaforme di codifica video basate su cloud (che è un'altra alternativa se ti piacciono i SaaS o il cloud computing), sebbene su scala più ampia.


Ci sto ancora lavorando. x264farm è solo il render manager, sembra che dovresti essere in grado di posizionare qualsiasi versione di x264 che ti piace sul PC slave. Hai provato questo, e quali errori compaiono se lo hai fatto?
Keck,


1
Mi rendo conto che questo è un vecchio thread, ma penso che dovrei condividere la mia esperienza personale. Non distribuire un lavoro su più macchine, è una perdita di tempo, la distribuzione su più core riduce già le prestazioni e ci sono più processori fisici, quindi più macchine, ognuna con problemi di I / O e latenza. Detto questo, usalo solo quando è veramente necessario, se ci sono più file (lavori), distribuisci per file, credo che Squeeze possa distribuire il carico su più macchine, ma è piuttosto costoso.
Shane Hsu,

@ShaneHsu grazie per averlo condiviso. Ho scritto questa domanda più di quattro anni fa, e in quel momento, la macchina che stavo usando per fare questo lavoro non era quasi potente come quella che ho ora, quindi ha reso molto più senso allora di seguire questa strada. Oggi dovrei essere d'accordo con te: se la velocità di rendering diventa un problema, è meglio scaricare l'intero lavoro su un'altra macchina, piuttosto che dividere un singolo lavoro in più blocchi (e lasciare che un'istanza dell'encoder h.264 si occupi di qualsiasi codifica multithread / multicore se necessario).
Breakthrough

Sto cercando di fare la stessa cosa, ma sfortunatamente sembra che questo thread sia per lo più pieno di soluzioni o progetti a metà cottura che non esistono più. Anche se sembra che il tuo bisogno di farlo sia svanito, se hai ulteriori informazioni sulle possibili soluzioni dall'ultima volta che l'hai aggiornato, faccelo sapere.
Locksleyu,

Risposte:


6

È possibile eseguire il rendering di blocchi separati del video e utilizzare VirtualDub per ricucire il tutto insieme alla sua modalità Copia (dove non codifica). Non è una vera codifica distribuita o altro, ma le soluzioni più semplici a volte funzionano meglio.


5
Ancora una volta, l'unico problema è che si verificherà una perdita di qualità, a causa del posizionamento dei frame I / B durante il rendering del video. Un algoritmo di rilevamento scene dovrebbe essere usato per determinare dove dividerlo, e in qualche modo, dovresti dividere il video esattamente in quel fotogramma ...
Breakthrough,

VirtualDub ha quelle icone "verdi e rosse" che dovrebbero servire nel rilevamento del cambio di scena. Se la mia memoria di alcuni anni fa mi ha funzionato correttamente, ha funzionato abbastanza bene. Ma poi di nuovo, sono un dilettante quando si tratta di codifica video e video.
Ivan Vučica,

AFAIK VirtualDub ha un comando "vai al frame successivo". L'ho diviso manualmente.
Camilo Martin,

@Breakthrough Quindi tutto ciò che serve è un filtro che divide un ingresso video in blocchi ai limiti del cambio scena (in modo che questi possano essere codificati separatamente)? È abbastanza semplice. C'è qualche altro problema?
GroovyDotCom

@GroovyDotCom oltre a tutto ciò, tutto il software di supporto (ad es. Un server per avviare il filtro di divisione, distribuirlo a tutti i nodi client che eseguono encoder, mettere in coda i lavori, trasferire i file sul server principale e ricollegare il risultato) deve ancora essere affrontato e questo non risolve ancora potenziali problemi di qualità / efficienza con il metodo di codifica di un video di grandi dimensioni in singoli segmenti. Nota anche che questa domanda ha quasi sei anni a questo punto, quindi sono sicuro che da allora sono cambiate molte cose per quanto riguarda la codifica distribuita.
Breakthrough

4

È beta, ma funzionale. Non è così semplice, ma funziona. È basato su Windows e gratuito.

ANZIANO di alcuni ragazzi di Doom9


2
L'ho visto anche io, ma speravo in qualcosa di paragonabile a x264farm - non c'è alcun impatto sulla qualità con x264farm ... Inoltre, il progetto è stato abbandonato da un po 'di tempo.
Breakthrough

1
Inizialmente ho assegnato un premio di 50 punti a questa risposta, perché era la soluzione più vicina a quel tempo . Tuttavia, questo programma ha subito una perdita di qualità rispetto a un codificatore a computer singolo. Spero di evitare il successo sulla qualità.
Breakthrough

@Breakthrough E se miri un po 'più in alto, come se peggiorasse del 10% le impostazioni (dettaglio / dimensioni / ecc.) Del 10% in più?
tobylane,

@tobylane, il problema riguarda il posizionamento dei frame I / B durante il rendering del video. Un algoritmo di rilevamento di scene dovrebbe essere usato per determinare dove dividerlo, e in qualche modo, dovresti dividere il video esattamente in quel frame. A seconda del materiale di origine, questo è spesso impossibile da fare perfettamente, e quindi la codifica di un intero video in una volta di solito produrrà una qualità migliore rispetto al rendering in blocchi.
Breakthrough

2
@Breakthrough x264 per impostazione predefinita ha un GOP massimo di 250 frame, con materiale HD ancora inferiore. Un giorno chiuderà il GOP (a meno che non lo modifichi), e quindi non ci sarà alcuna perdita di qualità se taglieresti proprio dove un GOP finirà, sfortunatamente non è molto prevedibile. In ogni caso, in un film della durata di 1,5 ore, suddividendolo in 6 15 minuti. blocchi proprio nei cambi di scena non danneggerebbero molta compressibilità. E aiuta!
Camilo Martin,

3

Potresti anche provare a usarlo, è un software di codifica parallelo / distribuito per Windows e funziona bene e si ridimensiona bene.

Prova a cercare su Google il codificatore parallelo xcode.

Questi collegamenti dovrebbero fornire ulteriori informazioni.

http://superscalar.pbworks.com/


Non correlato: la denominazione sembra strappata dal documento Xcode di Apple su come la compilazione parallela ha funzionato con Xgrid. (Un IDE contro un codificatore video)
Chealion

ic, non sono un utente mac ma dovresti provare questo, funziona solo su Windows però. Ho una configurazione con circa 10 Ghz di potenza di elaborazione combinata e un video lungo 90 minuti impiega in media 30-32 minuti per la conversione (x.264 / AAC / 1800 kbs vbr / 256 kbs audio).
dxblitzx,

Grazie per la vostra risposta. Ho cambiato questo con l'attuale risposta corretta, poiché questa soluzione è la più vicina a quello che stavo cercando! :)
Breakthrough

2

Per gli utenti di Final Cut Studio (solo Mac), il componente QuickTime x264 funziona molto bene se utilizzato con cluster creati usando QMaster. Carica il tuo film in Compressor e il gioco è fatto. Nei test ho riscontrato aumenti di velocità decenti, specialmente quando si lavora su un punto di archiviazione condiviso.


3
Accidenti ... Sono un utente di Windows. Sembra piuttosto bello, e simile a quello che sto cercando - vorrei solo che fosse multipiattaforma!
Breakthrough

2

Per Mac OS X 10.5 (non sono sicuro della compatibilità con 10.6) esisteva VisualHub , che consentiva di configurare una griglia sulla rete locale. Ora è fuori produzione e ReduxEncoder si è presentato come sostituto, ma non riesco a trovare le opzioni per quello.


2

Sono un grande fan del video editing di Sony Vegas per Windows ... e c'è una funzione chiamata Network Render. :) Yums.

Flusso di lavoro di Sony Vegas

EDIT: Non sono sicuro che si tratti di una soluzione praticabile, ma invece di cercare un'applicazione di codifica video che supporti il ​​rendering in rete, ho cercato di trovare un software che consenta a qualsiasi applicazione di trarre vantaggio dal calcolo distribuito. E ho trovato questo - IAIDataShareServer .

Sembra piuttosto potente e i risultati di esempio pubblicati sono davvero eccezionali. Se hai intenzione di provarlo, facci sapere come funziona?

EDIT2: IAIDataShareServer sembra semplicemente istruire le macchine a eseguire singole attività. In tal senso, ho cercato di cercare altre soluzioni informatiche distribuite e di elencarne alcune promettenti.

  1. JPPF
  2. Xoreax
  3. DCEZ (Questo sembra buono)


1
@Breakthrough: hey amico, è stata trovata una nuova possibile soluzione. Non testato da solo però. Vedi risposta modificata. In bocca al lupo!
Caliban,

2
@scopedreams: l'ho visto e ho subito pensato che fosse perfetto ... Sfortunatamente, la condivisione di dati distribuiti esegue solo istanze di programmi su ciascun computer collegato ad esso - utile per eseguire molti lavori, con ogni client che affronta un singolo lavoro alla volta ... Ma nel mio caso, voglio solo un lavoro da calcolare in parallelo tra molti computer.
Breakthrough

1
@Breakthrough: argh darn, tornando alla rete a strascico immagino.
Caliban,

1
@Breakthrough: aggiornata la mia risposta per fornire un elenco di client di elaborazione distribuita. Ancora una volta, non testato. Non preoccuparti di accettare la mia risposta, lo sto facendo per imparare qualcosa di nuovo anche per me stesso. :)
Caliban,

1

il semplice fatto è che NON lo sviluppatore del mondo si è mai preso la briga di scrivere e inviare le patch client / server di codifica generica TCP: IP / UDP distribuite per un x264 attuale, ad oggi 1745 vedi x264.nl/

il modello client / server generico è ben compreso, come lo è la base di codice x264 pulita, e chiedere chiarimenti su qualsiasi codice x264 è una semplice questione di unirsi al canale IRC dev x264 e chiedere, in pochi minuti si avrà di solito una chiave x264 Dev o due rispondono alla tua domanda su come funziona quella sezione di codice e persino ottieni idee pratiche su come potresti riscrivere il tuo codice in evoluzione per adattarsi meglio a x264 (e x262 un nuovo codificatore Mpeg2 basato sul framework di classe mondiale x264 su cui si sta lavorando a destra ora) modello.

Quindi, se sei uno sviluppatore, la cosa migliore che potresti fare per il futuro della qualità e della professione della codifica video distribuita x264 a 32/64 bit è in realtà scrivere queste patch client / server di base necessarie per creare un'istanza di x264 o una GUI / web separata interfaccia dell'app con questo nuovo codice API client x264 client / server che scrivi, per cercare attivamente, assegnare e trasferire al volo sezioni di codifica separate di un singolo video a qualsiasi nuovo codice client x264 gestito corrispondente che scrivi anche.

i tuoi nuovi client / server veramente distribuiti codificano le patch di base non devono nemmeno essere il codice C più grande, ma semplice ma funzionante e perfettamente funzionante che viene testato e usato doom10.org/index.php?action=unread

, poiché c'è una cosa che gli sviluppatori di x264 sembrano amare fare, e cioè prendere il codice C lento esistente e scriverne versioni ottimizzate, sezione per sezione, ma è necessario prima inviare il codice beta effettivo (patches welcome) contro il ultima filiale OC

vale la pena esaminare e in realtà fare lo sforzo di codificare questi server x264 su molti client x264 patch oggi poiché x264 ha appena capacità di codifica di profondità a 10 bit (che significa alta qualità alta, alta 10, alta 4: 2: 2 H. 264 profili di calcolo intensivo sono ora disponibili a tutti gratuitamente con x264) aggiunti.

essere ottimizzato per una maggiore velocità con assemblaggio molto presto http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

ma anche una singola macchina a 8 core farà fatica a fornire output di altissima qualità in un tempo ragionevole con 1080P e presto 2K e 4K Super High Def ecc., un'opzione di codifica nativa distribuita x264 / H.264 è davvero semplice una patch o due di distanza So.

se sei un dev, PER FAVORE non aspettare, fallo oggi.


In realtà, ho pensato di farlo. Il problema principale non è effettivamente far eseguire i calcoli a due computer, ma piuttosto trasferire i dati del working set tra le macchine. È molto più semplice spostare i dati dentro e fuori la RAM su un singolo computer (in ogni caso molti gigabyte al secondo), ma molto più lentamente su una LAN (raggiungendo il massimo a 100 megabyte al secondo).
Sfondamento

1

Potresti dare un'occhiata a Media Encoding Cluster :

Media Encoding Cluster è la prima soluzione di codifica cluster Open Source scritta in C / C ++ per la codifica multimediale distribuita (video e audio).

Media Encoding Cluster è un codificatore video estensibile, che utilizza una leggera griglia peer-to-peer per sfruttare la potenza di elaborazione dei normali PC allo scopo di distribuire la codifica di video altamente compressi, ad esempio MPEG4 e H.264

Distribuisce blocchi video sulla rete ai nodi client e parallelizza l'attività di codifica per un file anche su più di un computer per ridurre il tempo di codifica per file.

Un altro approccio è offerto per Nvidia da Badaboom ($ 39,99 con prova), anche recensito qui :

Badaboom di Elemental utilizza l'interfaccia CUDA di Nvidia per eseguire gran parte del duro lavoro di ripping di DVD utilizzando la GPU invece della tua vecchia muffa ammuffita.

Allo stesso modo, c'è anche Avivo Video Converter per ATI Radeon, descritto in Wikipedia , anche se potrebbe essere necessario farlo per farlo funzionare.


@Breakthrough: hai guardato questi prodotti?
harrymc,

1

Anche se potrebbe essere un suggerimento eccessivo, Rhozet Carbon Server può riunire più istanze di Carbon Coder per il lavoro che hai descritto.

Sito Web per Rhozet Carbon Server

Più nodi Carbon Coder possono essere configurati come farm di transcodifica, controllati da uno o più Carbon Server. Carbon Server consente l'elaborazione automatizzata di attività di transcodifica ad alto volume, il failover controllato da server dei nodi Carbon Coder, nonché la gestione della distribuzione dei lavori, la definizione delle priorità dei lavori, il bilanciamento del carico, il trasferimento FTP, il monitoraggio dello stato e la notifica dei lavori.

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.