Existe alguma maneira de distribuir trabalhos de codificação x264 em vários computadores (para aumentar a velocidade de codificação)?

29

Alguém conhece uma solução ativa e atual para codificar vídeos x264 em muitos computadores (via rede) para aumentar o FPS de codificação?

Brownie aponta para multiplataforma e código aberto, mas, como todos sabem, eu costumo usar o Windows.


Programas que ouvi falar e por que não acredito que sejam adequados:

  • x264farm : não desenvolvido ativamente. Boa interface, mas não suporta codificação de duas passagens e falha com as novas compilações x264.
  • ÉLDER : Novamente, não foi desenvolvido ativamente, mas meu problema foi que ele não funcionava com novas compilações x264 e era muito difícil de configurar (leia-se: parou de funcionar aleatoriamente).

Embora eu não precise absolutamente de um programa que esteja sendo desenvolvido ativamente, eu gostaria de um que suporte a codificação de duas passagens e funcione com novas compilações x264 .


Informações adicionais : Até agora, ofereci (e premiei!) Duas recompensas separadas sobre essa questão desde que a publiquei há mais de dois anos, e ainda não encontrei uma solução para esse problema. O que estou procurando basicamente é um programa simples que permita codificar vídeos x264 usando o poder de processamento de vários computadores conectados por uma LAN. Além disso, seria bom se funcionasse com novas compilações x264 e suportasse a codificação de duas passagens.

Se a qualquer momento alguém tiver uma resposta atualizada ou uma nova solução para esse problema, poste-a e ela será levada em consideração.


Atualização de 2016 :

Depois de grande parte da minha experiência profissional com visão computador / máquina, percebi que a sobrecarga associada à grande quantidade de dados / memória compartilhada e ao gargalo em potencial que ela apresenta podem exceder os benefícios em potencial.

Embora eu ainda adorasse encontrar algo que me permitisse aproveitar o poder de computação ocioso de vários dispositivos, por enquanto, os codificadores modernos baseados em GPGPU são uma abordagem muito melhor se você precisar de codificação aprimorada / em tempo real. É o que a maioria das plataformas de codificação de vídeo baseadas em nuvem fornece (que é outra alternativa se você usa SaaS ou computação em nuvem), embora em uma escala maior.

Avanço
fonte
Ainda trabalhando nisso. O x264farm é apenas o gerenciador de renderizações, parece que você deve poder colocar qualquer versão do x264 que desejar nos PCs escravos. Você já tentou isso e quais erros aparecerão se você o fez?
Keck
1
Sei que esse é um tópico antigo, mas acho que devo compartilhar minha experiência pessoal. Não distribua um trabalho para várias máquinas, é uma perda de tempo, já que distribuir para vários núcleos já diminui o desempenho, e há vários processadores físicos e várias máquinas, cada uma com latência e problema de E / S. Dito isto, use-o quando for realmente necessário, se houver vários arquivos (trabalhos), distribuídos por arquivo, acredito que o Squeeze possa distribuir a carga em várias máquinas, mas isso é muito caro.
precisa
@ShaneHsu obrigado por compartilhar. Eu escrevi primeiro esta questão mais de quatro anos atrás, e naquele tempo, a máquina que eu estava usando para fazer este trabalho não era quase tão poderoso como o que eu tenho agora, por isso fazia muito mais sentido para trás, em seguida, ir por esse caminho. Hoje, eu tenho que concordar com você - se a velocidade de renderização se tornar um problema, é melhor transferir o trabalho inteiro para outra máquina, em vez de dividir um único trabalho em vários blocos (e deixar uma instância do codificador h.264 cuidar de codificação multithread / multicore, se necessário).
Breakthrough
Estou procurando fazer a mesma coisa, mas, infelizmente, parece que esse segmento é preenchido principalmente por soluções ou projetos incompletos que não existem mais. Embora pareça que sua necessidade de fazer isso diminuiu, se você tiver mais informações sobre possíveis soluções desde a última atualização, informe-me.
Locksleyu

Respostas:

6

