Eu uso o FFmpeg para fazer a captura de tela de vídeo a partir do visor Xvfb.
Atualmente, eu o invoco com:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Enquanto eu gravo vídeos de cerca de 5 sessões Xvfb, meu uso da CPU é muito alto e há defasagens por causa disso. Além disso, o uso da memória é de cerca de 300 MB para cada um dos processos ffmpeg.
Quais parâmetros do ffmpeg devo usar para minimizar o uso de recursos do computador (principalmente CPU e memória) ao fazer a captura de tela de vídeo?
fonte
ffmpeg
com o-preset superfast
parâmetro (ainda não tentei-crf
). Nesse caso, são necessários menos recursos e produz vídeos de tamanho suficiente.-crf 23
é usado por padrão se você não declarar um valor, mas mesmo assim sesuperfast
for suficiente para você, talvez o problema esteja resolvido.É melhor se concentrar no uso de diferentes opções de ffmpeg que alcançarão o mesmo resultado de uma maneira que use menos recursos. Dito isto, existem maneiras de usar menos recursos se você realmente precisar realizar algo específico com o ffmpeg e ele estiver usando muitos recursos.
Você pode diminuir a prioridade do
ffmpeg
processo da CPU:nice
comando para alterar a prioridade do processo:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
. No Linux, o número da prioridade (onice
formato do comando énice -n <priority> <command>
) varia de -20 a 20. Quanto maior o número inteiro, menor a prioridade; neutro é 0. Se você usar o comando que eu lhe dei e configurá-lo como 8, a CPU dará ao processo menos tempo, o que parece ser menos "energia". Se esse número for muito alto ou dois baixo, é claro, você poderá alterá-lo.ffmpeg
execução, abra o Monitor do Sistema. Role para baixo até o processo nomeadoffmpeg
, clique com o botão esquerdo para selecionar, clique com o botão direito e defina a prioridade como "Baixa" ou "Muito baixa".Se você também estiver preocupado com o uso da memória, saiba que não é possível dizer a um processo que apenas consuma tanta memória e ainda execute. O kernel controla automaticamente a alocação de memória para processos. Há uma maneira de armazenar processos, com o
timeout
script , para que, quando um processo e qualquer processo filho ocupem muita memória (um limite definido por você), eles sejam finalizados com segurança e uma notificação seja exibida. No entanto, se um processo recebe tanta memória (digamos pelo kernel) e solicita mais memória que não pode ter, ele trava.Algumas coisas úteis para saber sobre:
Usando o conhecimento do Cgroups, você pode fazer muitas coisas divertidas, como controlar a troca de um processo.
fonte
-re (entrada) Leia a entrada na taxa de quadros nativa. Usado principalmente para simular um dispositivo de captura ou fluxo de entrada ao vivo (por exemplo, ao ler de um arquivo). Não deve ser usado com dispositivos de captura reais ou fluxos de entrada ao vivo (onde pode causar perda de pacotes). Por padrão, o ffmpeg tenta ler as entradas o mais rápido possível. Esta opção diminuirá a leitura das entradas para a taxa de quadros nativa das entradas. É útil para saída em tempo real (por exemplo, transmissão ao vivo).
fonte