¿Hay alguna forma de distribuir trabajos de codificación x264 en varias computadoras (para aumentar la velocidad de codificación)?

29

¿Alguien sabe de una solución activa y actual para codificar videos x264 en muchas computadoras (a través de la red) para aumentar la codificación de FPS?

Brownie apunta a multiplataforma y código abierto, pero para que todos lo sepan, generalmente uso Windows.


Programas de los que he oído hablar y por qué no creo que sean adecuados:

  • x264farm : no desarrollado activamente. Buena interfaz, pero no admite codificación de dos pasos, y falla con las nuevas construcciones x264.
  • ANCIANO : Nuevamente, no se desarrolló activamente, pero mi problema era que no funcionaba con las nuevas compilaciones x264, y era muy difícil de configurar (léase: dejó de funcionar aleatoriamente).

Si bien no necesito absolutamente un programa que se esté desarrollando activamente, me gustaría uno que admita la codificación de dos pasos y que funcione con nuevas compilaciones (er) x264 .


Información adicional : Hasta ahora, he ofrecido (¡y otorgado!) Dos recompensas separadas sobre esta pregunta desde que la publiqué por primera vez hace dos años, y todavía no he encontrado una solución a este problema. Básicamente, lo que estoy buscando es un programa simple que me permita codificar videos x264 utilizando la potencia de procesamiento de varias computadoras conectadas a través de una LAN. Además, sería bueno si funcionara con nuevas compilaciones x264 (er) y admitiera la codificación de dos pasos.

Si en algún momento alguien tiene una respuesta actualizada o una nueva solución a este problema, publíquela y se le dará alguna consideración.


Actualización 2016 :

Después de gran parte de mi experiencia laboral con la computadora / visión artificial, me he dado cuenta de que la sobrecarga asociada con la gran cantidad de datos / memoria compartidos, y el posible cuello de botella que presenta, pueden superar los beneficios potenciales.

Si bien aún me encantaría encontrar algo que me permitiera aprovechar la potencia informática inactiva de varios dispositivos, por ahora, los codificadores modernos basados ​​en GPGPU son un enfoque mucho mejor si necesita una codificación mejorada / en tiempo real. Esto es lo que proporcionan la mayoría de las plataformas de codificación de video basadas en la nube (que es otra alternativa si está interesado en SaaS o la computación en la nube), aunque a mayor escala.

Avance
fuente
Aún estoy trabajando en esto. x264farm es solo el administrador de renderizado, parece que debería poder colocar cualquier versión de x264 que desee en la PC esclava. ¿Has probado esto y qué errores aparecen si lo hiciste?
Keck
1
Me doy cuenta de que este es un hilo viejo, pero creo que debería compartir mi experiencia personal. No distribuya un trabajo a múltiples máquinas, es una pérdida de tiempo, la distribución a múltiples núcleos ya disminuye el rendimiento, y hay múltiples procesadores físicos, luego múltiples máquinas, cada una con problemas de IO y latencia. Dicho esto, úselo cuando solo sea realmente necesario, si hay varios archivos (trabajos), distribuir por archivo, creo que Squeeze puede distribuir la carga en varias máquinas, pero eso es bastante costoso.
Shane Hsu
@ShaneHsu gracias por compartir. Escribí por primera vez esta pregunta hace más de cuatro años, y en ese momento, la máquina que estaba usando para hacer este trabajo no era casi tan potente como el que tengo ahora, por lo que hizo mucho más sentido en aquel entonces a seguir este camino. Hoy, tendría que estar de acuerdo con usted: si la velocidad de renderizado se convierte en un problema, es mejor descargar todo el trabajo a otra máquina, en lugar de dividir un solo trabajo en varios fragmentos (y dejar que una instancia del codificador h.264 se encargue de cualquier codificación multiproceso / multinúcleo si es necesario).
Avance el
Estoy buscando hacer lo mismo, pero desafortunadamente parece que este hilo está lleno de soluciones o proyectos a medio hacer que ya no existen. Si bien parece que su necesidad de hacerlo se ha desvanecido, si tiene más información sobre posibles soluciones desde la última vez que actualizó esto, avíseme.
Locksleyu

Respuestas:

6