Você pode renderizar partes separadas do vídeo e usar o VirtualDub para costurar tudo junto com o modo Copiar (onde não há codificação). Não é uma codificação distribuída real nem nada, mas as soluções mais simples às vezes funcionam melhor.

Ivan Vučica
fonte
5
Novamente, o único problema com isso é que haverá uma perda de qualidade devido à colocação de quadros I / B ao renderizar o vídeo. Um algoritmo de detecção de cena precisaria ser usada para determinar onde dividi-lo, e de alguma forma, você precisaria dividir o vídeo em exatamente esse quadro ...
Breakthrough
O VirtualDub possui aqueles ícones "verde e vermelho" que devem servir na detecção de troca de cena. Se minha memória de alguns anos atrás me serve corretamente, funcionou muito bem. Mas, novamente, sou amador quando se trata de codificação de vídeo e vídeo.
Ivan Vučica 12/09/09
O AFAIK VirtualDub possui um comando "ir para o próximo quadro". Eu apenas dividi-lo manualmente.
Camilo Martin
@ Breakthrough Então, tudo o que você precisa é de um filtro que divida uma entrada de vídeo em pedaços nos limites de mudança de cena (para que eles possam ser codificados separadamente)? Isso é bastante simples. Existe algum outro problema?
GroovyDotCom
@GroovyDotCom, além disso, todo o software de suporte (por exemplo, um servidor para iniciar o filtro de divisão, distribuí-lo para todos os nós clientes que executam codificadores, enfileirar os trabalhos, transferir os arquivos de volta para o servidor principal e mesclar novamente o ainda precisa ser resolvido, e isso ainda não trata de possíveis problemas de qualidade / eficiência com o método de codificação de um vídeo grande em segmentos individuais. Observe também que essa pergunta tem quase seis anos neste momento, portanto, tenho certeza que muita coisa mudou desde então também em relação à codificação distribuída.
Breakthrough
4

É beta, mas funcional. Não é tão simples, mas funciona. É baseado em janelas e gratuito.

ELDER de alguns caras Doom9

Keck
fonte
2
Vi isso também, mas esperava algo comparável ao x264farm - não há nenhum problema de qualidade com o x264farm ... Além disso, o projeto foi abandonado por algum tempo.
Breakthrough
1
Eu originalmente concedi uma recompensa de 50 pontos a esta resposta, porque era a solução mais próxima na época . No entanto, este programa teve alguma perda de qualidade em comparação com um codificador de computador único. Espero evitar o impacto na qualidade.
Breakthrough
@ Breakthrough E se você apontar um pouco mais alto, como se isso tornasse 10% pior, as configurações (detalhes / tamanho da moldura / etc) 10% mais altas?
tobylane
@tobylane, o problema está no posicionamento dos quadros I / B ao renderizar o vídeo. Um algoritmo de detecção de cena precisaria ser usado para determinar onde dividi-lo e, de alguma forma, você precisaria dividir o vídeo exatamente nesse quadro. Dependendo do material de origem, isso geralmente é impossível de ser realizado com perfeição e, portanto, a codificação de um vídeo inteiro de uma só vez geralmente produz uma melhor qualidade do que a renderização em pedaços.
Breakthrough
2
Por padrão, o @Breakthrough x264 tem um GOP máximo de 250 quadros, com material HD ainda menos. Ele fechará o GOP em algum momento (a menos que você o ajuste), e então não haverá perda de qualidade se você seguir exatamente onde um GOP terminaria, infelizmente isso não é muito previsível. De qualquer forma, em um filme de 1,5 horas, divida-o em 6 15 minutos. pedaços diretamente nas mudanças de cena não prejudicariam muita compressibilidade. E isso ajuda!
Camilo Martin
3

Você também pode tentar usar isso, é um software de codificação paralela / distribuída para Windows e funciona bem e também é dimensionável.

Tente pesquisar no codificador xcode Parallel.

Esses links devem fornecer mais informações.

http://superscalar.pbworks.com/

dxblitzx
fonte
Não relacionado: a aparência dos nomes foi extraída do documento Xcode da Apple sobre como a compilação paralela funcionava com o Xgrid. (Um IDE versus um codificador de vídeo)
Chealion
ic, eu não sou um usuário mac, mas você deve tentar isso, funciona apenas no Windows. Eu tenho uma configuração com cerca de 10 Ghz de potência de processamento combinada e um vídeo de 90 min leva em média 30 a 32 minutos para conversão (áudio x.264 / AAC / 1800 kbs vbr / 256 kbs de áudio).
precisa saber é o seguinte
Obrigado pela sua resposta. Alterei isso para a resposta correta atual, pois essa solução é a mais próxima do que eu estava procurando! :)
avanço
2

