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) 
<lis...@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. ;)



  

Responder a