Puede renderizar fragmentos separados del video y usar VirtualDub para unirlo todo con su modo Copia (donde no codifica). No es una codificación distribuida real ni nada, pero las soluciones más simples a veces funcionan mejor.

Ivan Vučica
fuente
55
Una vez más, el único problema con esto es que habrá una pérdida de calidad, debido a la colocación de cuadros I / B al reproducir el video. Necesitaría un algoritmo de detección de escenas que se utilizará para determinar dónde se dividió, y de alguna manera, lo que tendría que dividir el vídeo exactamente en el marco de ...
Avance
VirtualDub tiene esos iconos "verdes y rojos" que deberían servir en la detección de cambio de escena. Si mi memoria de hace unos años me sirve correctamente, funcionó bastante bien. Pero, de nuevo, soy un aficionado cuando se trata de video y codificación de video.
Ivan Vučica
AFAIK VirtualDub tiene un comando "ir al siguiente cuadro". Lo dividiría manualmente.
Camilo Martin
@Breakthrough Entonces, ¿todo lo que necesita es un filtro que divida una entrada de video en fragmentos en los límites de cambio de escena (para que luego puedan codificarse por separado)? Eso es bastante simple. ¿Hay algún otro problema?
GroovyDotCom
@GroovyDotCom además de eso, todo el software de soporte (por ejemplo, un servidor para iniciar el filtro de división, distribuirlo a todos los nodos del cliente que ejecutan codificadores, poner en cola los trabajos, transferir los archivos al servidor principal y volver a fusionar el resultado) aún debe tratarse, y esto aún no aborda ningún problema potencial de calidad / eficiencia con el método de codificación de un video grande en segmentos individuales. También tenga en cuenta que esta pregunta tiene casi seis años en este momento, por lo que estoy seguro de que muchas cosas han cambiado desde entonces también con respecto a la codificación distribuida.
Avance
4

Es beta, pero funcional. No es tan sencillo, pero funciona. Está basado en Windows y es gratis.

ANCIANO de algunos chicos de Doom9

Rizar
fuente
2
También lo vi, pero esperaba algo comparable a x264farm: no hay éxito de calidad con x264farm ... Además, el proyecto ha sido abandonado por bastante tiempo.
Avance
1
Originalmente otorgué una recompensa de 50 puntos a esta respuesta, porque era la solución más cercana en ese momento . Sin embargo, este programa tuvo cierta pérdida de calidad en comparación con un codificador de una sola computadora. Espero evitar el impacto en la calidad.
Avance
@Breakthrough ¿Qué pasa si apuntas un poco más alto, como si lo hace un 10% peor, hace que la configuración (detalle / tamaño de cuadro / etc.) sea un 10% más alta?
tobylane
@tobylane, el problema es con la colocación de cuadros I / B cuando se procesa el video. Debería usarse un algoritmo de detección de escena para determinar dónde dividirlo, y de alguna manera, necesitaría dividir el video exactamente en ese cuadro. Dependiendo del material de origen, esto a menudo es imposible de hacer a la perfección y, por lo tanto, codificar un video completo a la vez generalmente producirá una mejor calidad que luego hacerlo en trozos.
Avance
2
@Breakthrough x264 por defecto tiene un GOP máximo de 250 fotogramas, con material HD aún menos. CIERRE el GOP en algún momento (a menos que lo ajuste), y luego no habrá pérdida de calidad si se corta justo donde terminaría un GOP, desafortunadamente eso no es muy predecible. En cualquier caso, en una película de 1,5 horas de duración, dividiéndola en 6 de 15 minutos. trozos justo en los cambios de escena no dañarían mucha compresibilidad. ¡Y ayuda!
Camilo Martin
3

También podría intentar usar esto, es un software de codificación paralela / distribuida para Windows y funciona bien y escala muy bien también.

Intenta buscar en Google el codificador paralelo xcode.

Estos enlaces deberían proporcionar más información.

http://superscalar.pbworks.com/