Para usuários do Final Cut Studio (somente Mac), o componente x264 QuickTime funciona notavelmente bem quando usado com um cluster criado usando o QMaster. Carregue seu filme no Compressor e pronto. Nos testes, descobri aumentos decentes de velocidade, especialmente ao trabalhar em um ponto de armazenamento compartilhado.

Chealion
fonte
3
Porra ... eu sou um usuário do Windows. Parece muito legal e semelhante ao que estou procurando - eu só queria que fosse multiplataforma!
Breakthrough
2

Para o Mac OS X 10.5 (não tenho certeza da compatibilidade do 10.6), costumava haver o VisualHub , o que permitiria a você configurar um farm de grade na sua rede local. Agora ele foi descontinuado e o ReduxEncoder apareceu como substituto, mas não consigo encontrar as opções para isso.

Tiago Veloso
fonte
2

Sou um grande fã da edição de vídeo do Sony Vegas para Windows ... e há um recurso chamado Network Render. :) Sim.

Fluxo de trabalho da Sony Vegas

EDIT: Não tenho muita certeza se essa é uma solução viável, mas, em vez de tentar encontrar um aplicativo de codificação de vídeo que ofereça suporte à renderização em rede, tentei encontrar um software que permita a qualquer aplicativo tirar proveito da computação distribuída. E eu encontrei isso - IAIDataShareServer .

Parece bastante poderoso, e os resultados da amostra publicados são realmente ótimos. Se você vai tentar, deixe-nos saber como funciona?

EDIT2: IAIDataShareServer parece ser apenas instruindo máquinas para executar tarefas individuais. Nesse sentido, tentei procurar outras soluções de computação distribuída e listar algumas promissoras.

  1. JPPF
  2. XOREAX
  3. DCEZ (Este parece ser bom)
caliban
fonte
3
Você tem certeza disso? forums.creativecow.net/thread/24/895788
Inovador
1
@ Breakthrough: hey mate, nova solução possível encontrada. Não testado por mim mesmo. Veja a resposta editada. Boa sorte!
caliban
2
@scopedreams: Vi isso e achei instantaneamente perfeito ... Infelizmente, esse compartilhamento de dados distribuídos apenas executa instâncias de programas em cada computador conectado a ele - útil para executar muitos trabalhos, com cada cliente enfrentando um único trabalho de cada vez ... Mas, no meu caso, quero que apenas um trabalho seja calculado em paralelo entre muitos computadores.
Breakthrough
1
@ Breakthrough: argh danado, de volta à rede de arrasto, eu acho.
caliban
1
@ Breakthrough: Atualizei minha resposta para fornecer uma lista de clientes de computação distribuída. Novamente, não testado. Não se preocupe em aceitar minha resposta, estou fazendo isso para aprender algo novo para mim também. :)
caliban
1

o fato simples é que NON dos desenvolvedores do mundo se preocupou em escrever e enviar patches de cliente / servidor de codificação genérica TCP: IP / UDP distribuída para um x264 atual, até hoje em 1745, consulte x264.nl/

o modelo genérico de cliente / servidor é bem compreendido, assim como a base de código x264 limpa, e pedir esclarecimentos sobre qualquer código x264 é uma simples questão de ingressar no canal IRC x264 dev e perguntar: em minutos, você geralmente terá uma chave x264 Dev ou duas respondem à sua pergunta sobre como essa seção de código funciona e até têm idéias práticas de como você pode reescrever seu código em evolução para melhor se ajustar ao x264 (e x262, um novo codificador Mpeg2 baseado na estrutura de classe mundial x264 sendo trabalhada corretamente agora) modelo.

