Hilfe:Bildschirmaufnahmen vermittels Kommandozeile: Unterschied zwischen den Versionen

Aus Open Source Ecology - Germany
Zur Navigation springen Zur Suche springen
(Fragen: echte Fragen; Korrektur Verwechslung breit - hoch)
(Formgebung Text; noechosource => alsa_input.pci-0000_00_1b.0.analog-stereo)
Zeile 10: Zeile 10:
  
 
Zerst die Fenstergrößen aufzeigen:
 
Zerst die Fenstergrößen aufzeigen:
 
+
<syntaxhighlight lang="bash" style="font-size:smaller;">wmctrl -lG
<syntaxhighlight lang="bash">wmctrl -lG
 
 
#              links-oben    Breite  × Höhe                      Fenstertitel
 
#              links-oben    Breite  × Höhe                      Fenstertitel
 
#              (0+x  0+y)    (px-breit  px-hoch)
 
#              (0+x  0+y)    (px-breit  px-hoch)
Zeile 36: Zeile 35:
 
     +-------------------+  hoch
 
     +-------------------+  hoch
 
     ←---- 1366 Pixel  --→</pre>
 
     ←---- 1366 Pixel  --→</pre>
 +
 
== Gerätequellen herausfinden - Ton ==
 
== Gerätequellen herausfinden - Ton ==
  
<syntaxhighlight lang="bash">
+
<syntaxhighlight lang="bash" style="font-size:smaller;">
 
# https://trac.ffmpeg.org/wiki/Capture/PulseAudio
 
# https://trac.ffmpeg.org/wiki/Capture/PulseAudio
 
pactl list short sources | column -t # Tonquellen ausgeben
 
pactl list short sources | column -t # Tonquellen ausgeben
Zeile 51: Zeile 51:
 
Eine weitere Möglichkeit ist die Pulse-Audio-Kommandokontrolle <code>pacmd</code>:
 
Eine weitere Möglichkeit ist die Pulse-Audio-Kommandokontrolle <code>pacmd</code>:
  
<syntaxhighlight lang="bash">pacmd list-source-outputs | grep "source:" # Tonquellen über grep herausfinden
+
<syntaxhighlight lang="bash" style="font-size:smaller;">
 +
pacmd list-source-outputs | grep "source:" # Tonquellen über grep herausfinden
 
# Hinweis: input ist meist das eigentliche Mikrophon
 
# Hinweis: input ist meist das eigentliche Mikrophon
 
# Hinweis: output ist dann der dasige Hörkanal des Gerätes!
 
# Hinweis: output ist dann der dasige Hörkanal des Gerätes!
Zeile 66: Zeile 67:
 
Tonaufnahme von Computerprogrammen und Mikrophon, hier nach OGG:
 
Tonaufnahme von Computerprogrammen und Mikrophon, hier nach OGG:
  
<syntaxhighlight lang="bash">
+
<syntaxhighlight lang="bash" style="font-size:smaller;">
cd ~/Videos/Bildschirmaufnahmen/
+
# cd ~/Videos/Bildschirmaufnahmen/
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
ffmpeg -y \
 
ffmpeg -y \
Zeile 84: Zeile 85:
  
 
Tonaufnahme als MP3:
 
Tonaufnahme als MP3:
<syntaxhighlight lang="bash">
+
<syntaxhighlight lang="bash" style="font-size:smaller;">
cd ~/Videos/Bildschirmaufnahmen/
+
# cd ~/Videos/Bildschirmaufnahmen/
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
ffmpeg -y \
 
ffmpeg -y \
Zeile 102: Zeile 103:
 
Für kräftige Rechenknechte kann man die Datei gleich fertig zusammenfügen (bei 4GB RAM hat der Rechner oft Probleme, Schritt zu halten). FFmpeg bemißt die Aufnahmefläche immer von links oben aus (bei <code>ffmpeg … -i :0.0</code> sozusagen), im folgenden wird eine Aufnahmefläche von <code>1366x743</code> genommen, die umrandet dargestellt wird (merke aber: der gesamte Bildschirm ist in diesem Beispiel größer, mit 1366x<em>768</em>, so daß die Statusleiste/Panele ausgelassen wird)
 
Für kräftige Rechenknechte kann man die Datei gleich fertig zusammenfügen (bei 4GB RAM hat der Rechner oft Probleme, Schritt zu halten). FFmpeg bemißt die Aufnahmefläche immer von links oben aus (bei <code>ffmpeg … -i :0.0</code> sozusagen), im folgenden wird eine Aufnahmefläche von <code>1366x743</code> genommen, die umrandet dargestellt wird (merke aber: der gesamte Bildschirm ist in diesem Beispiel größer, mit 1366x<em>768</em>, so daß die Statusleiste/Panele ausgelassen wird)
  