dxblitzx
fuente
Sin relación: el nombre parece arrancado del documento Xcode de Apple sobre cómo funciona la compilación paralela con Xgrid. (Un IDE versus un codificador de video)
Chealion
ic, no soy un usuario de Mac, pero deberías probar esto, aunque solo funciona en Windows. Tengo una configuración con alrededor de 10 Ghz de potencia de procesamiento combinada y un video de 90 minutos de duración toma un promedio de 30-32 minutos para la conversión (x.264 / AAC / 1800 kbs vbr / 256 kbs audio).
dxblitzx
Gracias por su respuesta. ¡He cambiado esto a la respuesta correcta actual, ya que esta solución es la más cercana a lo que estaba buscando! :)
Avance
2

Para los usuarios de Final Cut Studio (solo Mac), el componente x264 QuickTime funciona notablemente bien cuando se usa con el clúster creado con QMaster. Cargue su película en Compressor y listo. En las pruebas encontré que la velocidad decente aumenta especialmente cuando se trabaja en un punto de almacenamiento compartido.

Chealion
fuente
3
Maldición ... soy un usuario de Windows. Sin embargo, se ve muy bien y es similar a lo que estoy buscando, ¡solo desearía que fuera multiplataforma!
Avance
2

Para Mac OS X 10.5 (no estoy seguro de la compatibilidad para 10.6) solía haber VisualHub , que le permitiría configurar una granja de servidores en su red local. Ahora está descontinuado y ReduxEncoder apareció como reemplazo, pero parece que no puedo encontrar las opciones para eso.

Tiago Veloso
fuente
2

Soy un GRAN fanático de la edición de video de Sony Vegas para Windows ... y hay una característica llamada Network Render. :) mmm.

Sony Vegas Workflow

EDITAR: No estoy muy seguro de si esta es una solución viable, pero en lugar de tratar de encontrar una aplicación de codificación de video que admita el renderizado en red, traté de encontrar un software que permita que cualquier aplicación aproveche la informática distribuida. Y encontré esto: IAIDataShareServer .

Parece bastante poderoso, y los resultados publicados de muestra son realmente geniales. Si vas a probarlo, cuéntanos cómo funciona.

EDIT2: IAIDataShareServer parece estar instruyendo a las máquinas para ejecutar tareas individuales. En ese sentido, he intentado buscar otras soluciones informáticas distribuidas y enumerar algunas prometedoras.

  1. JPPF
  2. XOREAX
  3. DCEZ (Este se ve bien)
monstruo
fuente
3
¿Estas seguro de eso? forums.creativecow.net/thread/24/895788
Avance
1
@Breakthrough: hola amigo, se encontró una nueva solución posible. No probado por mí mismo sin embargo. Ver respuesta editada. ¡Buena suerte!
caliban
2
@scopedreams: Vi eso, y al instante pensé que era perfecto ... Desafortunadamente, el intercambio de datos distribuidos solo ejecuta instancias de programas en cada computadora conectada a él, útil para ejecutar muchos trabajos, con cada cliente abordando un solo trabajo a la vez ... Pero en mi caso, quiero que solo se compute un trabajo en paralelo entre muchas computadoras.
Avance
1
@Breakthrough: argh maldita sea, de nuevo a rastrear la web, supongo.
caliban
1
@Breakthrough: Actualicé mi respuesta para proporcionar una lista de clientes informáticos distribuidos. De nuevo, no probado. No se preocupe por aceptar mi respuesta, también lo estoy haciendo para aprender algo nuevo para mí. :)
caliban
1

el simple hecho es que NO es uno de los desarrolladores del mundo que hasta la fecha se ha molestado en escribir y enviar parches distribuidos de cliente / servidor de codificación genérica TCP: IP / UDP para un x264 actual, a partir de hoy eso es 1745, vea x264.nl/

el modelo genérico de cliente / servidor se entiende bien, al igual que la base de código x264 limpia, y pedir una aclaración de cualquier código x264 es una simple cuestión de unirse al canal IRC x264 dev y preguntar, en cuestión de minutos generalmente tendrá una clave x264 Dev o dos responden a su consulta sobre cómo funciona esa sección de código, e incluso tienen una idea práctica de cómo podría volver a escribir su código en evolución para adaptarse mejor al x264 (y x262 un nuevo codificador Mpeg2 basado en el marco de clase mundial x264 que se está trabajando correctamente) ahora) modelo.

