Jemand schlug vor, eine Kopie der unveränderten X-Anzeige in eine Datei zu leiten und diese Datei anschließend in eine allgemeine Videodatei zu konvertieren. Mit welchen Befehlen würde ich dies auf einem Kubuntu-System tun? (Bearbeiten: Er sagte etwas über das Anhängen eines Anzeigeports an eine Datei.) Wenn nicht möglich, was ist meine beste Option für eine Bildschirmaufnahme von ausgezeichneter 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 ist wahrscheinlich auf CPU- / Speicherbeschränkungen zurückzuführen.
Ziele:
- Die Videoqualität darf sich nicht wesentlich von der Anzeige der Sitzung direkt auf einem Bildschirm unterscheiden, da der Zweck darin besteht, eine Animation zu demonstrieren Anwendung.
- 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 Video-Codecs.
Was ich bereits versucht habe:
- Bisher bester Befehl:
ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi
, dann mitffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4
in mp4 konvertieren.- Die Bildqualität ist großartig, aber bei meinem Testsystem bleibt sie hinter dem Computer zurück. Auf einem schnelleren Zielsystem verzögert es nicht, aber Frames werden offensichtlich übersprungen, wodurch das Video nicht sehr glatt wird.
- Ich versuche immer noch herauszufinden, wie der Grab gespeichert werden kann. AVI-Datei an SHM, um zu prüfen, ob dies hilfreich ist.
avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg
Verwenden von avconv Version 0.8.3-4: 0.8.3-0ubuntu0.12.04.1 -codec:copy
(schlägt fehl mit: Requested output format "x11grab" is not a suitable output format
) -same_quant
(führt zu hervorragender Qualität, ist aber sehr abgehackt / es fehlen viele Frames) -vpre lossless_ultrafast
(schlägt fehl mit: Unrecognized option "vpre"
, Failed to set value "lossless_ultrafast" for option "vpre"
) -qscale
-b
-vcodec h264
(gibt wiederholt aus: Error while decoding stream #0:0
, [h264 @ 0x8300980] no frame!
)
- Hinweis: h264 wird aufgelistet in Ausgabe als
DE h264 raw H.264 video format
Antwort
Wenn Ihre Festplatte dies zulässt, können Sie dies 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 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 auf.
Kommentare
- Siehe auch: unix.stackexchange.com/a/120001/26227
- ubuntu 18.04 funktioniert nicht ‚ funktioniert nicht :: 0.0: Ungültiges Argument
- @ user1325696, funktioniert ziemlich gut. Z.B.
ffmpeg -f x11grab -s 2560x1080 -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi
Antwort
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
- -preset ultraschnell: kleinste CPU-Auslastung, große
- -pix_fmt yuv444p: die Standardeinstellung, aber ffmpeg schlägt yuv420p vor, was verlustbehaftet ist
Hinweis: 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
[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()
Kommentare
- wie kann Ich bestimme meine Bildschirmgröße?
Antwort
Dies ist eine Problemumgehung und wahrscheinlich nicht „nahezu perfekt“ Dies kann von der Netzwerkgeschwindigkeit oder anderen Faktoren abhängen, die den Videostream behindern können.
Verwenden Sie VNC oder Teamviewer und stellen Sie eine Verbindung von Ihrem Laptop oder Desktop zum anderen Computer her. Wenn Sie einen Windows- oder OSX-Laptop zur Verfügung haben, yo Sie haben wahrscheinlich 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 skaliert tendenziell, 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 die 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 dies nicht.
Bildschirmaufzeichnung zur Anzeige für ein Publikum oder im Internet – hierfür gibt es spezielle Tools, mit denen Sie Klicks abfangen, verfolgen und vergrößern können die Maus und haben andere Optionen, um klarer zu machen, was Sie tun.Ich schlage vor, Sie sehen sich auch diese an. Google für „Bildschirmaufzeichnungssoftware“.
Antwort
Haben Sie ausprobiert? rfbroxy ?
Ich verwende es zum Aufzeichnen von X11-Bildschirmsitzungen.
Sie können es in einem Modus verwenden, in dem nur ein Bild aufgezeichnet wird, wenn eine ÄNDERUNG vorliegt
−-type=WHAT
WHAT = Bildschirm ist laut Manpage sogar die Standardeinstellung.
Kommentare
- Das ‚ ist interessant. Wie machst du das?
- @GunarGessner sollte das Standardverhalten sein. Eine alternative Methode besteht darin, auf Maus- / Keyborad-Ereignisse zu reagieren. Dies kann sogar noch besser sein, wenn Sie eine Uhr auf dem Bildschirm haben und kein Bild machen möchten, wenn sich nur diese Uhr ändert …
Antwort
Ich verwende Camtasia, um mein Gameplay-Video und mein Online-Video aufzunehmen. Ich habe vorher auch einen fraps-Videorecorder verwendet, aber die fps fallen während des Spielens ab. Camtasia liefert höhere fps, aber das einzige Problem ist, dass ich jedes Mal, wenn ich die Ausgabe .CAMREC in avi konvertieren muss, wie Sie in sehen können, hier die Linkbeschreibung eingeben Geben Sie hier die Linkbeschreibung ein . Die .camrec ist das proprietäre Format von camtasia und kann nicht auf Playern von Drittanbietern wie Windows Media Player und vlc abgespielt werden.