<syntaxhighlight lang="bash">
+
<syntaxhighlight lang="bash" style="font-size:smaller;">
 
# rechenintensiv: Ton wird möglicherweise schlecht aufgenommen
 
# rechenintensiv: Ton wird möglicherweise schlecht aufgenommen
cd ~/Videos/Bildschirmaufnahmen/
+
# cd ~/Videos/Bildschirmaufnahmen/
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
ffmpeg -y -video_size 1366x743 -framerate 25 -f x11grab -i :0.0  \
 
ffmpeg -y -video_size 1366x743 -framerate 25 -f x11grab -i :0.0  \
Zeile 121: Zeile 122:
 
Für schwache Rechenknechte ist es besser, alle Dateien getrennt abzuspeichern, und später, im 2. Schritt, dann zusammenzufügen:
 
Für schwache Rechenknechte ist es besser, alle Dateien getrennt abzuspeichern, und später, im 2. Schritt, dann zusammenzufügen:
  
<syntaxhighlight lang="bash">
+
<syntaxhighlight lang="bash" style="font-size:smaller;">
 
# Aufnahme in 3 Dateien - verbessert thread_queue_size (?Puffer):  
 
# Aufnahme in 3 Dateien - verbessert thread_queue_size (?Puffer):  
cd ~/Videos/Bildschirmaufnahmen/
+
# cd ~/Videos/Bildschirmaufnahmen/
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
datumzeit=$(date '+%Y%m%d-%H%M')
 
ffmpeg -y -video_size 1366x743 -framerate 25 \
 
ffmpeg -y -video_size 1366x743 -framerate 25 \
Zeile 129: Zeile 130:
 
   -f x11grab -thread_queue_size 4096 -i :0.0  \
 
   -f x11grab -thread_queue_size 4096 -i :0.0  \
 
   -f pulse -thread_queue_size 4096 -ac 2 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
 
   -f pulse -thread_queue_size 4096 -ac 2 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
   -f pulse -thread_queue_size 4096 -ac 2 -i noechosource \
+
   -f pulse -thread_queue_size 4096 -ac 2 -i alsa_input.pci-0000_00_1b.0.analog-stereo \
 
   -map 0:v:0 TestBildschirmaufnahme_${datumzeit}-Bildschirm.mp4 \
 
   -map 0:v:0 TestBildschirmaufnahme_${datumzeit}-Bildschirm.mp4 \
 
   -map 1:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Computer.aac \
 
   -map 1:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Computer.aac \
Zeile 147: Zeile 148:
 
   -map 2:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Mikrophon.aac
 
   -map 2:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Mikrophon.aac
 
# WICHTIG Aufnahme beenden mit q WICHTIG
 
# WICHTIG Aufnahme beenden mit q WICHTIG
echo $datumzeit</syntaxhighlight>
+
echo $datumzeit
 +
</syntaxhighlight>
 +
 
 
== Zusammenfügen einzelner Aufnahmen ==
 
== Zusammenfügen einzelner Aufnahmen ==
  
<syntaxhighlight lang="bash"># Aufnahme der 3 Dateien zusammenfügen (mit Überschreibung der Zieldatei):  
+
<syntaxhighlight lang="bash" style="font-size:smaller;">
 +
# Aufnahme der 3 Dateien zusammenfügen (mit Überschreibung der Zieldatei):  
 
# cd ~/Videos/Bildschirmaufnahmen/
 
# cd ~/Videos/Bildschirmaufnahmen/
 
datumzeit=20220119-1500
 
datumzeit=20220119-1500
Zeile 157: Zeile 161:
 
   -i TestBildschirmaufnahme_${datumzeit}-Ton-Mikrophon.aac -ac 2 \
 
   -i TestBildschirmaufnahme_${datumzeit}-Ton-Mikrophon.aac -ac 2 \
 
   -filter_complex amix=inputs=2 \
 
   -filter_complex amix=inputs=2 \
   -metadata title="Meine ausgezeichnete Bildschirmaufnahme" -metadata year="2022" -metadata description="Was ich schon immer alles wichtige sagen wollte …" \
+
   -metadata title="Meine ausgezeichnete Bildschirmaufnahme" \
 +
  -metadata year="2022" \
 +
  -metadata description="Was ich schon immer alles wichtige sagen wollte …" \
 
   TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4
 
   TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4
 
    
 
    
# mit mpv abspielen
+
# mit ffplay abspielen
 
ffplay TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4  
 
ffplay TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4  
# mpv TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4 </syntaxhighlight>
+
# mpv TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4
 +
</syntaxhighlight>
  
 
[[Kategorie: Videoanleitung]]
 
[[Kategorie: Videoanleitung]]

Version vom 14. Februar 2022, 22:16 Uhr

