¿Cómo obtener una calidad de grabación de pantalla casi perfecta?

27

Alguien sugirió que dirija una copia de la pantalla X no modificada a un archivo y luego convierta ese archivo en un archivo de video de uso general. ¿Qué comandos usaría para hacer esto en un sistema Kubuntu? (Editar: Dijo algo sobre adjuntar un puerto de pantalla a un archivo). Si no es posible, ¿cuál es mi mejor opción para una grabación de pantalla de excelente calidad que no dependa de un hardware rápido?

Antecedentes: intenté usar avconv con -f x11grab y algunos programas GUI. Sin embargo, no importa lo que intente, el video resultante tiene artefactos / desenfoque o está entrecortado (faltan cuadros). Esto probablemente se deba a restricciones de CPU / memoria.

Metas:

  • La calidad del video no debe ser notablemente diferente de ver la sesión directamente en una pantalla, porque el propósito es demostrar una aplicación animada.
  • El video final debe estar en un formato común que se pueda enviar a los usuarios de Windows y usar en la web. Creo que H.264 MP4 debería funcionar.
  • La solución no debe presumir mucho conocimiento previo. Estoy familiarizado con la línea de comandos y los comandos básicos de Linux, pero todavía estoy aprendiendo Linux y no sé mucho sobre códecs de video.

Lo que ya probé:

  • El mejor comando hasta ahora:, ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.aviluego convertir a mp4 con ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • La calidad de la imagen es excelente, pero en mi sistema de prueba se retrasa la computadora. En un sistema de destino más rápido, no se retrasa, pero obviamente los cuadros se omiten, lo que hace que el video no sea muy fluido .
    • Todavía estoy tratando de descubrir cómo guardar el archivo grab.avi en SHM para ver si eso ayuda.
  • Uso de grabadoras GUI Istanbul y RecordMyDesktop
  • Comando simple: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgusando avconv versión 0.8.3-4: 0.8.3-0ubuntu0.12.04.1
  • Adición -codec:copy(falla con: Requested output format 'x11grab' is not a suitable output format)
  • Adición -same_quant(resultados de gran calidad, pero es muy entrecortado / falta muchos cuadros)
  • Adición -vpre lossless_ultrafast(falla con: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Agregar varios valores de -qscale
  • Agregar varios valores de -b
  • Adición -vcodec h264(salidas repetidamente: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Nota: h264 aparece en la avconv -formatssalida comoDE h264 raw H.264 video format
Oleg
fuente

Respuestas:

24

Si su HDD lo permite, puede intentar hacerlo de esta manera:

Primero escriba el archivo sin comprimir:

ffmpeg -f x11grab -s SZ -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi

Aquí SZestá su tamaño de pantalla (por ejemplo, 1920x1080).

Después de eso, puede comprimirlo en cualquier momento que desee:

ffmpeg -i grab.avi grab.mkv

Por supuesto, puede cambiar la compresión, seleccionar el códec, etc.

Eddy_Em
fuente
1
Ver también: unix.stackexchange.com/a/120001/26227
Dave Jarvis el
6

He tenido éxito con:

ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :1 \
       -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
       video.mkv

Puntos clave:

  • -qp 0: modo sin pérdida x264
  • -preset ultrarrápido: uso de CPU más pequeño, tamaño grande
  • -pix_fmt yuv444p: el valor predeterminado, pero ffmpeg sugiere yuv420p, que tiene pérdidas

Sugerencia: captura la pantalla y la superposición de la cámara web con:

ffmpeg -f x11grab -thread_queue_size 64 -video_size 1920x1080 -framerate 30 -i :1 \
       -f v4l2 -thread_queue_size 64 -video_size 320x180 -framerate 30 -i /dev/video0 \
       -filter_complex 'overlay=main_w-overlay_w:main_h-overlay_h:format=yuv444' \
       -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
       video.mkv

https://trac.ffmpeg.org/wiki/Capture/Desktop

[editar 20180418] Actualización para Gnome Shell y Wayland:

#!/usr/bin/env python3
from dbus import SessionBus, Interface
from os import getcwd, path
from sys import argv

BUS_NAME = 'org.gnome.Shell.Screencast'
PATH_NAME = '/org/gnome/Shell/Screencast'
INTERFACE_NAME = BUS_NAME
PIPELINE='x264enc pass=qual quantizer=0 speed-preset=ultrafast ! queue ! matroskamux'

if path.isabs(argv[1]):
    name = argv[1]
else:
    name = path.join(getcwd(), argv[1])

bus = SessionBus()
screen_cast = bus.get_object(BUS_NAME, PATH_NAME)
screen_cast = Interface(screen_cast, INTERFACE_NAME)

ret, name = screen_cast.Screencast(name, {'pipeline': PIPELINE})

if not ret:
    print('Error starting screencast.')
    raise SystemExit(1)

try:
    i = input()
except (EOFError, KeyboardInterrupt):
    pass
finally:
    screen_cast.StopScreencast()
hdante
fuente
1

¿Has probado rfbroxy ?

Lo uso para grabar sesiones de pantalla X11.

Puede usarlo en un modo donde solo graba una imagen, si hay un CAMBIO.

Nils
fuente
1

Esta es una solución alternativa, y probablemente no sea "casi perfecta", ya que puede depender de la velocidad de la red u otros factores que pueden dificultar la transmisión de video.

Use VNC o Teamviewer y conéctese desde su computadora portátil o de escritorio a la otra máquina. Si tiene una computadora portátil con Windows u OSX disponible, probablemente tenga herramientas que pueden grabar esto, y creo que teamviewer puede grabar una sesión en sí. Es fácil de probar, y luego puede decidir si la calidad es lo suficientemente buena.

Teamviewer tiende a escalar, pero no sé si esto también sucede con las sesiones grabadas.

VNC no se comprime ni escala, y su monitor de computadora portátil / de escritorio necesita una resolución más alta que la de la otra máquina. La calidad es buena Tal vez el visor VNC que usa puede grabar. Ahora estoy en Ubuntu, y el visor estándar no puede hacer esto.

Grabación de pantalla para mostrar a una audiencia o en la web: existen herramientas especiales para esto que pueden captar clics, seguir y hacer zoom con el mouse, y tienen otras opciones para dejar más claro lo que está haciendo. Te sugiero que eches un vistazo a esos también. Google para "software de grabación de pantalla".

SPRBRN
fuente
0

Estoy usando Camtasia para grabar mi video de juego y mi video en línea. También usé la grabadora de video fraps antes, pero los fps caen durante la reproducción. Camtasia ofrece un fps más alto, pero el único problema problemático es que cada vez que debo convertir la salida .CAMREC a avi como puede ver en la descripción del enlace aquí ingrese la descripción del enlace aquí . El .camrec es el formato propietario de camtasia y no se puede reproducir en ningún reproductor de terceros como Windows Media Player y vlc.

Belzonsci Belzonsci
fuente