Wie erhält man eine nahezu perfekte Bildschirmaufnahmequalität?

27

Jemand schlug vor, dass ich eine Kopie der unveränderten X-Anzeige in eine Datei umwandle und diese Datei anschließend in eine allgemeine Videodatei umwandle. Welche Befehle würde ich verwenden, um dies auf einem Kubuntu-System zu tun? (Bearbeiten: Er sagte etwas über das Anhängen eines Anzeigeports an eine Datei.) Wenn dies nicht möglich ist, was ist meine beste Option für eine Bildschirmaufnahme in exzellenter Qualität, die nicht von schneller Hardware abhängt?

Hintergrund: Ich habe versucht, avconv mit -f x11grab und einigen GUI-Programmen zu verwenden. Egal was ich versuche, das resultierende Video weist entweder Artefakte / Unschärfe auf oder ist abgehackt (fehlende Frames). Dies liegt wahrscheinlich an CPU- / Speicherbeschränkungen.

Tore:

  • Die Videoqualität darf sich nicht wesentlich von der Anzeige der Sitzung direkt auf einem Bildschirm unterscheiden, da eine animierte Anwendung demonstriert werden soll.
  • Das endgültige Video muss in einem gemeinsamen Format vorliegen, das an Windows-Benutzer gesendet und im Web verwendet werden kann. Ich denke H.264 MP4 sollte funktionieren.
  • Die Lösung sollte nicht viel Vorwissen voraussetzen. Ich bin mit der Befehlszeile und den grundlegenden Linux-Befehlen vertraut, lerne aber noch Linux und weiß nicht viel über Videocodecs.

Was ich schon ausprobiert habe:

  • Bester befehl bisher: ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avidann konvertiere mit mp4 ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • Die Bildqualität ist großartig, aber bei meinem Testsystem läuft sie dem Computer hinterher. Auf einem schnelleren Zielsystem verzögert es nicht, aber Frames werden offensichtlich übersprungen, wodurch das Video nicht sehr flüssig wird .
    • Ich versuche immer noch herauszufinden, wie die grab.avi-Datei in SHM gespeichert werden kann, um festzustellen, ob dies hilfreich ist.
  • Verwenden von Istanbul- und RecordMyDesktop-GUI-Rekordern
  • Einfacher Befehl: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgVerwenden von avconv Version 0.8.3-4: 0.8.3-0ubuntu0.12.04.1
  • Hinzufügen -codec:copy(nicht mit: Requested output format 'x11grab' is not a suitable output format)
  • Hinzufügen -same_quant(führt zu guter Qualität, ist aber sehr ruckelig / es fehlen viele Frames)
  • Hinzufügen -vpre lossless_ultrafast(nicht mit: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Hinzufügen verschiedener Werte von -qscale
  • Hinzufügen verschiedener Werte von -b
  • Hinzufügen -vcodec h264(Ausgänge wiederholt: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Hinweis: h264 wird in der avconv -formatsAusgabe als aufgelistetDE h264 raw H.264 video format
Oleg
quelle

Antworten:

24

Wenn Ihre Festplatte dies zulässt, können Sie dies folgendermaßen versuchen:

Schreiben Sie zuerst eine nicht komprimierte Datei:

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

Hier SZist Ihre Anzeigegröße (zB 1920x1080).

Danach können Sie es jederzeit komprimieren:

ffmpeg -i grab.avi grab.mkv

Natürlich können Sie die Komprimierung ändern, den Codec auswählen und so weiter.

Eddy_Em
quelle
1
Siehe auch: unix.stackexchange.com/a/120001/26227
Dave Jarvis
6

Ich hatte Erfolg mit:

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

Wichtige Punkte:

  • -qp 0: verlustfreier x264-Modus
  • -voreingestellter ultraschneller Betrieb: kleinste CPU-Auslastung, große Größe
  • -pix_fmt yuv444p: die Standardeinstellung, aber ffmpeg schlägt yuv420p vor, was verlustbehaftet ist

Tipp: Bildschirm und Webcam überlagern mit:

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] Update für Gnome Shell und 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
quelle
1

Hast du rfbroxy ausprobiert ?

Ich benutze es, um X11-Screen-Sessions aufzunehmen.

Sie können es in einem Modus verwenden, in dem nur bei einer ÄNDERUNG ein Bild aufgezeichnet wird.

Nils
quelle
1

Dies ist eine Problemumgehung und wahrscheinlich nicht "nahezu perfekt", da dies von der Netzwerkgeschwindigkeit oder anderen Faktoren abhängen kann, die den Videostream möglicherweise behindern.

Verwenden Sie VNC oder Teamviewer und verbinden Sie sich von Ihrem Laptop oder Desktop mit dem anderen Computer. Wenn Sie einen Windows- oder OSX-Laptop zur Verfügung haben, verfügen Sie wahrscheinlich über Tools, die dies aufzeichnen können, und ich glaube, Teamviewer kann eine Sitzung selbst aufzeichnen. Es ist einfach zu versuchen, und Sie können dann entscheiden, ob die Qualität gut genug ist.

Teamviewer ist tendenziell skalierbar, aber ich weiß nicht, ob dies auch bei aufgezeichneten Sitzungen der Fall ist.

VNC komprimiert oder skaliert nicht und Ihr Laptop / Desktop-Monitor benötigt eine höhere Auflösung als der des anderen Computers. Die qualität ist gut Möglicherweise kann der von Ihnen verwendete VNC-Viewer aufnehmen. Ich bin jetzt auf Ubuntu und der Standard-Viewer kann das nicht.

Bildschirmaufzeichnung für die Anzeige vor Publikum oder im Internet - es gibt spezielle Tools, mit denen Sie Klicks abfangen, der Maus folgen und sie vergrößern können und andere Optionen haben, um klarer zu machen, was Sie tun. Ich schlage vor, Sie werfen einen Blick auf diese auch. Google für "Screen Recording Software".

SPRBRN
quelle
0

Ich verwende Camtasia, um mein Gameplay-Video und mein Online-Video aufzunehmen. Ich habe vorher auch Fraps-Videorecorder benutzt, aber die FPS fallen während des Abspielens. Camtasia bietet eine höhere Geschwindigkeit, aber das einzige Problem ist, dass ich jedes Mal, wenn ich die Ausgabe von .CAMREC in avi konvertieren muss, wie in "Link-Beschreibung hier eingeben" zu sehen ist . Die .camrec-Datei ist das proprietäre Format von camtasia und kann nicht auf Playern von Drittanbietern wie Windows Media Player und vlc abgespielt werden.

Belzonsci Belzonsci
quelle