Dies richtet sich an „Fortgeschrittene“, die den Umgang mit der Komanndokonsole kennen. Bildschirmaufnahmen erfordern hier etwas Geschick, die richtigen Einstellungen anzugeben. Allgemein sollte man folgen Fragen sich vorher beantworten:

  • Habe ich einen leistungsstarke Rechner? (größer ~4 GB Arbeitsspeicher können vermutlich die Bildschirmaufnahme sogleich fertig zusammenkodieren)
  • Habe ich einen leistungsschwachen Rechner? (~4 GB Arbeitsspeicher sollten Tonaufnahme und Filmaufnahme getrennt speichern, um sie im Nachgang zusammenzufügen)
  • Welches Endformat wird gebraucht? (OpenSource: OGV z.B. für dieses Wiki oder Wikipedia; bei Youtube: MP4)

Fenstergrößen herausfinden

Zerst die Fenstergrößen aufzeigen:

wmctrl -lG
#               links-oben     Breite  × Höhe                       Fenstertitel
#              (0+x   0+y)    (px-breit  px-hoch)
# 0x00c00003 -1 0     743      1366      25   localhost.localdomain xfce4-panel
# 0x01c00007 -1 0     0        1366      768  localhost.localdomain Schreibtisch
# 0x04200003  0 0     0        1366      743  localhost.localdomain command line - Get Window size in shell - Ask Ubuntu – Opera

Gemessen wird immer von links ganz oben als x=0 y=0, hier erklärt für die Statusleiste (xfce4-panel):

  • von links-oben gesehen ist sie waagrecht mit x=0 Pixel Abstand, und senkrecht mit y=743 Pixel Abstand von links-oben
  • und dann ist sie 1366×25 Pixel breit mal hoch

… schematisch gesehen:

   x… 0 Pixel Abstand  
 y 
 ⋮   +-------------------+
 7   |                   |
 4   |                   |
 3   |                   |
 ↓   |                   |  
 --  |-------------------|  25 Pixel
     +-------------------+  hoch
     ←---- 1366 Pixel  --→

Gerätequellen herausfinden - Ton

# https://trac.ffmpeg.org/wiki/Capture/PulseAudio
pactl list short sources | column -t # Tonquellen ausgeben
# 0  alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c    s16le      2ch  44100Hz  IDLE
# 1  alsa_input.pci-0000_00_1b.0.analog-stereo           module-alsa-card.c    s16le      2ch  48000Hz  SUSPENDED
# 2  noechosource                                        module-echo-cancel.c  float32le  2ch  32000Hz  SUSPENDED
# 3  noechosink.monitor                                  module-echo-cancel.c  float32le  2ch  32000Hz  SUSPENDED

Hier gibt es alsa_output….analog-stereo.monitor (=Computer-Audio, alle Computerprogramme), dann alsa_input….analog-stereo (=Mikrophon), und noechosource als auch noechosink.monitor zeigen hier speziell eingestellte Pulse-Audio-Module, mit Echofilter, die hier nicht von Belang sind[1].

Eine weitere Möglichkeit ist die Pulse-Audio-Kommandokontrolle pacmd:

pacmd list-source-outputs | grep "source:" # Tonquellen über grep herausfinden
# Hinweis: input ist meist das eigentliche Mikrophon
# Hinweis: output ist dann der dasige Hörkanal des Gerätes!
#   source: 0 <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>  # Ton der Computerprogramme
#   source: 1 <alsa_input.pci-0000_00_1b.0.analog-stereo>           # Mikrophon
#   source: 2 <noechosource>
#   source: 3 <noechosink.monitor>

Dabei kann man die Tonquellen entweder bezüglich ihrer Kennnummer angeben: -f pulse -i 5, oder durch den Gerätenamen: -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo, oder man verwendet einfach -f pulse -i default, um die Quelle zu verwenden, die derzeit als Standard in pulseaudio eingestellt ist.

Tonaufnahme

Tonaufnahme von Computerprogrammen und Mikrophon, hier nach OGG:

# cd ~/Videos/Bildschirmaufnahmen/
datumzeit=$(date '+%Y%m%d-%H%M')
ffmpeg -y \
  -loglevel warning \
  -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
  -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo \
  -filter_complex amix=inputs=2 \
  Tonaufnahme_${datumzeit}.ogg
# WICHTIG Aufnahme beenden mit q WICHTIG
# Kommando-Optionen erklärt:
# -y - yes/ja überschreibe Ausgabe **ohne Nachfrage**
# -loglevel warning - nur Warnungen ausgeben (standardmäßig werden umfangreiche Infos ausgegeben)
# -i - input - Eingangskanal
# -filter_complex - ist nötig die 4 Kanäle richtig zusammenzufügen

Tonaufnahme als MP3:

