web-dev-qa-db-fra.com

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

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

Contexte : J'ai essayé d'utiliser AVCONV avec -f x11grab et certains programmes d'interface graphique. Cependant, peu importe ce que j'essaye, la vidéo résultante a des artefacts/floues ou est agitée (cadres manquants). Cela est probablement dû aux contraintes de la CPU/de la mémoire.

Objectifs :

  • La qualité vidéo ne doit pas être sensiblement différente de voir la session directement sur un écran, car le but est de démontrer une application animée.
  • La vidéo finale doit être dans un format commun qui peut être envoyé aux utilisateurs Windows et utilisé sur le Web. Je pense que H.264 MP4 devrait fonctionner.
  • La solution ne doit pas présumer de nombreuses connaissances antérieures. Je connais avec la ligne de commande et les commandes de base Linux, mais je suis toujours en train d'apprendre Linux et je ne sais pas grand chose sur les 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 convertir en MP4 avec ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • La qualité d'image est excellente, mais sur mon test de test, il est à la traîne de l'ordinateur. Sur un système cible plus rapide, il n'est pas décalé, mais les cadres sont évidemment ignorés, ce qui rend la vidéo non très lisse.
    • J'essaie toujours de comprendre comment enregistrer le fichier grab.avi à SHM pour voir si cela aide.
  • Utilisation des enregistreurs d'interface graphique d'Istanbul et RecordMydesktop
  • Commande simple: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg Utilisation de la version AVCONV 0.8.3-4: 0.8.3-0ubuntu0.12.04.1
  • Ajouter -codec:copy (échoue avec: Requested output format 'x11grab' is not a suitable output format)
  • Ajouter -same_quant (entraîne une grande qualité, mais est très agité/manquant de nombreux cadres)
  • Ajouter -vpre lossless_ultrafast (échoue avec: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Ajouter diverses valeurs de -qscale
  • Ajouter diverses valeurs de -b
  • Ajouter -vcodec h264 (sorties à plusieurs reprises: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Remarque: H264 est répertorié dans avconv -formats Sortie comme DE h264 raw H.264 video format
28
Oleg

J'ai eu le 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: x264 mode sans perte
  • -Preset UltraFast: Usage de la CPU la plus petite, grande taille
  • -pix_fmt yuv444p: par défaut, mais FFMPEG suggère YUV420P, qui est la perte

Astuce: Écran de capture 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.fmpeg.org/wiki/capture/desktop

[edit 20180418] Mise à jour de 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()
7
hdante

Ceci est une solution de contournement et probablement pas "presque parfait" car il peut dépendre de la vitesse du réseau ou d'autres facteurs pouvant entraver le flux vidéo.

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

TeamViewer a tendance à mettre à l'échelle, mais je ne sais pas si cela se produit aussi avec des sessions enregistrées.

VNC ne compresse ni échelle, et votre moniteur d'ordinateur portable/ordinateur de bureau nécessite 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 le spectateur standard ne peut pas faire cela.

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

1
SPRBRN

Avez-vous essayé rfbroxy ?

Je l'utilise pour enregistrer x11 sessions-sessions.

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

1
Nils

J'utilise Camtasia pour enregistrer ma vidéo de jeu et ma vidéo en ligne. J'ai également utilisé Fraps Video Recorder avant que le FPS tombe 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 Entrez la description du lien iciEntrez la description du lien ici . Le .camrec est le format propriétaire de Camtasia et ne peut être joué sur des acteurs tiers tels que Windows Media Player et VLC.

0
Belzonsci Belzonsci