[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Captura de pantalla (video screencast) con FFMPEG con muy bajos FPS y poca fluidez



Mira...
Yo tengo una empresa que trabaja editando videos publicitarios en forma profesional para Cine, TV y Streaming así que de video tenemos bastante experiencia.
Es por ello que te puedo asegurar que Linux está tremendamente atrasado en todo lo que sea video y gráfica profesional por lo que no me sorprende que al actualizar una maquina a una muchísimo más moderna el comportamiento en el trabajo de video sea menos eficiente y más lento. A nosotros nos pasa a menudo, con máquinas de 16 núcleos Xeon la sola transposición para sólo adaptar las frames a una norma, es una tortura pues es tremendamente lenta sobre Linux.

Una solución de compromiso que no resuelve totalmente los tremendos atrasos de Linux en cuestión de videos es actualizar los drivers e instalar MESA. Eso, con suerte y viento a favor, te podrá sacar momentáneamente del paso, pero no te solucionará el tema de la lentitud que tiene LINUX al trabajar video y muchos más con hardware gráfico nuevo.

Nosotros hace rato que DEJAMOS de USAR Linux para trabajos en video y gráfica porque NO sirve, esta tan desactualizado que los empleados editores se quejaban porque les hacía perder mucho tiempo y los programas que tenían a mano para editar eran muchísimo más pobres que los que puede haber en Windows o Macs. Así que dejamos de usar Linux en gráfica, usamos WINDOWS para gráfica y videos mientras dejamos LINUX en servers y PC Administrativas.

Para finalizar: Con Linux y algunos programitas se pueden hacer videos pero de manera NO profesional y con un desperdicio de recursos impresionante. Conocemos que hay películas, animaciones y clips hechos enteramente con LINUX pero... lo que no dicen es que lo hecho llevó muchísimo más tiempo, más recursos de PC y mucho más esfuerzo que si lo hubiesen realizado con Windows.
El lunes, 12 de abril de 2021 16:23:25 ART, jEsuSdA 8) <listas@jesusda.com> escribió:


Hola, compañeros.

Recientemente he cambiado de PC, pasé de tener un Intel Core i5 4460 con
tarjeta gráfica integrada a un Xeon E5 2678 v3 con gráfica AMD RADEON RX
550.

Sobre el papel, el nuevo PC es del orden de 3 a 7 veces más potente que
el antiguo y puedo atestiguar que así es en el uso diario, edición de
vídeo e imagen etc. La ventaja de tener tantos núcleos e hilos
disponibles es palplable. A nivel juegos no lo he probado porque
realmente no soy gamer y los pocos juegos que uso son los típicos libres
que vienen con Debian y algún emulador que, sinceramente, ya funcionaban
bien con el PC antiguo.

Sin embargo hay una tarea que me trae de cabeza por su terrible
desempeño: la captura de pantalla en vídeo.

Con mi antiguo PC era capaz de capturar a más de 60 fps a pantalla
completa mientras realizaba cualquier tarea de la que necesitara hacer
videotutorial.

Incluso con mi lenovo thinkpad x230 logro capturar pantalla a más de
80fps con total fluidez.

El comando que he empleado siempre es:

ffmpeg  -f x11grab -draw_mouse 1 -framerate 60 -video_size 1920x1200 -i
:0.0+1680,0  -qscale 0 -pix_fmt yuv420p -c:v libx264 -preset medium -qp
0 -q:v 1 -s 1920x1200 -f matroska -threads 4 video.mkv

Notas:

-video_size 1920x1200 -i :0.0+1680,0 y -s 1920x1200 son las dimensiones
y posición de la región a capturar (mi monitor derecho).

Nótese que incluso usaba -preset medium y codificación por software, de
forma que obtenía muy buena calidad incluso con esa configuración de
parámetros y sin bajar nunca de los 60 fps.



¿Qué me ocurre ahora?

El equipo es incapaz de capturar a más de 20 fps lo que hace que
cualquier vídeo sea inválido al ir a saltos y no llegar siquiera a
30fps, que sería lo mínimo exigible.

Además, se nota bastante la merma de respuesta del equipo en cuanto
lanzo el comando. Es decir, toda esa fluidez y suavidad que se aprecia
cuando se trabaja normalmente, desaparece y hasta el desplazar una
ventana de un lado a otro resulta tosco y a trompicones.


He probado con distintos parámetros de ffmpeg, a capturar en bruto, sin
codificar.

He probado a guardar el vídeo resultante directamente en un disco en
RAM, para evitar el posible cuello de botella de la escritura en disco.
No afecta en absoluto.




Así las cosas, ¿Alguien tiene alguna sugerencia de, al menos, por donde
puedo seguir indagando para hallar solución al problema?





Datos adicionales, por si son de ayuda:

$ → inxi
CPU: 12-Core Intel Xeon E5-2678 v3 (-MT MCP-)
speed/min/max: 1201/1200/3300 MHz Kernel: 5.10.0-0.bpo.4-amd64 x86_64
Up: 1d 6h 55m Mem: 6427.6/32012.4 MiB (20.1%)
Storage: 13.76 TiB (55.9% used) Procs: 433 Shell: bash 5.0.18 inxi: 3.0.32



$ → ffmpeg -v
ffmpeg version 4.1.6 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Debian 8.3.0-6)
  configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg
