Jemand hat mir vorgeschlagen, eine Kopie der unveränderten X-Anzeige in eine Datei zu übertragen und diese Datei anschließend in eine allgemeine Videodatei umzuwandeln. Welche Befehle würde ich dafür auf einem Kubuntu-System verwenden? (Bearbeiten: Er sagte etwas über das Anhängen eines Anzeigeports an eine Datei.) Wenn das nicht möglich ist, was ist meine beste Option für eine Bildschirmaufnahme in hervorragender Qualität, die nicht von schneller Hardware abhängt?
Hintergrund:Ich habe versucht, avconv mit -f x11grab und einigen GUI-Programmen zu verwenden. Doch egal, was ich versuche, das resultierende Video weist entweder Artefakte/Unschärfe auf oder ist abgehackt (es fehlen Frames). Dies liegt wahrscheinlich an CPU-/Speicherbeschränkungen.
Ziele:
- Die Videoqualität darf sich nicht merklich von der Qualität unterscheiden, die beim direkten Betrachten der Sitzung auf dem Bildschirm entsteht, da es sich um die Demonstration einer animierten Anwendung handelt.
- Das fertige Video muss in einem gängigen Format vorliegen, das an Windows-Benutzer gesendet und im Web verwendet werden kann. Ich denke, H.264 MP4 sollte funktionieren.
- Die Lösung sollte keine großen Vorkenntnisse voraussetzen. Ich bin mit der Befehlszeile und den grundlegenden Linux-Befehlen vertraut, aber ich lerne Linux noch und weiß nicht viel über Video-Codecs.
Was ich bereits versucht habe:
- Bester Befehl bisher:
ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi
, dann mit in mp4 konvertierenffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4
.- Die Bildqualität ist großartig, aber auf meinem Testsystem hinkt der Computer hinterher. Auf einem schnelleren Zielsystem gibt es keine Verzögerungen, aber es werden offensichtlich Frames übersprungen, wodurch das Video nicht sehrglatt.
- Ich versuche immer noch herauszufinden, wie ich die Datei grab.avi in SHM speichern kann, um zu sehen, ob das hilft.
- Verwenden der GUI-Recorder Istanbul und RecordMyDesktop
- Einfacher Befehl:
avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg
using avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1 - Hinzufügen
-codec:copy
(schlägt fehl mitRequested output format 'x11grab' is not a suitable output format
:) - Hinzufügen
-same_quant
(ergibt eine hervorragende Qualität, ist aber sehr abgehackt/es fehlen viele Frames) - Hinzufügen
-vpre lossless_ultrafast
(schlägt fehl mit:Unrecognized option 'vpre'
,Failed to set value 'lossless_ultrafast' for option 'vpre'
) - Das Hinzufügen verschiedener Werte von
-qscale
- Das Hinzufügen verschiedener Werte von
-b
- Addition
-vcodec h264
(gibt wiederholt aus:Error while decoding stream #0:0
,[h264 @ 0x8300980] no frame!
)- Hinweis: h264 wird in der
avconv -formats
Ausgabe wie folgt aufgeführt:DE h264 raw H.264 video format
- Hinweis: h264 wird in der
Antwort1
Wenn Ihre Festplatte es zulässt, können Sie es folgendermaßen versuchen:
Schreiben Sie zuerst eine unkomprimierte Datei:
ffmpeg -f x11grab -s SZ -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi
hier SZ
ist Ihre Anzeigegröße (z. B. 1920 x 1080).
Danach können Sie es jederzeit komprimieren:
ffmpeg -i grab.avi grab.mkv
Natürlich können Sie die Komprimierung ändern, Codec auswählen und so weiter.
Antwort2
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
- -Voreinstellung „Ultraschnell“: geringste CPU-Auslastung, große Größe
- -pix_fmt yuv444p: die Standardeinstellung, aber ffmpeg schlägt yuv420p vor, das verlustbehaftet ist
Tipp: Bildschirm und Webcam-Overlay erfassen 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
[Bearbeiten 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()
Antwort3
Dies ist eine Problemumgehung und wahrscheinlich nicht „nahezu perfekt“, da es von der Netzwerkgeschwindigkeit oder anderen Faktoren abhängen kann, die den Videostream behindern könnten.
Verwenden Sie VNC oder Teamviewer und stellen Sie von Ihrem Laptop oder Desktop aus eine Verbindung zum anderen Computer her. 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, es auszuprobieren, und Sie können dann entscheiden, ob die Qualität gut genug ist.
Teamviewer neigt zur Skalierung, aber ich weiß nicht, ob dies auch bei aufgezeichneten Sitzungen passiert.
VNC komprimiert oder skaliert nicht, und Ihr Laptop-/Desktop-Monitor benötigt eine höhere Auflösung als der des anderen Rechners. Die Qualität ist gut. Vielleicht kann der von Ihnen verwendete VNC-Viewer aufnehmen. Ich verwende jetzt Ubuntu, und der Standard-Viewer kann das nicht.
Bildschirmaufzeichnung zur Anzeige vor Publikum oder im Internet – hierfür gibt es spezielle Tools, die Klicks erfassen, die Maus verfolgen und vergrößern können und über weitere Optionen verfügen, um deutlicher zu machen, was Sie tun. Ich schlage vor, dass Sie sich diese auch ansehen. Suchen Sie bei Google nach „Bildschirmaufzeichnungssoftware“.
Antwort4
Ich verwende Camtasia, um mein Gameplay-Video und Online-Video aufzunehmen. Ich habe vorher auch Fraps Video Recorder verwendet, aber die fps sinken während des Spielens. Camtasia bietet höhere fps, aber das einzige Problem ist, dass ich jedes Mal die Ausgabe .CAMREC in AVI konvertieren muss, wie Sie in sehen könnenLinkbeschreibung hier eingebenLinkbeschreibung hier eingeben.camrec ist das proprietäre Format von Camtasia und kann nicht auf Playern von Drittanbietern wie Windows Media Player und VLC abgespielt werden.