Existe-t-il un moyen de répartir les travaux d'encodage x264 sur plusieurs ordinateurs (pour augmenter la vitesse d'encodage)?

29

Quelqu'un connaît-il une solution actuelle et active pour encoder des vidéos x264 sur de nombreux ordinateurs (via le réseau) pour augmenter l'encodage FPS?

Brownie pointe pour multiplateforme et open source, mais pour que vous le sachiez tous, j'utilise généralement Windows.


Programmes dont j'ai entendu parler et pourquoi je ne pense pas qu'ils conviennent:

  • x264farm : Pas activement développé. Bonne interface, mais ne prend pas en charge le codage en deux passes et échoue avec les nouvelles versions x264.
  • ELDER : Encore une fois, pas activement développé, mais mon problème était qu'il ne fonctionnait pas avec les nouvelles versions x264, et qu'il était très difficile à configurer (lire: arrêté de façon aléatoire de fonctionner).

Bien que je n'aie absolument pas besoin d'un programme en cours de développement actif, j'aimerais en avoir un qui prend en charge l'encodage en deux passes et fonctionne avec les nouvelles versions (er) x264 .


Informations supplémentaires : Jusqu'à présent, j'ai offert (et attribué!) Deux primes distinctes sur cette question depuis que je l'ai posté pour la première fois il y a plus de deux ans, et je n'ai toujours pas trouvé de solution à ce problème. Ce que je recherche en gros, c'est un programme simple pour me permettre d'encoder des vidéos x264 en utilisant la puissance de traitement de plusieurs ordinateurs connectés via un réseau local. De plus, ce serait bien si cela fonctionnait avec de nouvelles (x) builds x264 et supportait un encodage en deux passes.

Si à tout moment quelqu'un a une réponse mise à jour ou une nouvelle solution à ce problème, veuillez la poster et elle sera prise en compte.


Mise à jour 2016 :

Après une grande partie de mon expérience de travail avec la vision par ordinateur / machine, je me suis rendu compte que les frais généraux associés à la grande quantité de données / mémoire partagées, et le goulot d'étranglement potentiel qu'il présente, pourraient l'emporter sur les avantages potentiels.

Bien que j'aimerais toujours trouver quelque chose qui me permettrait d'exploiter la puissance de calcul inactive de plusieurs appareils, pour l'instant, les encodeurs modernes basés sur GPGPU sont une bien meilleure approche si vous avez besoin d'un encodage amélioré / en temps réel. C'est ce que la plupart des plates-formes d'encodage vidéo basées sur le cloud fournissent (une autre alternative si vous êtes dans le SaaS ou le cloud computing), bien qu'à plus grande échelle.

percée
la source
J'y travaille toujours. x264farm n'est que le gestionnaire de rendu, il semble que vous devriez pouvoir placer n'importe quelle version de x264 que vous aimez sur les PC esclaves. Avez-vous essayé cela et quelles erreurs apparaissent si vous le faites?
Keck
1
Je me rends compte que c'est un vieux fil, mais je pense que je devrais partager mon expérience personnelle. Ne distribuez pas un travail à plusieurs machines, c'est une perte de temps, la distribution à plusieurs cœurs diminue déjà les performances, et il y a plusieurs processeurs physiques, puis plusieurs machines, chacune avec un problème d'E / S et une latence. Cela étant dit, utilisez-le lorsque cela est vraiment nécessaire, s'il y a plusieurs fichiers (travaux), distribuez par fichier, je crois que Squeeze peut répartir la charge sur plusieurs machines, mais c'est assez cher.
Shane Hsu
@ShaneHsu merci du partage. J'ai d' abord écrit cette question il y a plus de quatre ans, et à ce moment - là, la machine que j'utilisais pour faire ce travail n'a pas été presque aussi puissant que celui que j'ai maintenant, il a fait beaucoup plus de sens à l' époque pour aller dans cette voie. Aujourd'hui, je devrais être d'accord avec vous - si la vitesse de rendu devient un problème, il est préférable de décharger l'intégralité du travail sur une autre machine, plutôt que de diviser un seul travail en plusieurs morceaux (et de laisser une instance d'encodeur h.264 s'occuper de tout codage multithread / multicœur si nécessaire).
Percée du
Je cherche à faire la même chose, mais malheureusement, il semble que ce fil soit principalement rempli de solutions ou de projets à moitié cuits qui n'existent plus. Bien qu'il semble que votre besoin de le faire ait disparu, si vous avez plus d'informations sur les solutions possibles depuis la dernière mise à jour, faites-le moi savoir.
Locksleyu

