Comment obtenir une qualité d'enregistrement d'écran presque parfaite?

27

Quelqu'un m'a suggéré de diriger une copie de l'affichage X non modifié vers un fichier et de le convertir ensuite en fichier vidéo à usage général. Quelles commandes devrais-je utiliser pour le faire sur un système Kubuntu? (Edit: Il a dit quelque chose sur la connexion d'un port d'affichage à un fichier.) Si ce n'est pas possible, quelle est ma meilleure option pour un enregistrement d'écran d'excellente qualité qui ne dépend pas d'un matériel rapide?

Contexte: J'ai essayé d'utiliser avconv avec -f x11grab et certains programmes GUI. Cependant, peu importe ce que j'essaie, la vidéo résultante présente des artefacts / flou ou est saccadée (images manquantes). Cela est probablement dû à des contraintes CPU / mémoire.

Buts:

  • La qualité vidéo ne doit pas être sensiblement différente de la visualisation de la session directement sur un écran, car le but est de montrer une application animée.
  • La vidéo finale doit être dans un format commun qui peut être envoyée aux utilisateurs Windows et utilisée sur le Web. Je pense que H.264 MP4 devrait fonctionner.
  • La solution ne devrait pas supposer beaucoup de connaissances préalables. Je connais la ligne de commande et les commandes Linux de base, mais j'apprends toujours Linux et je ne connais pas grand-chose aux codecs vidéo.

Ce que j'ai déjà essayé:

  • Meilleure commande jusqu'à présent ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi:, puis convertissez en mp4 avec ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • La qualité d'image est excellente, mais sur mon système de test, il est en retard sur l'ordinateur. Sur un système cible plus rapide, cela ne traîne pas, mais les images sont évidemment ignorées, ce qui rend la vidéo peu fluide .
    • J'essaie toujours de comprendre comment enregistrer le fichier grab.avi dans SHM pour voir si cela aide.
  • Utilisation des enregistreurs GUI d'Istanbul et RecordMyDesktop
  • Commande simple: en avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgutilisant avconv version 0.8.3-4: 0.8.3-0ubuntu0.12.04.1
  • Ajout -codec:copy(échoue avec: Requested output format 'x11grab' is not a suitable output format)
  • Ajout -same_quant(résultats de grande qualité, mais est très saccadé / manque de nombreuses images)
  • Ajout -vpre lossless_ultrafast(échoue avec: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Ajout de diverses valeurs de -qscale
  • Ajout de diverses valeurs de -b
  • Ajout -vcodec h264(sorties à plusieurs reprises: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Remarque: h264 est répertorié en avconv -formatssortie commeDE h264 raw H.264 video format
Oleg
la source

Réponses:

24

Si votre disque dur le permet, vous pouvez essayer de le faire de cette façon:

Écrivez d'abord le fichier non compressé:

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

voici SZvotre taille d'affichage (par exemple 1920x1080).

Après cela, vous pouvez le compresser à tout moment:

ffmpeg -i grab.avi grab.mkv

Bien sûr, vous pouvez modifier la compression, sélectionner le codec, etc.

Eddy_Em
la source
1
Voir aussi: unix.stackexchange.com/a/120001/26227
Dave Jarvis
6

J'ai eu du succès avec:

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

Points clés:

  • -qp 0: mode sans perte x264
  • ultra-rapide prédéfini: plus petite utilisation du processeur, grande taille
  • -pix_fmt yuv444p: la valeur par défaut, mais ffmpeg suggère yuv420p, qui est avec perte

Astuce: capture d'écran et superposition de webcam avec:

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

[edit 20180418] Mise à jour pour Gnome Shell et 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
la source
1

Avez-vous essayé rfbroxy ?

Je l'utilise pour enregistrer des sessions d'écran X11.

Vous pouvez l'utiliser dans un mode où il enregistre uniquement une image, s'il y a un CHANGEMENT.

Nils
la source
1

Il s'agit d'une solution de contournement, et probablement pas "presque parfaite" car elle peut dépendre de la vitesse du réseau ou d'autres facteurs qui peuvent entraver le flux vidéo.

Utilisez VNC ou Teamviewer et connectez-vous de votre ordinateur portable ou de bureau à l'autre machine. Si vous avez un ordinateur portable Windows ou OSX disponible, vous avez probablement des outils qui peuvent enregistrer cela, et je crois que TeamViewer peut enregistrer une session lui-même. C'est facile à essayer, et vous pouvez alors décider si la qualité est assez bonne.

Teamviewer a tendance à évoluer, mais je ne sais pas si cela se produit également avec les sessions enregistrées.

Le VNC ne se comprime pas et ne s'adapte pas, et votre moniteur d'ordinateur portable / de bureau a besoin d'une résolution supérieure à celle de l'autre machine. La qualité est bonne. Peut-être que la visionneuse VNC que vous utilisez peut enregistrer. Je suis sur Ubuntu maintenant, et la visionneuse standard ne peut pas le faire.

Enregistrement d'écran pour affichage à un public ou sur le Web - il existe des outils spéciaux pour cela qui peuvent capturer des clics, suivre et zoomer sur la souris, et avoir d'autres options pour rendre plus clair ce que vous faites. Je vous suggère de les consulter également. Google pour "logiciel d'enregistrement d'écran".

SPRBRN
la source
0

J'utilise Camtasia pour enregistrer ma vidéo de gameplay et ma vidéo en ligne. J'ai également utilisé l'enregistreur vidéo fraps avant, mais les fps chutent pendant la lecture. Camtasia donne un fps plus élevé mais le seul problème gênant est que chaque fois que je dois convertir la sortie .CAMREC en avi comme vous pouvez le voir dans entrer la description du lien ici entrer la description du lien ici . Le .camrec est le format propriétaire de camtasia et ne peut pas être lu sur des lecteurs tiers comme Windows Media Player et vlc.

Belzonsci Belzonsci
la source