Entonces, si su desarrollador es lo mejor que podría hacer para el futuro de la calidad y la profesión, la codificación de video distribuida x264 de 32/64 bits es escribir estos parches básicos de cliente / servidor necesarios para hacer una instancia de x264 o una web / GUI separada interfaz de la aplicación con este nuevo código API cliente / servidor x264 que usted escribe, para buscar activamente, y asignar y transferir sobre la marcha secciones de codificación separadas de un solo video a cualquier nuevo código de cliente x264 administrado que coincida que también escriba.

sus nuevos clientes / servidores realmente distribuyen los parches de codificación base ni siquiera necesitan ser el mejor código C básico, simple pero funcional y que funcione y se pruebe y use doom10.org/index.php?action=unread

, ya que hay una cosa que a los desarrolladores de x264 les encanta hacer, y eso es tomar el código C lento existente y escribir versiones optimizadas del mismo, sección por sección, pero primero debes enviar el código beta real (parches de bienvenida) contra el última rama OC

Vale la pena analizarlo y, en realidad, hacer el esfuerzo de codificar estos servidores x264 para muchos parches de clientes x264 hoy, ya que x264 acaba de obtener capacidades de codificación de 10 bits de profundidad (eso significa alta calidad High, High 10, High 4: 2: 2 H. 264 perfiles de cómputo intensivo ahora están disponibles para todos de forma gratuita con x264) agregado.

para ser optimizado para una velocidad extra con el montaje muy pronto http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

pero incluso una sola máquina de 8 núcleos tendrá dificultades para proporcionar una salida de la más alta calidad en un tiempo razonable con 1080P, y pronto 2K y 4K súper alta definición, etc., una opción de codificación nativa x264 / H.264 distribuida muy fácil de configurar es solo un parche o dos de distancia.

si eres un desarrollador, POR FAVOR, no esperes, hazlo hoy.

distribuido x264
fuente
En realidad, pensé en hacer esto. El problema principal no es hacer que dos computadoras realicen los cálculos, sino transferir los datos del conjunto de trabajo entre máquinas. Es mucho más fácil mover datos dentro y fuera de la RAM en una sola máquina (en muchos gigabytes por segundo), pero mucho más lento en una LAN (máximo a 100 megabytes por segundo).
Avance el
1

Puede echar un vistazo a Media Encoding Cluster :

Media Encoding Cluster es la primera solución de codificación de clúster de código abierto que está escrita en C / C ++ para la codificación distribuida de medios (video y audio).

Media Encoding Cluster es un codificador de video extensible, que utiliza una grilla peer-to-peer liviana para aprovechar la potencia de procesamiento de las PC normales con el fin de distribuir la codificación de video altamente comprimido, por ejemplo MPEG4 y H.264

Distribuye fragmentos de video a través de la red a los nodos del cliente y paraleliza la tarea de codificación para un archivo en incluso más de una computadora para reducir el tiempo de codificación por archivo.

Badaboom ofrece otro enfoque para Nvidia ($ 39.99 con prueba), también revisado aquí :

Badaboom de Elemental utiliza la interfaz CUDA de Nvidia para hacer gran parte del trabajo duro de la extracción de DVD mediante el uso de la GPU en lugar de su antigua CPU a humedad.

De la misma manera, también está Avivo Video Converter para ATI Radeon, descrito en wikipedia , aunque puede tomar algo de tiempo para que funcione.

harrymc
fuente
@Breakthrough: ¿Has mirado estos productos?
harrymc
1

Si bien puede ser una sugerencia exagerada, Rhozet Carbon Server puede reunir varias instancias de Carbon Coder para el trabajo que ha descrito.

Sitio web para el servidor de carbono Rhozet

Se pueden configurar múltiples nodos de Carbon Coder como una granja de transcodificación, controlada por uno o más servidores de carbono. Carbon Server permite el procesamiento automatizado de tareas de transcodificación de alto volumen, la conmutación por error controlada por el servidor de los nodos de Carbon Coder, así como la gestión de la distribución del trabajo, la priorización del trabajo, el equilibrio de carga, la transferencia FTP, la supervisión del estado y la notificación del trabajo.

edusysadmin
fuente