Réponses:

6

Vous pouvez restituer des morceaux séparés de la vidéo et utiliser VirtualDub pour tout assembler avec son mode Copie (où il ne fait aucun encodage). Ce n'est pas un véritable encodage distribué ou quoi que ce soit, mais les solutions les plus simples fonctionnent parfois le mieux.

Ivan Vučica
la source
5
Encore une fois, le seul problème avec cela est qu'il y aura une perte de qualité, en raison du placement des images I / B lors du rendu de la vidéo. Un algorithme de détection de scène devrait être utilisé pour déterminer où le diviser, et d'une manière ou d'une autre, vous auriez besoin de diviser la vidéo exactement à cette image ...
Breakthrough
VirtualDub a ces icônes "vertes et rouges" qui devraient servir à la détection de changement de scène. Si ma mémoire d'il y a quelques années me sert correctement, cela a très bien fonctionné. Mais là encore, je suis un amateur en matière de vidéo et d'encodage vidéo.
Ivan Vučica
AFAIK VirtualDub a une commande "aller à l'image suivante". Je viens de le diviser manuellement.
Camilo Martin
@Breakthrough Donc, tout ce dont vous avez besoin est un filtre qui divise une entrée vidéo en morceaux aux limites de changement de scène (afin que ceux-ci puissent ensuite être encodés séparément)? C'est assez simple. Y a-t-il un autre problème?
GroovyDotCom
@GroovyDotCom bien en plus de cela, tous les logiciels de support (par exemple, un serveur pour lancer le filtre de fractionnement, le distribuer à tous les nœuds clients exécutant des encodeurs, mettre en file d'attente les travaux, retransférer les fichiers sur le serveur principal et fusionner à nouveau le résultat) doit encore être traité, et cela ne résout toujours aucun problème potentiel de qualité / efficacité avec la méthode d'encodage d'une grande vidéo dans des segments individuels. Notez également que cette question a près de six ans à ce stade, donc je suis sûr que beaucoup de choses ont changé depuis lors en ce qui concerne l'encodage distribué.
Percée
4

C'est bêta, mais fonctionnel. Ce n'est pas aussi simple, mais cela fonctionne. Il est basé sur Windows et gratuit.

Aîné de certains gars de Doom9

Keck
la source
2
Je l'ai vu aussi, mais j'espérais quelque chose de comparable à x264farm - il n'y a pas de succès de qualité avec x264farm ... De plus, le projet a été abandonné depuis un certain temps.
Percée le
1
J'ai initialement accordé une prime de 50 points à cette réponse, car c'était la solution la plus proche à l'époque . Cependant, ce programme a eu une certaine perte de qualité par rapport à un encodeur mono-ordinateur. J'espère éviter le coup sur la qualité.
Percée du
@Breakthrough Que se passe-t-il si vous visez un peu plus haut, comme si cela le rend 10% pire rendre les paramètres (détail / taille de cadre / etc) 10% plus élevés?
tobylane
@tobylane, le problème vient du placement des images I / B lors du rendu de la vidéo. Un algorithme de détection de scène devrait être utilisé pour déterminer où le diviser, et d'une manière ou d'une autre, vous devrez diviser la vidéo exactement à cette image. Selon le matériel source, cela est souvent impossible à faire parfaitement, et donc encoder une vidéo entière à la fois donnera généralement une meilleure qualité que le rendu en morceaux.
Percée du
2
@Breakthrough x264 a par défaut un GOP maximum de 250 images, avec du matériel HD encore moins. Cela fermera le GOP à un moment donné (sauf si vous ne le modifiez pas), et il n'y aura pas de perte de qualité si vous coupez là où un GOP se terminerait, malheureusement ce n'est pas très prévisible. Dans tous les cas, dans un long film d'une heure et demie, divisez-le en 6 films de 15 minutes. des morceaux directement sur les changements de scène ne nuiraient pas à la compressibilité. Et ça aide!
Camilo Martin
3

Vous pouvez également essayer de l'utiliser, son logiciel de codage parallèle / distribué pour Windows et fonctionne bien et évolue bien aussi.

Essayez de googler pour l'encodeur parallèle xcode.

Ces liens devraient fournir plus d'informations.

http://superscalar.pbworks.com/

dxblitzx
la source
Sans rapport: la dénomination semble arrachée au document Xcode d'Apple sur le fonctionnement de la compilation parallèle avec Xgrid. (Un IDE contre un encodeur vidéo)
Chealion
ic, je ne suis pas un utilisateur de mac mais vous devriez essayer ceci, ne fonctionne que sur windows. J'ai une configuration avec environ 10 Ghz de puissance de traitement combinée et une vidéo de 90 minutes prend en moyenne 30 à 32 minutes pour la conversion (x.264 / AAC / 1800 kbs vbr / 256 kbs audio).
dxblitzx
Merci pour votre réponse. J'ai changé cela en la réponse correcte actuelle, car cette solution est la plus proche de ce que je cherchais! :)
Percée
2

Pour les utilisateurs de Final Cut Studio (Mac uniquement), le composant x264 QuickTime fonctionne remarquablement bien lorsqu'il est utilisé avec un cluster créé à l'aide de QMaster. Chargez votre film dans Compressor et c'est parti. Dans les tests, j'ai trouvé des augmentations de vitesse décentes, surtout lorsque vous travaillez sur un point de stockage partagé.

Chealion
la source
3
Merde ... je suis un utilisateur Windows. Cela a l'air plutôt cool et similaire à ce que je recherche - je souhaite juste que ce soit multi-plateforme!
Percée
2

Pour Mac OS X 10.5 (je ne suis pas sûr de la compatibilité avec 10.6), il existait auparavant VisualHub , qui vous permettrait de configurer une batterie de serveurs sur votre réseau local. Maintenant, il est interrompu et ReduxEncoder est apparu comme son remplacement, mais je n'arrive pas à trouver les options pour cela.

Tiago Veloso
la source
2

Je suis un grand fan de Sony Vegas pour le montage vidéo Windows ... et il y a une fonctionnalité appelée Network Render. :) Miam.