--disable-libopencv --disable-outdev=sdl2 --disable-podpages
--disable-sndio --disable-stripping --enable-libaom --enable-avfilter
--enable-avresample --enable-gcrypt --disable-gnutls --enable-openssl
--enable-gpl --enable-libass --enable-libbluray --enable-libbs2b
--enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfdk-aac
--enable-libfontconfig --enable-libfreetype --enable-libfribidi
--enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar
--enable-libmp3lame --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg
--enable-libopenmpt --enable-libopus --enable-libpulse
--enable-librubberband --enable-libshine --enable-libsnappy
--enable-libsoxr --enable-libspeex --enable-libtesseract
--enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc
--enable-libvorbis --enable-libvpx --enable-libx265 --enable-libzimg
--enable-libxvid --enable-libzvbi --enable-nonfree --enable-opencl
--enable-opengl --enable-postproc --enable-pthreads --enable-shared
--enable-version3 --enable-libwebp
--incdir=/usr/include/x86_64-linux-gnu
--libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened
--enable-frei0r --enable-chromaprint --enable-libx264
--enable-libiec61883 --enable-libdc1394 --enable-vaapi --enable-libmfx
--enable-libvmaf --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100



Tengo los drivers amdgpu libres (no los amdgpu-pro), pero activé opencl
por si acaso.

Seguí este tutorial:

https://linuxconfig.org/how-to-install-the-latest-amd-drivers-on-debian-10-buster



$ → glxinfo | grep OpenGL
OpenGL vendor string: AMD
OpenGL renderer string: Radeon RX550/550 Series (POLARIS12, DRM 3.40.0,
5.10.0-0.bpo.4-amd64, LLVM 11.0.1)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.3.4
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.3.4
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.3.4
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:





$ → clinfo
Number of platforms                               1
  Platform Name                                   Clover
  Platform Vendor                                 Mesa
  Platform Version                                OpenCL 1.1 Mesa 20.3.4
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd
  Platform Extensions function suffix             MESA

  Platform Name                                   Clover
Number of devices                                 1
  Device Name                                     Radeon RX550/550
Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)
  Device Vendor                                   AMD
  Device Vendor ID                                0x1002
  Device Version                                  OpenCL 1.1 Mesa 20.3.4
  Driver Version                                  20.3.4
  Device OpenCL C Version                         OpenCL C 1.1
  Device Type                                     GPU
  Device Profile                                  FULL_PROFILE
  Device Available                                Yes
  Compiler Available                              Yes
  Max compute units                               8
  Max clock frequency                             1183MHz
  Max work item dimensions                        3
  Max work item sizes                             256x256x256
  Max work group size                             256
  Preferred work group size multiple              64
  Preferred / native vector sizes
    char                                                16 / 16
    short                                                8 / 8
    int                                                  4 / 4
    long                                                 2 / 2
    half                                                 0 / 0        (n/a)
    float                                                4 / 4
    double                                               2 / 2       
(cl_khr_fp64)
  Half-precision Floating-point support           (n/a)
  Single-precision Floating-point support         (core)
    Denormals                                     No
    Infinity and NANs                             Yes
    Round to nearest                              Yes
    Round to zero                                 No
    Round to infinity                             No
    IEEE754-2008 fused multiply-add               No
    Support is emulated in software               No
    Correctly-rounded divide and sqrt operations  No
  Double-precision Floating-point support         (cl_khr_fp64)
    Denormals                                     Yes
    Infinity and NANs                             Yes
    Round to nearest                              Yes
    Round to zero                                 Yes
    Round to infinity                             Yes
    IEEE754-2008 fused multiply-add               Yes
    Support is emulated in software               No
  Address bits                                    64, Little-Endian
  Global memory size                              3221225472 (3GiB)
  Error Correction support                        No
  Max memory allocation                           1717986918 (1.6GiB)
  Unified memory for Host and Device              No
  Minimum alignment for any data type             128 bytes
  Alignment of base address                       32768 bits (4096 bytes)
  Global Memory cache type                        None
  Image support                                   No
  Local memory type                               Local
  Local memory size                               32768 (32KiB)
  Max number of constant args                     16
  Max constant buffer size                        67108864 (64MiB)
  Max size of kernel argument                     1024
  Queue properties
    Out-of-order execution                        No
    Profiling                                     Yes
  Profiling timer resolution                      0ns
  Execution capabilities
    Run OpenCL kernels                            Yes
    Run native kernels                            No
  Device Extensions cl_khr_byte_addressable_store
cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics
cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics
cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_fp64

NULL platform behavior
  clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...)  Clover
  clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...)   Success [MESA]
  clCreateContext(NULL, ...) [default]            Success [MESA]
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT)  Success (1)
    Platform Name                                 Clover
    Device Name                                   Radeon RX550/550
Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU)  No devices found
in platform
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU)  Success (1)
    Platform Name                                 Clover
    Device Name                                   Radeon RX550/550
Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR)  No devices
found in platform
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM)  No devices
found in platform
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL)  Success (1)
    Platform Name                                 Clover
    Device Name                                   Radeon RX550/550
Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)

ICD loader properties
  ICD loader Name                                 OpenCL ICD Loader
  ICD loader Vendor                               OCL Icd free software
  ICD loader Version                              2.2.12
  ICD loader Profile                              OpenCL 2.2



No se trataría de ningún problema de tearing, ya que no se aprecia
tearing alguno al reproducir vídeos y la directiva TearFree de los
controladores está activada.


$ → xrandr --verbose | grep TearFree
    TearFree: on
    TearFree: on
    TearFree: on






Muchas gracias. ;)




Reply to: