Come ottenere una qualità di registrazione dello schermo quasi perfetta?


27

Qualcuno mi ha suggerito di indirizzare una copia del display X non modificato in un file e successivamente di convertirlo in un file video per scopi generici. Quali comandi dovrei usare per fare questo su un sistema Kubuntu? (Modifica: ha detto qualcosa sul collegamento di una porta di visualizzazione a un file.) Se non è possibile, qual è la mia migliore opzione per una registrazione dello schermo di qualità eccellente che non dipende dall'hardware veloce?

Background: ho provato ad usare avconv con -f x11grab e alcuni programmi con interfaccia grafica. Tuttavia, indipendentemente da ciò che provo, il video risultante presenta artefatti / sfocatura o è instabile (frame mancanti). Ciò è probabilmente dovuto a vincoli CPU / memoria.

obiettivi:

  • La qualità del video non deve essere notevolmente diversa dal vedere la sessione direttamente su uno schermo, perché lo scopo è dimostrare un'applicazione animata.
  • Il video finale deve essere in un formato comune che può essere inviato agli utenti Windows e utilizzato sul Web. Penso che H.264 MP4 dovrebbe funzionare.
  • La soluzione non dovrebbe presumere molte conoscenze preliminari. Conosco la riga di comando e i comandi di base di Linux, ma sto ancora imparando Linux e non so molto sui codec video.

Cosa ho già provato:

  • Il miglior comando finora ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi:, quindi converti in mp4 con ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • La qualità delle immagini è ottima, ma nel mio sistema di test è in ritardo rispetto al computer. Su un sistema di destinazione più veloce non è in ritardo, ma i frame vengono ovviamente saltati, rendendo il video non molto fluido .
    • Sto ancora cercando di capire come salvare il file grab.avi su SHM per vedere se questo aiuta.
  • Utilizzo dei registratori GUI di Istanbul e RecordMyDesktop
  • Comando semplice: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgutilizzando avconv versione 0.8.3-4: 0.8.3-0ubuntu0.12.04.1
  • Aggiunta -codec:copy(esito negativo con: Requested output format 'x11grab' is not a suitable output format)
  • Aggiunta -same_quant(risulta di grande qualità, ma è molto instabile / manca molti frame)
  • Aggiunta -vpre lossless_ultrafast(non riesce con: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Aggiunta di vari valori di -qscale
  • Aggiunta di vari valori di -b
  • Aggiunta -vcodec h264(uscite ripetutamente: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Nota: h264 è elencato in avconv -formatsoutput comeDE h264 raw H.264 video format

Risposte:


24

Se il tuo HDD lo consente, puoi provare a farlo in questo modo:

Prima scrivi un file non compresso:

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

ecco SZle dimensioni del display (ad es. 1920x1080).

Dopodiché puoi comprimerlo in qualsiasi momento desideri:

ffmpeg -i grab.avi grab.mkv

Naturalmente, puoi modificare la compressione, selezionare il codec e così via.



6

Ho avuto successo con:

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

Punti chiave:

  • -qp 0: modalità senza perdita x264
  • -preset ultraveloce: minimo utilizzo della cpu, grandi dimensioni
  • -pix_fmt yuv444p: l'impostazione predefinita, ma ffmpeg suggerisce yuv420p, che è con perdita di dati

Suggerimento: cattura lo schermo e la sovrapposizione della webcam 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

[modifica 20180418] Aggiornamento per Gnome Shell and 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()

1

Hai provato rfbroxy ?

Lo uso per registrare sessioni di schermate X11.

Puoi usarlo in una modalità in cui registra solo un'immagine, se c'è un CAMBIAMENTO.


1

Questa è una soluzione alternativa e probabilmente non "quasi perfetta" in quanto potrebbe dipendere dalla velocità della rete o da altri fattori che potrebbero ostacolare il flusso video.

Usa VNC o Teamviewer e connettiti dal tuo laptop o desktop all'altro computer. Se hai a disposizione un laptop Windows o OSX, probabilmente hai strumenti in grado di registrarlo e credo che teamviewer possa registrare una sessione da solo. È facile da provare e puoi quindi decidere se la qualità è abbastanza buona.

Teamviewer tende a ridimensionarsi, ma non so se questo accada anche con sessioni registrate.

VNC non viene compresso o ridimensionato e il monitor del tuo laptop / desktop necessita di una risoluzione superiore a quella dell'altra macchina. La qualità è buona Forse il visualizzatore VNC che usi può registrare. Ora sono su Ubuntu e il visualizzatore standard non può farlo.

Registrazione dello schermo per la visualizzazione a un pubblico o sul Web: esistono strumenti speciali per catturare i clic, seguire e ingrandire il mouse e avere altre opzioni per rendere più chiaro ciò che stai facendo. Ti suggerisco di dare un'occhiata anche a quelli. Google per "software di registrazione dello schermo".


0

Sto usando Camtasia per registrare il mio video di gioco e video online. Ho anche usato il videoregistratore Fraps prima, ma gli fps diminuiscono durante la riproduzione. Camtasia dà un fps più alto, ma l'unico problema è che ogni volta che devo convertire l'output .CAMREC in avi, come puoi vedere in inserisci la descrizione del link qui inserisci la descrizione del link qui . .Camrec è il formato proprietario di camtasia e non può essere riprodotto su lettori di terze parti come Windows Media Player e vlc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.