Alguien me sugirió que dirigiera una copia de la pantalla X sin modificar a un archivo y luego convirtiera 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 conectar 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?
Fondo:Intenté usar avconv con -f x11grab y algunos programas GUI. Sin embargo, no importa lo que intente, el vídeo resultante tiene artefactos, está borroso o está entrecortado (faltan fotogramas). Probablemente esto se deba a limitaciones de CPU/memoria.
Objetivos:
- La calidad del vídeo no debe ser notablemente diferente a la de ver la sesión directamente en una pantalla, porque el propósito es demostrar una aplicación animada.
- El vídeo final debe estar en un formato común que pueda enviarse a los usuarios de Windows y utilizarse en la web. Creo que H.264 MP4 debería funcionar.
- La solución no debería presumir de muchos conocimientos previos. 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.avi
, luego convierte a mp4 conffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4
.- La calidad de la imagen es excelente, pero en mi sistema de prueba va por detrás de la computadora. En un sistema de destino más rápido, no hay retraso, pero obviamente se saltan fotogramas, lo que hace que el vídeo no sea muyliso.
- Todavía estoy intentando descubrir cómo guardar el archivo grab.avi en SHM para ver si eso ayuda.
- Uso de grabadores GUI de Estambul y RecordMyDesktop
- Comando simple:
avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg
usando avconv versión 0.8.3-4:0.8.3-0ubuntu0.12.04.1 - Agregar
-codec:copy
(falla conRequested output format 'x11grab' is not a suitable output format
:) - Agregar
-same_quant
(da como resultado una gran calidad, pero está muy entrecortado/faltan muchos fotogramas) - Sumar
-vpre lossless_ultrafast
(falla con:Unrecognized option 'vpre'
,Failed to set value 'lossless_ultrafast' for option 'vpre'
) - Sumando varios valores de
-qscale
- Sumando varios valores de
-b
- Sumar
-vcodec h264
(resulta repetidamente:Error while decoding stream #0:0
,[h264 @ 0x8300980] no frame!
)- Nota: h264 aparece en la
avconv -formats
salida comoDE h264 raw H.264 video format
- Nota: h264 aparece en la
Respuesta1
Si tu HDD lo permite, puedes 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í SZ
está el tamaño de su pantalla (por ejemplo, 1920x1080).
Después de eso puedes comprimirlo en cualquier momento que desees:
ffmpeg -i grab.avi grab.mkv
Por supuesto, puedes cambiar la compresión, seleccionar el códec, etc.
Respuesta2
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 x264 sin pérdidas
- -preset ultrafast: uso de CPU más pequeño, tamaño grande
- -pix_fmt yuv444p: el valor predeterminado, pero ffmpeg sugiere yuv420p, que genera pérdidas
Sugerencia: capture 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()
Respuesta3
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 puedan obstaculizar la transmisión de video.
Utilice 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 puedan registrar esto, y creo que teamviewer puede grabar una sesión por sí mismo. Es fácil de probar y luego podrás 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 el monitor de su computadora portátil/escritorio necesita una resolución más alta que la de la otra máquina. La calidad es buena. Quizás el visor VNC que utilices pueda grabar. Ahora estoy en Ubuntu y el visor estándar no puede hacer esto.
Grabación de pantalla para mostrarla a una audiencia o en la web: existen herramientas especiales para esto que pueden capturar clics, seguir y hacer zoom con el mouse, y tienen otras opciones para dejar más claro lo que estás haciendo. Te sugiero que les eches un vistazo también. Google para "software de grabación de pantalla".
Respuesta4
Estoy usando Camtasia para grabar mi video de juego y video en línea. También usé una grabadora de video fraps antes, pero los fps caen durante la reproducción. Camtasia ofrece fps más altos, pero el único problema es que cada vez debo convertir la salida .CAMREC a avi, como se puede ver eningrese 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 reproductores de terceros como Windows Media Player y vlc.