Portanto, se você é um desenvolvedor, a melhor coisa que você pode fazer para o futuro da codificação de vídeo distribuída x264 de 32/64 bits de qualidade e profissão é realmente escrever esses patches básicos de cliente / servidor necessários para criar uma instância do x264 ou uma GUI da web / GUI separada interface do aplicativo com esse novo código de API x264 cliente / servidor que você escreve, para procurar ativamente, atribuir e transmitir rapidamente seções de codificação separadas de um único vídeo para qualquer novo código de cliente x264 gerenciado correspondente que você também escreve.

seus novos clientes / servidores realmente distribuídos, nem precisam ser os melhores, apenas básicos, mas funcionais e totalmente funcionais códigos C testados e usados ​​doom10.org/index.php?action=unread

, como há uma coisa que os desenvolvedores x264 parecem gostar de fazer, e isso pega o código C lento lento e escreve versões otimizadas dele, seção por seção, mas você precisa realmente enviar o código beta real (patches welcome) primeiro contra o mais recente filial OC

vale a pena investigar e, na verdade, fazer um esforço para codificar esses servidores x264 para muitos patches de clientes x264 hoje, pois o x264 possui apenas recursos de codificação de profundidade de 10 bits (isso significa alta qualidade Alta, Alta 10, Alta 4: 2: 2 H. 264 perfis intensivos de computação estão agora disponíveis para todos de graça com o x264) adicionado.

para ser otimizado para obter velocidade extra com montagem em breve http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

mas mesmo uma única máquina de 8 núcleos se esforçará para fornecer saída da mais alta qualidade em um tempo razoável com 1080P e, em breve, 2K e 4K de alta definição, etc, é realmente fácil configurar e usar a opção de codificação nativa distribuída x264 / H.264 um pedaço ou dois de distância.

Se você é um desenvolvedor, POR FAVOR, não espere, faça-o hoje.

x264 distribuído
fonte
Na verdade, pensei em fazer isso. O principal problema não é conseguir dois computadores para executar os cálculos, mas transferir os dados do conjunto de trabalho entre as máquinas. É muito mais fácil mover dados para dentro e para fora da RAM em uma única máquina (no entanto, muitos gigabytes por segundo), mas muito mais lento em uma LAN (máximo de 100 megabytes por segundo).
Breakthrough
1

Você pode dar uma olhada no Media Encoding Cluster :

O Media Encoding Cluster é a primeira solução de codificação de cluster de código aberto escrita em C / C ++ para codificação de mídia distribuída (vídeo e áudio).

O Media Encoding Cluster é um codificador de vídeo extensível, que usa uma grade ponto a ponto leve para aproveitar o poder de processamento de PCs comuns com o objetivo de distribuir a codificação de vídeo altamente compactado, por exemplo, MPEG4 e H.264

Ele distribui pedaços de vídeo pela rede para nós clientes e paralela a tarefa de codificação para um arquivo em mais de um computador para reduzir o tempo de codificação por arquivo.

Outra abordagem é oferecida para a Nvidia pela Badaboom (US $ 39,99 com avaliação), também revisada aqui :

O Badaboom da Elemental usa a interface CUDA da Nvidia para fazer muito do trabalho pesado de ripar DVDs usando a GPU em vez de sua antiga CPU.

Da mesma forma, também existe o Avivo Video Converter for ATI Radeon, descrito na wikipedia , embora possa demorar um pouco para fazê-lo funcionar.

harrymc
fonte
@ Breakthrough: Você já olhou para esses produtos?
harrymc
1

Embora possa ser um pouco exagerado, o Rhozet Carbon Server pode reunir várias instâncias do Carbon Coder para o trabalho que você descreveu.

Site por Rhozet Carbon Server

Vários nós de codificador de carbono podem ser configurados como um farm de transcodificação, controlado por um ou mais servidores de carbono. O Carbon Server permite o processamento automatizado de tarefas de transcodificação de alto volume, failover controlado por servidor de nós do Carbon Coder, além de gerenciar a distribuição de tarefas, a priorização de tarefas, o balanceamento de carga, a transferência FTP, o monitoramento de status e a notificação de tarefas.

edusysadmin
fonte