Sony Vegas Workflow

EDIT: Je ne sais pas trop s'il s'agit d'une solution viable, mais au lieu d'essayer de trouver une application de codage vidéo qui prend en charge le rendu réseau, j'ai essayé de trouver un logiciel qui permet à n'importe quelle application de tirer parti de l'informatique distribuée. Et je l'ai trouvé - IAIDataShareServer .

Il a l'air assez puissant et les exemples de résultats publiés sont vraiment excellents. Si vous allez l'essayer, faites-nous savoir comment cela fonctionne?

EDIT2: IAIDataShareServer semble simplement demander aux machines d'exécuter des tâches individuelles. Dans cette mesure, j'ai essayé de trouver d'autres solutions informatiques distribuées et d'en énumérer quelques-unes prometteuses.

  1. JPPF
  2. XOREAX
  3. DCEZ (Celui-ci a l'air bien)
caliban
la source
3
T'es sûr de ça? forums.creativecow.net/thread/24/895788
Percée le
1
@Breakthrough: hey mate, nouvelle solution possible trouvée. Non testé par moi-même. Voir la réponse modifiée. Bonne chance!
caliban
2
@scopedreams: J'ai vu cela et j'ai instantanément pensé que c'était parfait ... Malheureusement, ce partage de données distribué exécute simplement des instances de programmes sur chaque ordinateur qui lui est connecté - utile pour exécuter de nombreux travaux, chaque client s'attaquant à un seul travail à la fois ... Mais dans mon cas, je veux qu'un seul travail soit calculé en parallèle sur de nombreux ordinateurs.
Percée du
1
@Breakthrough: argh darn, retour au chalutage sur le web je suppose.
caliban
1
@Breakthrough: Mise à jour de ma réponse pour fournir une liste de clients informatiques distribués. Encore une fois, non testé. Ne vous inquiétez pas d'accepter ma réponse, je le fais pour apprendre quelque chose de nouveau pour moi aussi. :)
caliban
1

le simple fait est que NON du développeur du monde a jusqu'à présent pris la peine d'écrire et de soumettre des correctifs client / serveur de codage générique TCP: IP / UDP distribués pour un x264 actuel, à partir d'aujourd'hui c'est 1745 voir x264.nl/

le modèle client / serveur générique est bien compris, tout comme la base de code x264 propre, et demander des éclaircissements sur tout code x264 est une simple question de rejoindre le canal IRC x264 dev et de demander, en quelques minutes, vous aurez généralement une clé x264 Dev ou deux répondent à votre question sur le fonctionnement de cette section de code, et ont même une idée pratique de la façon dont vous pourriez réécrire votre code en évolution pour mieux l'adapter au x264 (et x262 un nouvel encodeur Mpeg2 basé sur le cadre de classe mondiale x264 travaillé à droite) maintenant) modèle.

Donc, si vous êtes développeur, la meilleure chose que vous puissiez faire pour l'avenir de la qualité et de la profession d'encodage vidéo distribué x264 32/64 bits est en fait d'écrire ces correctifs de base client / serveur requis pour créer une instance de x264 ou une interface Web / GUI séparée interface d'application avec ce nouveau code API client / serveur x264 que vous écrivez, pour rechercher activement, affecter et transmettre à la volée des sections de codage distinctes d'une seule vidéo à tout nouveau code client x264 géré correspondant que vous écrivez également.

vos nouveaux correctifs de base de codage de clients / serveur vraiment distribués n'ont même pas besoin d'être le plus grand, juste du code C basique mais fonctionnel et pleinement fonctionnel qui est testé et utilisé doom10.org/index.php?action=unread

, comme il y a une chose que les développeurs de x264 semblent aimer faire, et qui prennent le code C lent existant et en écrivent des versions optimisées, section par section, mais vous devez d'abord soumettre le code bêta réel (correctifs bienvenus) d'abord contre le dernière branche OC

cela vaut la peine d'être étudié, et de faire l'effort de coder ces serveurs x264 pour de nombreux correctifs de clients x264 aujourd'hui, car x264 vient d'avoir une capacité d'encodage de profondeur 10 bits (ce qui signifie haute qualité High, High 10, High 4: 2: 2 H. 264 profils intensifs en calcul sont désormais disponibles pour tous gratuitement avec x264) ajouté.

à optimiser pour une vitesse supplémentaire avec un assemblage très prochainement http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

mais même une seule machine à 8 cœurs aura du mal à fournir une sortie de la plus haute qualité dans un délai raisonnable avec 1080P, et bientôt 2K et 4K super haute Def etc., une véritable option de codage natif x264 / H.264 distribué est seulement un patch ou deux loin So.

Si vous êtes un développeur, N'attendez pas, faites-le aujourd'hui.

distribué x264
la source
En fait, j'ai pensé à faire ça. Le problème majeur n'est pas d'obtenir deux ordinateurs pour effectuer les calculs, mais plutôt de transférer les données de l'ensemble de travail entre les machines. Il est beaucoup plus facile de déplacer des données dans et hors de la RAM sur une seule machine (en autant de gigaoctets par seconde), mais beaucoup plus lent sur un réseau local (avec un maximum de 100 mégaoctets par seconde).
Percée le
1

Vous pourriez jeter un œil à Media Encoding Cluster :

Media Encoding Cluster est la première solution d'encodage de cluster Open Source écrite en C / C ++ pour l'encodage multimédia (vidéo et audio) distribué.

Media Encoding Cluster est un encodeur vidéo extensible, qui utilise une grille peer-to-peer légère pour exploiter la puissance de traitement des PC ordinaires dans le but de distribuer l'encodage de vidéo hautement compressée, par exemple MPEG4 et H.264

Il distribue des segments vidéo sur le réseau aux nœuds clients et parallélise la tâche d'encodage d'un fichier sur plusieurs ordinateurs afin de réduire le temps d'encodage par fichier.

Une autre approche est proposée pour Nvidia par Badaboom (39,99 $ avec essai), également examinée ici :

Badaboom d'Elemental utilise l'interface CUDA de Nvidia pour effectuer une grande partie du travail de rippage de DVD en utilisant le GPU au lieu de votre vieux CPU moisi.

De la même manière, il existe également Avivo Video Converter pour ATI Radeon, décrit dans wikipedia , même si cela peut prendre un certain temps pour le faire fonctionner.

harrymc
la source
@Breakthrough: Avez-vous regardé ces produits?
harrymc
1

Bien que cela puisse être un peu une suggestion exagérée, Rhozet Carbon Server peut rassembler plusieurs instances de Carbon Coder pour le travail que vous avez décrit.

Site Web pour Rhozet Carbon Server

Plusieurs nœuds Carbon Coder peuvent être configurés comme une batterie de transcodage, contrôlée par un ou plusieurs serveurs Carbon. Carbon Server permet le traitement automatisé des tâches de transcodage à haut volume, le basculement contrôlé par le serveur des nœuds Carbon Coder, ainsi que la gestion de la distribution des travaux, la priorisation des travaux, l'équilibrage de la charge, le transfert FTP, la surveillance de l'état et la notification des travaux.

edusysadmin
la source