A resposta mais simples é, se você estiver usando Linux ou similar, use o comando nice
ao iniciar o ffmpeg.
Você usa nice
com qualquer comando padrão e ajusta a prioridade da CPU do comando.
Então, se você estiver usando atualmente
ffmpeg -i uploaded.mpg -vcodec copy out1.mpg
(exceto, obviamente, com argumentos mais interessantes), Você pode apenas fazer
nice ffmpeg -i uploaded.mpg -vcodec copy out1.mpg
.
Editar: vi que você está usando o Windows Server 2008 .
No Windows, o substituto do comando nice
é usar o comando START
com opções.
Valeria a pena ler esta página: link
Então você pode usar algo como:
start /wait /low /b ffmpeg [your arguments here]
-
/wait
significa iniciar o comando no final e aguardar a conclusão. Caso contrário, ele iniciará o ffmpeg e retornará imediatamente - possivelmente iniciando outra cópia do ffmpeg para criar uma taxa de bits alternativa, se você tiver criado um loop como esse. -
/low
é o bit que diz executar o processo com baixa prioridade -
/b
significa não abrir uma janela de prompt de comando, que você não precisará em seu servidor.
MAS
Essas provavelmente não são a melhor resposta. A melhor resposta será fazer o processamento de vídeo em outro servidor (ou servidores). Você precisará compartilhar um banco de dados e armazenamento em disco. Quando alguém envia um vídeo, ele precisa ser sinalizado para conversão. Em seguida, seu farm de renderização pode remover as tarefas de renderização uma a uma, salvando em disco e atualizando o banco de dados com as taxas de bits disponíveis.
Separar a renderização dessa maneira tem duas vantagens:
- Isso significa que o seu servidor web não está sobrecarregado com o processamento de vídeo e, portanto, permanece responsivo aos usuários
- Você pode adicionar mais servidores para fazer a renderização, se quiser (ou usar serviços em nuvem).
Isso vem com um pedaço de trabalho.