# cd ~/Videos/Bildschirmaufnahmen/
datumzeit=$(date '+%Y%m%d-%H%M')
ffmpeg -y \
  -loglevel warning \
  -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
  -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo \
  -filter_complex amix=inputs=2 \
  Tonaufnahme_${datumzeit}.mp3
# WICHTIG Aufnahme beenden mit q WICHTIG
# Kommando-Optionen erklärt:
# -loglevel warning - nur Warnungen ausgeben (standardmäßig werden umfangreiche Infos ausgegeben)

Bildschirmaufnahme

Für kräftige Rechenknechte kann man die Datei gleich fertig zusammenfügen (bei 4GB RAM hat der Rechner oft Probleme, Schritt zu halten). FFmpeg bemißt die Aufnahmefläche immer von links oben aus (bei ffmpeg … -i :0.0 sozusagen), im folgenden wird eine Aufnahmefläche von 1366x743 genommen, die umrandet dargestellt wird (merke aber: der gesamte Bildschirm ist in diesem Beispiel größer, mit 1366x768, so daß die Statusleiste/Panele ausgelassen wird)

# rechenintensiv: Ton wird möglicherweise schlecht aufgenommen
# cd ~/Videos/Bildschirmaufnahmen/
datumzeit=$(date '+%Y%m%d-%H%M')
ffmpeg -y -video_size 1366x743 -framerate 25 -f x11grab -i :0.0  \
  -show_region 1 -loglevel warning \
  -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
  -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo \
  -ac 2 \
  -filter_complex amix=inputs=2 \
  TestBildschirmaufnahme_${datumzeit}_Bild-und-Ton.mp4
# WICHTIG Aufnahme beenden mit q WICHTIG
# Kommando-Optionen erklärt:
# -show_region 1 - zeige Umrahmung der Aufnahmefläche
# -loglevel warning - nur Warnungen ausgeben (standardmäßig werden umfangreiche Infos ausgegeben)

Für schwache Rechenknechte ist es besser, alle Dateien getrennt abzuspeichern, und später, im 2. Schritt, dann zusammenzufügen:

# Aufnahme in 3 Dateien - verbessert thread_queue_size (?Puffer): 
# cd ~/Videos/Bildschirmaufnahmen/
datumzeit=$(date '+%Y%m%d-%H%M')
ffmpeg -y -video_size 1366x743 -framerate 25 \
  -show_region 1 -loglevel warning \
  -f x11grab -thread_queue_size 4096 -i :0.0  \
  -f pulse -thread_queue_size 4096 -ac 2 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
  -f pulse -thread_queue_size 4096 -ac 2 -i alsa_input.pci-0000_00_1b.0.analog-stereo \
  -map 0:v:0 TestBildschirmaufnahme_${datumzeit}-Bildschirm.mp4 \
  -map 1:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Computer.aac \
  -map 2:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Mikrophon.aac
echo $datumzeit
# WICHTIG Aufnahme beenden mit q WICHTIG

# Aufnahme in 3 Dateien (ohne thread_queue_size)
# cd ~/Videos/Bildschirmaufnahmen/
datumzeit=$(date '+%Y%m%d-%H%M')
ffmpeg -y -video_size 1366x743 -framerate 25 -f x11grab -i :0.0  \
  -show_region 1 -loglevel warning \
  -f pulse -ac 2 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
  -f pulse -ac 2 -i alsa_input.pci-0000_00_1b.0.analog-stereo \
  -map 0:v:0 TestBildschirmaufnahme_${datumzeit}-Bildschirm.mp4 \
  -map 1:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Computer.aac \
  -map 2:a:0 TestBildschirmaufnahme_${datumzeit}-Ton-Mikrophon.aac
# WICHTIG Aufnahme beenden mit q WICHTIG
echo $datumzeit

Zusammenfügen einzelner Aufnahmen

# Aufnahme der 3 Dateien zusammenfügen (mit Überschreibung der Zieldatei): 
# cd ~/Videos/Bildschirmaufnahmen/
datumzeit=20220119-1500
nice -n 19 ffmpeg -y -i TestBildschirmaufnahme_${datumzeit}-Bildschirm.mp4 \
  -i TestBildschirmaufnahme_${datumzeit}-Ton-Computer.aac  \
  -i TestBildschirmaufnahme_${datumzeit}-Ton-Mikrophon.aac -ac 2 \
  -filter_complex amix=inputs=2 \
  -metadata title="Meine ausgezeichnete Bildschirmaufnahme" \
  -metadata year="2022" \
  -metadata description="Was ich schon immer alles wichtige sagen wollte …" \
  TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4
  
# mit ffplay abspielen
ffplay TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4 
# mpv TestBildschirmaufnahme_${datumzeit}-Bild-und-Ton.mp4