Qualcuno mi ha suggerito di indirizzare una copia del display X non modificato in un file e successivamente di convertire quel file in un file video generico. Quali comandi dovrei usare per farlo su un sistema Kubuntu? (Modifica: ha detto qualcosa riguardo al collegamento di una porta display a un file.) Se non è possibile, qual è la mia migliore opzione per una registrazione dello schermo di qualità eccellente che non dipenda dallhardware veloce?
Background: ho provato a usare avconv con -f x11grab e alcuni programmi GUI. Tuttavia, indipendentemente da ciò che provo, il video risultante presenta artefatti / sfocatura o è discontinuo (fotogrammi mancanti). Ciò è probabilmente dovuto a vincoli di 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.
- 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 presupporre una conoscenza preliminare. Conosco la riga di comando e i comandi di base di Linux, ma sto ancora imparando Linux e non so molto sui codec video.
Quello che 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 conffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4
.- La qualità delle immagini è ottima, ma nel mio sistema di prova è in ritardo rispetto al computer. Su un sistema di destinazione più veloce non è in ritardo, ma i fotogrammi vengono ovviamente saltati, rendendo il video non molto fluido .
- Sto ancora cercando di capire come salvare il grab. avi in SHM per vedere se questo aiuta.
- Utilizzo dei registratori GUI Istanbul e RecordMyDesktop
- Comando semplice:
avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg
utilizzando avconv versione 0.8.3-4: 0.8.3-0ubuntu0.12.04.1 - Laggiunta di
-codec:copy
(non riesce con:Requested output format "x11grab" is not a suitable output format
) - Aggiunta di
-same_quant
(si ottiene unottima qualità, ma è molto instabile / mancano molti fotogrammi) - Aggiunta di
-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 di
-vcodec h264
(restituisce ripetutamente:Error while decoding stream #0:0
,[h264 @ 0x8300980] no frame!
)- Nota: h264 è elencato in output come
DE h264 raw H.264 video format
- Nota: h264 è elencato in output come
Risposta
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
qui SZ
è la dimensione del display (ad es. 1920×1080).
Dopodiché puoi comprimerlo in qualsiasi momento tu voglia:
ffmpeg -i grab.avi grab.mkv
Ovviamente puoi cambiare la compressione, selezionare il codec e così via su.
Commenti
Risposta
“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à lossless x264
- -preset ultrafast: utilizzo della CPU più piccolo, dimensioni grandi
- -pix_fmt yuv444p: il valore predefinito, ma ffmpeg suggerisce yuv420p, che è lossy
Suggerimento: cattura schermo e webcam overlay 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 e 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()
Commenti
- come posso determino la dimensione dello schermo?
Risposta
Questa è una soluzione alternativa e probabilmente non “quasi perfetta” come può dipendere dalla velocità di rete o da altri fattori che possono ostacolare il flusso video.
Usa VNC o Teamviewer e connettiti dal tuo laptop o desktop allaltra macchina. Se hai un laptop Windows o OSX disponibile, yo Probabilmente hai strumenti in grado di registrare questo e credo che teamviewer possa registrare una sessione stessa. È facile da provare e puoi decidere se la qualità è abbastanza buona.
Teamviewer tende a ridimensionarsi, ma non so se ciò accada anche con le sessioni registrate.
VNC non si comprime né si ridimensiona e il monitor del tuo laptop / desktop necessita di una risoluzione maggiore di quella dellaltra macchina. La qualità è buona. Forse il visualizzatore VNC che usi può registrare. Sono su Ubuntu ora e il visualizzatore standard non può farlo.
Registrazione dello schermo per la visualizzazione a un pubblico o sul Web: ci sono strumenti speciali per questo che possono catturare i clic, seguire e ingrandire il mouse e avere altre opzioni per rendere più chiaro ciò che stai facendo.Ti consiglio di dare unocchiata anche a quelli. Google per “software di registrazione dello schermo”.
Risposta
Hai provato rfbroxy ?
Lo uso per registrare sessioni di schermate X11.
Puoi usarlo in una modalità in cui registra solo unimmagine, se cè un CAMBIAMENTO .
−-type=WHAT
WHAT = schermo è persino predefinito, secondo la pagina man.
Commenti
- That ‘ è interessante. Come si fa?
- @GunarGessner dovrebbe essere il comportamento predefinito. Un metodo alternativo consiste nel reagire agli eventi mouse / keyborad. Questo può essere anche meglio se hai un orologio sullo schermo e non vuoi fare una foto quando cambia solo quellorologio …
Rispondi
Sto usando Camtasia per registrare il mio video di gioco e il video online. Ho anche usato il videoregistratore fraps prima, ma gli fps diminuiscono durante la riproduzione. Camtasia fornisce un fps più alto, ma lunico problema è che ogni volta che devo convertire loutput .CAMREC in avi, come puoi vedere in inserisci qui la descrizione del link inserisci qui la descrizione del link . .Camrec è il formato proprietario di camtasia e non può essere riprodotto su lettori di terze parti come Windows Media Player e vlc.
ffmpeg -f x11grab -s 2560x1080 -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi