Uso FFmpeg para hacer capturas de pantalla de video desde la pantalla Xvfb.
Actualmente lo invoco con:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Cuando grabo video de aproximadamente 5 sesiones Xvfb, mi uso de CPU es muy alto y hay retrasos debido a eso. Además, el uso de memoria es de aproximadamente 300 MB para cada uno de los procesos de ffmpeg.
¿Qué parámetros para ffmpeg debo usar para minimizar el uso de recursos de la computadora (particularmente CPU y memoria) al hacer la captura de pantalla de video?
fuente
ffmpeg
con el-preset superfast
parámetro (no lo he intentado-crf
). Toma menos recursos en tal caso y produce videos de un tamaño suficientemente bueno.-crf 23
se usa de forma predeterminada si no declara un valor, pero de todos modos sisuperfast
es suficiente para usted, entonces tal vez el problema esté resuelto.Es mejor concentrarse en usar diferentes opciones de ffmpeg que logren el mismo resultado de una manera que use menos recursos. Dicho esto, hay formas de usar menos recursos si realmente necesita lograr algo específico con ffmpeg y está usando demasiados recursos.
Puede disminuir la prioridad del
ffmpeg
proceso de CPU de:nice
comando para cambiar la prioridad del proceso:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
. En Linux, el número de prioridad (elnice
formato del comando esnice -n <priority> <command>
) varía de -20 a 20. Cuanto mayor sea el entero, menor será la prioridad; neutral es 0. Si usa el comando que le di y lo configuró en 8, la CPU le dará al proceso menos tiempo, lo que parece menos "potencia". Si este número es demasiado alto o dos bajos, por supuesto, puede cambiarlo.ffmpeg
ejecución, abra el Monitor del sistema. Desplácese hacia abajo hasta el proceso nombradoffmpeg
, haga clic con el botón izquierdo para seleccionar, haga clic con el botón derecho y configure la prioridad en "Bajo" o "Muy bajo".Si también le preocupa el uso de la memoria, sepa que no es posible decirle a un proceso que solo tome tanta memoria y aún se ejecute. El kernel controla automáticamente la asignación de memoria para los procesos. Hay una manera de enjaular procesos, con el
timeout
script , de modo que cuando un proceso y cualquier proceso secundario ocupan demasiada memoria (un límite establecido por usted) se finalizan de forma segura y se muestra una notificación. Sin embargo, si un proceso solo recibe tanta memoria (digamos por el núcleo) y solicita más memoria que no puede tener, se bloqueará.Algunas cosas útiles que debe saber sobre:
Usando el conocimiento de Cgroups, puede hacer muchas cosas divertidas como controlar el intercambio de un proceso.
fuente
-re (entrada) Leer entrada a velocidad de fotogramas nativa. Se utiliza principalmente para simular un dispositivo de captura o una transmisión de entrada en vivo (por ejemplo, cuando se lee desde un archivo). No debe usarse con dispositivos de captura reales o transmisiones de entrada en vivo (donde puede causar pérdida de paquetes). Por defecto, ffmpeg intenta leer las entradas lo más rápido posible. Esta opción ralentizará la lectura de las entradas a la velocidad de fotogramas nativa de las entradas. Es útil para la salida en tiempo real (por ejemplo, transmisión en vivo).
fuente