Hilfe:Bildschirmaufnahmen vermittels Kommandozeile: Unterschied zwischen den Versionen
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Bildwegweiser Hilfe}}<div style="max-width:300px;float:right;">__INHALTSVERZEICHNIS__</div> | {{Bildwegweiser Hilfe}}<div style="max-width:300px;float:right;">__INHALTSVERZEICHNIS__</div> | ||
− | + | '''Zusammenfassung''' – ''Bildschirmaufnahmen vermittels Kommandozeile:'' Ein Beitrag, der sich an „Fortgeschrittene“ richtet, die den Umgang mit der Kommandokonsole 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 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) | * Habe ich einen leistungsschwachen Rechner? (~4 GB Arbeitsspeicher sollten Tonaufnahme und Filmaufnahme getrennt speichern, um sie im Nachgang zusammenzufügen) | ||
− | * Welches Endformat wird gebraucht? ( | + | * Welches Endformat wird gebraucht? (Open-Source: Ton: OGA, Film OGV z. B. für dieses Wiki oder Wikipedia; bei YouTube: MP4) |
+ | * Hinweis zur Schnelligkeit (aber noch zu auszuloten, zu prüfen): bei Zielformat MP4 war eine MKV-Aufnahme mit Angabe des Videodecoder meistens flüssiger verlaufen als direkt im MP4, letzteres verlangsamte den Computer | ||
== Fenstergrößen herausfinden == | == Fenstergrößen herausfinden == | ||
− | + | Eine einfache Möglichkeit, einen wunschgemäßen Aufnahmerahmen zu bekommen, ist ImageMagick als Hilfsprogramm zu verwenden, damit können wir einen Rahmenbereich auf dem Bildschirm abzeichnen, in dem wir dann später aufnehmen wollen: | |
+ | |||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;">import PNG:- | identify PNG:- | perl -ne '/ (\d+x\d+) \d+x\d+[-+](\d+)[-+](\d+) / and print "… -video_size $1 -i :0.0+$2,$3 …\n"' | ||
+ | # … -video_size 1080x650 -i :0.0+229,93 … | ||
+ | # bedeutet: | ||
+ | # … Video Größe 1080x 650y dann -i Bildschirm-Eingang :0.0 und Versatz 229-x und 93-y …</syntaxhighlight> | ||
+ | |||
+ | Etwas umfangreicher ist die Möglichkeit gezielt die Fenstergrößen aufzeigen: | ||
<syntaxhighlight lang="bash" style="font-size:smaller;">wmctrl -lG | <syntaxhighlight lang="bash" style="font-size:smaller;">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) | ||
− | # 0x00c00003 -1 0 | + | # 0x00c00003 -1 0 742 1366 25 localhost.localdomain xfce4-panel |
# 0x01c00007 -1 0 0 1366 768 localhost.localdomain Schreibtisch | # 0x01c00007 -1 0 0 1366 768 localhost.localdomain Schreibtisch | ||
− | # 0x04200003 0 0 0 1366 | + | # 0x04200003 0 0 0 1366 742 localhost.localdomain command line - Get Window size in shell - Ask Ubuntu – Opera |
</syntaxhighlight> | </syntaxhighlight> | ||
Gemessen wird immer von links ganz oben als <code>x=0 y=0</code>, hier erklärt für die Statusleiste (<code>xfce4-panel</code>): | Gemessen wird immer von links ganz oben als <code>x=0 y=0</code>, hier erklärt für die Statusleiste (<code>xfce4-panel</code>): | ||
− | * von links-oben gesehen ist sie waagrecht mit <code>x=0</code> Pixel Abstand, und senkrecht mit <code>y= | + | * von links-oben gesehen ist sie waagrecht mit <code>x=0</code> Pixel Abstand, und senkrecht mit <code>y=742</code> Pixel Abstand von links-oben |
* und dann ist sie 1366×25 Pixel breit mal hoch | * und dann ist sie 1366×25 Pixel breit mal hoch | ||
Zeile 63: | Zeile 71: | ||
Dabei kann man die Tonquellen entweder bezüglich ihrer Kennnummer angeben: <code>-f pulse -i 5</code>, oder durch den Gerätenamen: <code>-f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo</code>, oder man verwendet einfach <code>-f pulse -i default</code>, um die Quelle zu verwenden, die derzeit als Standard in pulseaudio eingestellt ist. | Dabei kann man die Tonquellen entweder bezüglich ihrer Kennnummer angeben: <code>-f pulse -i 5</code>, oder durch den Gerätenamen: <code>-f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo</code>, oder man verwendet einfach <code>-f pulse -i default</code>, um die Quelle zu verwenden, die derzeit als Standard in pulseaudio eingestellt ist. | ||
− | == | + | == Tonaufnahmen == |
− | + | === Tonaufnahme als OGA (OGG-Audio) === | |
− | Tonaufnahme | ||
+ | Einzelne Tonaufnahme von Computerprogrammen und Mikrophon, hier nach OGA (für schnelle Computer): | ||
<syntaxhighlight lang="bash" style="font-size:smaller;"> | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | # Einzelne STEREO-Datei erstellen | ||
# cd ~/Videos/Bildschirmaufnahmen/ | # cd ~/Videos/Bildschirmaufnahmen/ | ||
− | datumzeit=$(date '+%Y%m%d-%H%M') | + | # ---------- Variablen selbst anpassen |
+ | datumzeit=$(date '+%Y%m%d-%H%M') | ||
+ | dateiname='Tonaufnahme' | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
ffmpeg -y \ | ffmpeg -y \ | ||
-loglevel warning \ | -loglevel warning \ | ||
− | -f pulse -i | + | -f pulse -i "$klanggeraet_computer" \ |
− | -f pulse -i | + | -f pulse -i "$klanggeraet_mikrophon" \ |
-filter_complex amix=inputs=2 \ | -filter_complex amix=inputs=2 \ | ||
− | + | "${dateiname}_Stereo_${datumzeit}.oga" | |
# WICHTIG Aufnahme beenden mit q WICHTIG | # WICHTIG Aufnahme beenden mit q WICHTIG | ||
# Kommando-Optionen erklärt: | # Kommando-Optionen erklärt: | ||
Zeile 84: | Zeile 99: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Tonaufnahme als MP3 | + | Einzelne Datei als MONO Datei (für schnelle Computer): |
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | # Einzelne MONO-Datei erstellen | ||
+ | # cd ~/Videos/Bildschirmaufnahmen/ | ||
+ | # ---------- Variablen selbst anpassen | ||
+ | datumzeit=$(date '+%Y%m%d-%H%M') | ||
+ | dateiname='IT-Plenumsentscheid' | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
+ | ffmpeg -y \ | ||
+ | -loglevel warning \ | ||
+ | -f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_computer" \ | ||
+ | -f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_mikrophon" \ | ||
+ | -filter_complex amix=inputs=2 \ | ||
+ | "${dateiname}_Mono-${datumzeit}.oga" | ||
+ | # WICHTIG Aufnahme beenden mit q WICHTIG | ||
+ | # zusätzliche Kommando-Optionen erklärt: | ||
+ | # -ac 1 bedeuten “ac=audio channel“ 1, also nur 1 Tonkanal | ||
+ | # das ergibt MONO je Geräteeinfluß (hier: Computer=analog-stereo.monitor + Mikro=analog-stereo) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Getrennte Dateien je Aufnahme-Kanal, also für ''langsamere'' Computer (Mikrophon-Klang getrennt von Computer-Klang): | ||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | # cd ~/Videos/Bildschirmaufnahmen/ | ||
+ | # ---------- Variablen selbst anpassen | ||
+ | datumzeit=$(date '+%Y%m%d-%H%M') | ||
+ | dateiname='IT-Plenumsentscheid' | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
+ | ffmpeg -y \ | ||
+ | -loglevel warning \ | ||
+ | -f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_computer" \ | ||
+ | -f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_mikrophon" \ | ||
+ | -map 0:a:0 "${dateiname}_${datumzeit}-Ton-Computer-Mono.oga" \ | ||
+ | -map 1:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon-Mono.oga" | ||
+ | # WICHTIG Aufnahme beenden mit q WICHTIG | ||
+ | |||
+ | # ---------- 2 Dateien zusammenfügen zu einer | ||
+ | nice -n 19 ffmpeg -y \ | ||
+ | -i "${dateiname}_${datumzeit}-Ton-Computer-Mono.oga" \ | ||
+ | -i "${dateiname}_${datumzeit}-Ton-Mikrophon-Mono.oga" \ | ||
+ | -filter_complex amix=inputs=2 \ | ||
+ | -metadata title="IT Plenumsentscheid (OSEG)" \ | ||
+ | -metadata year="2022" \ | ||
+ | -metadata description="Besprechung über IT Sachen und Beschluß über dies und das ..." \ | ||
+ | "${dateiname}_${datumzeit}-Ton-zusammengefügt.oga" | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Tonaufnahme als MP3 === | ||
+ | |||
<syntaxhighlight lang="bash" style="font-size:smaller;"> | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
# cd ~/Videos/Bildschirmaufnahmen/ | # cd ~/Videos/Bildschirmaufnahmen/ | ||
− | datumzeit=$(date '+%Y%m%d-%H%M') | + | # ---------- Variablen selbst anpassen |
+ | datumzeit=$(date '+%Y%m%d-%H%M') | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
ffmpeg -y \ | ffmpeg -y \ | ||
-loglevel warning \ | -loglevel warning \ | ||
− | -f pulse -i | + | -f pulse -i "$klanggeraet_computer" \ |
− | -f pulse -i | + | -f pulse -i "$klanggeraet_mikrophon" \ |
-filter_complex amix=inputs=2 \ | -filter_complex amix=inputs=2 \ | ||
− | Tonaufnahme_${datumzeit}.mp3 | + | "Tonaufnahme_${datumzeit}.mp3" |
# WICHTIG Aufnahme beenden mit q WICHTIG | # WICHTIG Aufnahme beenden mit q WICHTIG | ||
# Kommando-Optionen erklärt: | # Kommando-Optionen erklärt: | ||
Zeile 101: | Zeile 174: | ||
== Bildschirmaufnahme == | == 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 <code>ffmpeg … -i :0.0</code> sozusagen), im folgenden wird eine Aufnahmefläche von <code> | + | 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>1366x742</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" style="font-size:smaller;"> | <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') | + | # ---------- Variablen selbst anpassen |
− | ffmpeg -y -video_size | + | datumzeit=$(date '+%Y%m%d-%H%M') |
+ | dateiname="TestBildschirmaufnahme" | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
+ | ffmpeg -y -video_size 1366x742 -framerate 25 -f x11grab -i :0.0 \ | ||
-show_region 1 -loglevel warning \ | -show_region 1 -loglevel warning \ | ||
− | -f pulse -i | + | -f pulse -i "$klanggeraet_computer" \ |
− | -f pulse -i | + | -f pulse -i "$klanggeraet_mikrophon" \ |
-ac 2 \ | -ac 2 \ | ||
-filter_complex amix=inputs=2 \ | -filter_complex amix=inputs=2 \ | ||
− | + | "${dateiname}_${datumzeit}_Bild-und-Ton.mp4" | |
− | # WICHTIG Aufnahme beenden mit q WICHTIG | + | # WICHTIG Aufnahme beenden mit q WICHTIG |
− | # Kommando-Optionen erklärt: | + | # Kommando-Optionen erklärt: |
− | # -show_region 1 - zeige Umrahmung der Aufnahmefläche | + | # -show_region 1 - zeige Umrahmung der Aufnahmefläche |
− | # -loglevel warning - nur Warnungen ausgeben (standardmäßig werden umfangreiche Infos ausgegeben) | + | # -loglevel warning - nur Warnungen ausgeben (standardmäßig werden umfangreiche Infos ausgegeben) |
</syntaxhighlight> | </syntaxhighlight> | ||
− | Für schwache Rechenknechte ist es besser | + | Für schwache Rechenknechte ist es besser |
+ | * alle Dateien getrennt abzuspeichern, und später, im 2. Schritt, dann zusammenzufügen | ||
+ | * bei Endformat MP4 war direktes MP4-Aufnehmen z. T. sehr sehr zäh und verlangsamte alles (bei 8GB RAM Linux Manjaro Virtuelle Maschine), jedoch Aufnehmen in MKV, empfohlen aus anderer Quelle<ref name="FFMpeg_screencasting">SCREEN CAPTURE, RECORDING, CASTING A - 2020 (Bildschirmaufnahme, Aufnehmen, Besprechung A - 2020). Quellen: https://www.bogotobogo.com/FFMpeg/ffmpeg_video_screencasting_screen_recording_capture.php, (Besprechung B https://www.bogotobogo.com/FFMpeg/ffmpeg_video_screencasting_screen_recording_capture_active_current_top_window.php) abgerufen am 11. Ostermonat (April) 2022</ref> mit <code>-vcodec … Videodatei.mkv</code> lief sehr flüssig – daher sind folgende Beispiele in MKV gegeben und gegebener Videokodierung <code>-vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0</code> | ||
<syntaxhighlight lang="bash" style="font-size:smaller;"> | <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') | + | # ---------- Variablen selbst anpassen |
− | ffmpeg -y -video_size | + | datumzeit=$(date '+%Y%m%d-%H%M') |
+ | dateiname="TestBildschirmaufnahme" | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
+ | ffmpeg -y -video_size 1366x742 -framerate 25 \ | ||
-show_region 1 -loglevel warning \ | -show_region 1 -loglevel warning \ | ||
-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 | + | -f pulse -thread_queue_size 4096 -ac 2 -i "$klanggeraet_computer" \ |
− | -f pulse -thread_queue_size 4096 -ac 2 -i | + | -f pulse -thread_queue_size 4096 -ac 2 -i "$klanggeraet_mikrophon" \ |
− | -map 0:v:0 | + | -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 \ |
− | -map 1:a:0 | + | -map 0:v:0 "${dateiname}_${datumzeit}-Bildschirm.mkv" \ |
− | -map 2:a:0 | + | -map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \ |
− | echo $datumzeit | + | -map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \ |
− | # WICHTIG Aufnahme beenden mit q WICHTIG | + | && echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m" |
+ | # WICHTIG Aufnahme beenden mit q WICHTIG | ||
# Aufnahme in 3 Dateien (ohne thread_queue_size) | # Aufnahme in 3 Dateien (ohne thread_queue_size) | ||
# cd ~/Videos/Bildschirmaufnahmen/ | # cd ~/Videos/Bildschirmaufnahmen/ | ||
− | datumzeit=$(date '+%Y%m%d-%H%M') | + | # ---------- Variablen selbst anpassen |
− | ffmpeg -y -video_size | + | datumzeit=$(date '+%Y%m%d-%H%M') |
+ | dateiname="TestBildschirmaufnahme" | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
+ | ffmpeg -y -video_size 1366x742 -framerate 25 -f x11grab -i :0.0 \ | ||
+ | -show_region 1 -loglevel warning \ | ||
+ | -f pulse -ac 2 -i "$klanggeraet_computer" \ | ||
+ | -f pulse -ac 2 -i "$klanggeraet_mikrophon" \ | ||
+ | -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 \ | ||
+ | -map 0:v:0 "${dateiname}_${datumzeit}-Bildschirm.mkv" \ | ||
+ | -map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \ | ||
+ | -map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \ | ||
+ | && echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m" | ||
+ | # WICHTIG Aufnahme beenden mit q WICHTIG | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Bildschirmaufnahme mit Kopfhörer === | ||
+ | |||
+ | Hier ein Beispiel mit Kopfhörer (das Mikrophon ist nur mono) … | ||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | pactl list short sources | column -t | ||
+ | # Computer | ||
+ | # 0 alsa_output.pci-0000_02_02.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED | ||
+ | # 1 alsa_input.pci-0000_02_02.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED | ||
+ | # Kopfhörer | ||
+ | # 2 alsa_output.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED | ||
+ | # 3 alsa_input.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.mono-fallback module-alsa-card.c s16le 1ch 44100Hz SUSPENDED | ||
+ | </syntaxhighlight> | ||
+ | … und es wird in MKV-Format aufgenommen, das später auch in MP4 umgewandelt werden kann. Im folgenden Beispiel | ||
+ | * wurde für das Mono-Mikrophon <code>-ac 1</code> angegeben | ||
+ | * wurde die Fläche ohne Statusleiste aufgenommen (<code>-video_size 1920x1060</code>; mit Statusleiste wäre hier <code>-video_size 1920x1104</code>) | ||
+ | * wurde für die Videoaufnahme genauer vorgeschrieben (kann man sicher noch optimieren) | ||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | # Schritt 1 Bildschirmaufnahme in MKV | ||
+ | # ---------- Variablen selbst anpassen | ||
+ | datumzeit=$(date '+%Y%m%d-%H%M') | ||
+ | dateiname='Netzwerktreffen über Zoom' | ||
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.mono-fallback | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
+ | ffmpeg -y -video_size 1920x1060 -framerate 25 \ | ||
-show_region 1 -loglevel warning \ | -show_region 1 -loglevel warning \ | ||
− | -f pulse -ac 2 -i | + | -f x11grab -thread_queue_size 4096 -i :0.0 \ |
− | -f pulse -ac | + | -f pulse -thread_queue_size 4096 -ac 2 -i "$klanggeraet_computer" \ |
− | -map 0:v:0 | + | -f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_mikrophon" \ |
− | -map 1:a:0 | + | -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 \ |
− | -map 2:a:0 | + | -map 0:v:0 "${dateiname}_${datumzeit}-Bildschirm.mkv" \ |
− | # | + | -map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \ |
− | + | -map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \ | |
+ | && echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m" | ||
+ | # Wichtig: beenden mit q | ||
+ | |||
+ | # ---------- Schritt 2 Zusammenfügen | ||
+ | datumzeit=20220411-1254 | ||
+ | dateiname='Netzwerktreffen über Zoom' | ||
+ | nice -n 19 ffmpeg -y -i "${dateiname}_${datumzeit}-Bildschirm.mkv" \ | ||
+ | -i "${dateiname}_${datumzeit}-Ton-Computer.aac" \ | ||
+ | -i "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \ | ||
+ | -filter_complex amix=inputs=2 \ | ||
+ | -metadata title="Netzwerktreffen Thema Dienstbesprechung" \ | ||
+ | -metadata year="2022" \ | ||
+ | -metadata description="Ausprobieren was geht …" \ | ||
+ | "${dateiname}_${datumzeit}-Bild-und-Ton.mp4" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 155: | Zeile 300: | ||
<syntaxhighlight lang="bash" style="font-size:smaller;"> | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
# Aufnahme der 3 Dateien zusammenfügen (mit Überschreibung der Zieldatei): | # Aufnahme der 3 Dateien zusammenfügen (mit Überschreibung der Zieldatei): | ||
+ | # Aufnahmedatei war mit -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 ….mkv | ||
# cd ~/Videos/Bildschirmaufnahmen/ | # cd ~/Videos/Bildschirmaufnahmen/ | ||
− | datumzeit=20220119-1500 | + | # ---------- Variablen selbst anpassen |
− | nice -n 19 ffmpeg -y -i | + | datumzeit=20220119-1500 |
− | -i | + | dateiname="TestBildschirmaufnahme" |
− | -i | + | # ---------- Dateien zusammenfügen |
+ | nice -n 19 ffmpeg -y -i "${dateiname}_${datumzeit}-Bildschirm.mkv" \ | ||
+ | -i "${dateiname}_${datumzeit}-Ton-Computer.aac" \ | ||
+ | -i "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" -ac 2 \ | ||
-filter_complex amix=inputs=2 \ | -filter_complex amix=inputs=2 \ | ||
-metadata title="Meine ausgezeichnete Bildschirmaufnahme" \ | -metadata title="Meine ausgezeichnete Bildschirmaufnahme" \ | ||
-metadata year="2022" \ | -metadata year="2022" \ | ||
-metadata description="Was ich schon immer alles wichtige sagen wollte …" \ | -metadata description="Was ich schon immer alles wichtige sagen wollte …" \ | ||
− | + | "${dateiname}_${datumzeit}-Bild-und-Ton.mp4" | |
# mit ffplay abspielen | # mit ffplay abspielen | ||
− | ffplay | + | ffplay "${dateiname}_${datumzeit}-Bild-und-Ton.mp4" |
− | # mpv | + | # mpv "${dateiname}_${datumzeit}-Bild-und-Ton.mp4" |
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 176: | Zeile 325: | ||
<syntaxhighlight lang="bash" style="font-size:smaller;"> | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
cd ~/Videos/Bildschirmaufnahmen/ | cd ~/Videos/Bildschirmaufnahmen/ | ||
− | datumzeit=$(date '+%Y%m%d-%H%M') | + | # ---------- Variablen selbst anpassen |
− | + | datumzeit=$(date '+%Y%m%d-%H%M') | |
− | ffmpeg -video_size | + | dateiname="Video bei YoutTube herunterladen" |
+ | # Bezeichnung technischer Geräte für Klang/Ton: | ||
+ | klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | # ---------- Aufnahme vermmittels ffmpeg | ||
+ | ffmpeg -video_size 1366x742 -framerate 25 \ | ||
-show_region 1 -loglevel warning -probesize 42M \ | -show_region 1 -loglevel warning -probesize 42M \ | ||
-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 alsa_input.pci-0000_00_1b.0.analog-stereo \ | -f pulse -thread_queue_size 4096 -ac 2 -i alsa_input.pci-0000_00_1b.0.analog-stereo \ | ||
− | -map 0:v:0 "${ | + | -map 0:v:0 "${dateiname}_${datumzeit}-Bildschirm.mp4" \ |
− | -map 1:a:0 "${ | + | -map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \ |
− | -map 2:a:0 "${ | + | -map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \ |
− | echo $datumzeit # war 20220218-1902 | + | && echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m" |
+ | # datumzeit=20220218-1902 # war 20220218-1902 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 192: | Zeile 347: | ||
* Start bei 00:00:16.5 | * Start bei 00:00:16.5 | ||
* Ende bei 00:04:51 (Gesamtvideo war 00:04:54.66) | * Ende bei 00:04:51 (Gesamtvideo war 00:04:54.66) | ||
− | * sklaliere das Video auf 1920x1080, weil es bei YouTube auch als „HD“ Video angenommen werden soll (beließe man es bei | + | * sklaliere das Video auf 1920x1080, weil es bei YouTube auch als „HD“ Video angenommen werden soll (beließe man es bei 1366x742, dann ist die YouTube-Qualität stärker verschwommen als das Urvideo tatsächlich aufweist) |
* füge Metadaten dem Video ein | * füge Metadaten dem Video ein | ||
<syntaxhighlight lang="bash" style="font-size:smaller;"> | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
Zeile 203: | Zeile 358: | ||
# encoder : Lavf57.83.100 | # encoder : Lavf57.83.100 | ||
# Duration: 00:04:54.66, start: 0.000000, bitrate: 286 kb/s | # Duration: 00:04:54.66, start: 0.000000, bitrate: 286 kb/s | ||
− | # Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, | + | # Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 1366x742, 283 kb/s, 25.67 fps, 25.67 tbr, 19712 tbn, 51.33 tbc (default) |
# Metadata: | # Metadata: | ||
# handler_name : VideoHandler | # handler_name : VideoHandler | ||
datumzeit=20220218-1902 | datumzeit=20220218-1902 | ||
− | + | dateiname="Video bei YoutTube herunterladen" | |
cd ~/Videos/Bildschirmaufnahmen/ | cd ~/Videos/Bildschirmaufnahmen/ | ||
nice -n 19 ffmpeg -y \ | nice -n 19 ffmpeg -y \ | ||
− | -i "${ | + | -i "${dateiname}_${datumzeit}-Bildschirm.mp4" \ |
− | -i "${ | + | -i "${dateiname}_${datumzeit}-Ton-Computer.aac" \ |
− | -i "${ | + | -i "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" -ac 2 \ |
-filter_complex "[1]afade=type=out:start_time=287:duration=4[TonCompAusblenden];\ | -filter_complex "[1]afade=type=out:start_time=287:duration=4[TonCompAusblenden];\ | ||
[2]afade=t=out:st=287:d=4[TonMikroAusblenden];\ | [2]afade=t=out:st=287:d=4[TonMikroAusblenden];\ | ||
[TonCompAusblenden][TonMikroAusblenden]amix=inputs=2" \ | [TonCompAusblenden][TonMikroAusblenden]amix=inputs=2" \ | ||
− | -ss 00:00:16.5 -to 00:04:51 -preset faster -pix_fmt yuv420p -maxrate 5000K -bufsize 5000K -vf scale=1920x1080:flags=lanczos -movflags +faststart -b:a 160k \ | + | -ss 00:00:16.5 -to 00:04:51 \ |
+ | -preset faster -pix_fmt yuv420p -maxrate 5000K -bufsize 5000K \ | ||
+ | -vf scale=1920x1080:flags=lanczos -movflags +faststart -b:a 160k \ | ||
-metadata title="Video bei YoutTube herunterladen (18. Hornung (Februar) 2022)" -metadata year="2022" -metadata description="Kurzanleitung für Firefox Erweiterung (=Add-On) „Easy Youtube Video Downloader Express“ zum herunterladen von YoutTube Videos." \ | -metadata title="Video bei YoutTube herunterladen (18. Hornung (Februar) 2022)" -metadata year="2022" -metadata description="Kurzanleitung für Firefox Erweiterung (=Add-On) „Easy Youtube Video Downloader Express“ zum herunterladen von YoutTube Videos." \ | ||
− | "${ | + | "${dateiname}_${datumzeit}-Bild-und-Ton.mp4" |
</syntaxhighlight> | </syntaxhighlight> | ||
Erklärungen | Erklärungen | ||
− | * Zeitbemessung: <code>-filter_complex</code> hat spezielle Syntax und allgemein wird ein Filter so angegeben<br/><code>[EINGANGS-i-INDEX]filtername=var1=wert1:var2=wert2[BEZEICHNUNG-Weiterleitung]</code><br/> … und dies kann kombiniert werden. Hier ist <code>-i "${ | + | * Zeitbemessung: <code>-filter_complex</code> hat spezielle Syntax und allgemein wird ein Filter so angegeben<br/><code>[EINGANGS-i-INDEX]filtername=var1=wert1:var2=wert2[BEZEICHNUNG-Weiterleitung]</code><br/> … und dies kann kombiniert werden. Hier ist <code>-i "${dateiname}_${datumzeit}-Ton-Computer.aac"</code> die 2. Eingangsdatei von allen drei <code>-i</code>, aber da ffmpeg den Eingangs-Index bei 0 anfängt, und von 0, 1 und 2 hochgezählt wird, müssen wir [1] angeben für die 2. Eingangsdatei: |
** <code>[1]afade=type=out:start_time=287:duration=4[TonCompAusblenden]</code> bedeutet: <code>afade</code> → Audio-Filter zum ausblenden, Startzeit bei 287 Sekunden (es geht ja bis 00:04:51, also 291 Sekunden minus 4 Sekunden zum Ausblenden ergibt eine Startzeit bei 287 Sekunden), Dauer des Ausblendens 4 Sekunden; | ** <code>[1]afade=type=out:start_time=287:duration=4[TonCompAusblenden]</code> bedeutet: <code>afade</code> → Audio-Filter zum ausblenden, Startzeit bei 287 Sekunden (es geht ja bis 00:04:51, also 291 Sekunden minus 4 Sekunden zum Ausblenden ergibt eine Startzeit bei 287 Sekunden), Dauer des Ausblendens 4 Sekunden; | ||
** <code>[2]afade=t=out:st=287:d=4[TonMikroAusblenden]</code> ist dasgleiche in Kurzschreibweise für den Ton des Mikrophons; | ** <code>[2]afade=t=out:st=287:d=4[TonMikroAusblenden]</code> ist dasgleiche in Kurzschreibweise für den Ton des Mikrophons; | ||
** <code>[TonCompAusblenden][TonMikroAusblenden]amix=inputs=2</code> führt beide bezeichneten Weiterleitungskanäle zusammen | ** <code>[TonCompAusblenden][TonMikroAusblenden]amix=inputs=2</code> führt beide bezeichneten Weiterleitungskanäle zusammen | ||
* die Angaben für die Videoneuverarbeitung (<code>-preset faster … -vf scale=1920x1080:flags=lanczos -movflags +faststart -b:a 160k</code> sind Netzfunde; Details siehe englische Dokumentation der Videofilter https://ffmpeg.org/ffmpeg-filters.html#Video-Filters) | * die Angaben für die Videoneuverarbeitung (<code>-preset faster … -vf scale=1920x1080:flags=lanczos -movflags +faststart -b:a 160k</code> sind Netzfunde; Details siehe englische Dokumentation der Videofilter https://ffmpeg.org/ffmpeg-filters.html#Video-Filters) | ||
− | * <code>-metadata title</code> und <code>-metadata description</code> fügt Videotitel und | + | * <code>-metadata title</code> und <code>-metadata description</code> fügt Videotitel und Viedeobeschreibung ''in'' das Video hinein |
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | Ein Beispiel einer Vorlesung – vom Bildschirm abgelesen aus {{Zitat|Eberhard 1795|Eberhard (1795, Bd.1)}} – hier die Schritte: | ||
+ | |||
+ | # Bildschirmfläche bestimmen | ||
+ | # Video mit allen Metadaten und Bildschirmaufnahme mit MKV Format aufnehmen | ||
+ | #* wichtig ist, die Bild/Ton-Formate zu nehmen, die “native” für ffmpeg sind, also komplizierte Formatumwandlungen (encoding) während der Aufnahme tunlichst vermeiden | ||
+ | #* in dieser Aufnahme wird der Ton mit dem Mono-Mikrophon Sennheiser MKE Essential Omni aufgenommen, was nur einen linken Tonkanal ausgibt, damit auch wirklich nur der linke Kanal aufgenommen wird, ist die komplizierte Geschichte mit <code>-filter_complex "[1:a]pan=mono|c0=FL[mikro_mono] "</code>, <code>FL</code> heißt Front Left, <code>[1:a]</code> bezeichnet die Nummer des Eingangskanals (es ist ein 0-Index, also bezieht sich 1 auf den ''Zweit''-angegebene Eingangskanal der <code>-i</code> Optionen) | ||
+ | #* Computerprogramm-Klänge werden hier nicht berücksichtigt | ||
+ | # Videoaufnahme anschauen (für Zeitpunkte, wo geschnitten werden soll) | ||
+ | # Nachberarbeiten: | ||
+ | #* zeitlich beschneiden | ||
+ | #* entrauschen (über Audacity) | ||
+ | #* Video mit entrauschtem Ton zusammenfügen | ||
+ | |||
+ | Die folgende Aufnahme bekommt eine hohe Datenqualität (vielleicht zu umfangreich für manche Veröffentlichung im Netz, man könnte die Qualität weiter abändern durch folgende Einstellmöglichkeiten: die Rate der Sekundenbilder: <code>-r 25</code> (25 je Sekunde; also weniger würde dann ruckeliger), oder <code>-preset medium</code><ref >Voreinstellungen (preset) siehe: [https://trac.ffmpeg.org/wiki/Encode/H.264#Preset trac.ffmpeg.org/wiki/Encode/H.264#Preset] → Abschnitt ''2. Wähle eine Voreinstellung (preset) und stelle ein'' (…) Eine Voreinstellung ist eine Sammlung von Optionen, die ein bestimmtes Verhältnis zwischen Kodierungsgeschwindigkeit und Komprimierung bieten. Eine langsamere Voreinstellung bietet eine bessere Komprimierung (Komprimierung ist Qualität pro Dateigröße). Das bedeutet, daß man zum Beispiel bei einer bestimmten Dateigröße oder konstanten Bitrate mit einer langsameren Voreinstellung eine bessere Qualität erreicht. Bei konstanter Qualität spart man einfach Bitrate, wenn man eine langsamere Voreinstellung wählt. Man nimm (am besten) die langsamste Voreinstellung, für die man (noch) Geduld hat. […]</ref>, oder die Qualität des Videos <code>-qscale:v 5</code> spielerisch verändern, also welche Qualitätsstufe erwirkt welche Dateigröße, Pixeligkeit des Films usw.) | ||
+ | |||
+ | <syntaxhighlight lang="bash" style="font-size:smaller;"> | ||
+ | # (0) Vorarbeit: Den Bildschirmbereich auswählen mit Hilfe ImageMagick | ||
+ | import PNG:- | identify PNG:- | perl -ne '/ (\d+x\d+) \d+x\d+[-+](\d+)[-+](\d+) / and print "-video_size $1 -i :0.0+$2,$3\n"' | ||
+ | # -video_size 1079x651 -i :0.0+229,92 | ||
+ | # diese Pixelangaben sind für den ffmpeg Befehl gedacht, es bedeutet: | ||
+ | # 1079x651 ist x(Breite)=1079 y(Höhe)=651 | ||
+ | # -i :0.0+229,92 ist input (Bildschirm-Nummer) :0.0 + (Versatz-Pixel-von-Links weg) 229, (Versatz-Pixel-von-oben) 92 | ||
+ | |||
+ | ### Ablauf | ||
+ | # | ||
+ | # mkv-Aufnahme | ||
+ | # ↓ ↓ Zeitspanne bestimmen (-ss von-wann-Anfang -tt bis wann-Ende) | ||
+ | # ↓ wav-geschnitten → wav-entrauscht | ||
+ | # ↓ ↓ | ||
+ | # ↓ ogg-entrauscht | ||
+ | # mkx-Aufnahme + wav-entrauscht → mp4-entrauscht | ||
+ | # ↓ | ||
+ | # Ende: mp4-entrauscht + ogg-entrauscht erstellt | ||
+ | # | ||
+ | |||
+ | ### Werte für Befehle | ||
+ | klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo | ||
+ | |||
+ | datumzeit=$(date '+%Y%m%d') | ||
+ | |||
+ | dateiname_anfang="Lesung Eberhard (1795, S. 47f; bsb10583552) ~ albern, dumm, einfältig usw." | ||
+ | datei_bildsichrmaufnahme_0="${dateiname_anfang}_${datumzeit}-Bildschirm.mkv" | ||
+ | datei_bildsichrmaufnahme_geschnitten="${dateiname_anfang} (${datumzeit}).mkv" | ||
+ | datei_bildsichrmaufnahme_geschnitten_entrauscht="${dateiname_anfang} (${datumzeit})_entrauscht.mp4" | ||
+ | |||
+ | datei_ton_geschnitten_wav="${dateiname_anfang} (${datumzeit}).wav" | ||
+ | datei_ton_geschnitten_entrauscht_wav="${dateiname_anfang} (${datumzeit})_entrauscht.wav" | ||
+ | datei_ton_geschnitten_entrauscht_ogg="${dateiname_anfang} (${datumzeit})_entrauscht.ogg" | ||
+ | |||
+ | cd ~/Videos/Bildschirmaufnahmen/ | ||
+ | # geht sehr gute Lautstärke (-r 30 wird doch sehr groß, -r 25 vielleicht ausreichend) | ||
+ | ffmpeg -y -show_region 1 -r 25 \ | ||
+ | -f x11grab -thread_queue_size 1024 -video_size 1080x650 -i :0.0+229,93 \ | ||
+ | -f pulse -i "${klanggeraet_mikrophon}" \ | ||
+ | -filter_complex "[1:a]pan=mono|c0=FL[mikro_mono] " \ | ||
+ | -vcodec mpeg4 \ | ||
+ | -acodec pcm_s16le \ | ||
+ | -preset medium \ | ||
+ | -qscale:v 5 \ | ||
+ | -map 0 \ | ||
+ | -map "[mikro_mono]" \ | ||
+ | -metadata title="${dateiname_anfang}" \ | ||
+ | -metadata date="1795" \ | ||
+ | -metadata artist="Johann August Eberhard" \ | ||
+ | -metadata album="Lesung Johann August Eberhards Versuch einer allgemeinen deutschen Synonymik" \ | ||
+ | -metadata genre="Speech" \ | ||
+ | -metadata keywords="albern, dumm, einfältig, Albernheit, Dummheit, Einfalt" \ | ||
+ | -metadata comment="Vorlesung aus Eberhard (1795, Seite 47f) über die Begriffe albern, dumm, einfältig. Albernheit, Dummheit, Einfalt. Quelle: https://mdz-nbn-resolving.de/urn:nbn:de:bvb:12-bsb10583552-0 (Bayerische Staatsbibliothek)."\ | ||
+ | "${dateiname_anfang}_${datumzeit}-Bildschirm.mkv" | ||
+ | |||
+ | # Anschauen, an welchen Zeitmarken man schneiden möchte | ||
+ | mpv "${datei_bildsichrmaufnahme_0}" | ||
+ | |||
+ | # Nacharbeit (1): Video nur schneiden, noch keine Umformatierung (encoding) | ||
+ | ffmpeg -y -i "${datei_bildsichrmaufnahme_0}" \ | ||
+ | -c:v copy -c:a copy \ | ||
+ | -ss 00:00:28 -to 00:14:08 "${datei_bildsichrmaufnahme_geschnitten}" | ||
+ | |||
+ | # Nacharbeit (2): Tondatei zum entrauschen | ||
+ | ffmpeg -y -i "${datei_bildsichrmaufnahme_0}" \ | ||
+ | -ss 00:00:28 -to 00:14:08 "${datei_ton_geschnitten_wav}" | ||
+ | # entrauscht über Audacity: | ||
+ | # (1) Leere Rauschstelle auswählen, Menü: Effects → Noise Reduction → Get Noise Profile | ||
+ | # (2) Alles auswählen, Menü: Effects → Noise Reduction → OK | ||
+ | # (3) Abspeichern siehe Dateiname ${datei_ton_geschnitten_entrauscht_wav} | ||
+ | |||
+ | # Nacharbeit (3): einzelne Tondatei erstellen für die Öffentlichkeit | ||
+ | ffmpeg -y -i "${datei_ton_geschnitten_entrauscht_wav}" \ | ||
+ | -codec:a libvorbis -qscale:a 5 \ | ||
+ | "${datei_ton_geschnitten_entrauscht_ogg}" | ||
+ | |||
+ | # Nacharbeit (4): verrauschte (erste) Filmaufname mit entrauschter Tondatei vereinen | ||
+ | ffmpeg -i "${datei_bildsichrmaufnahme_geschnitten}" \ | ||
+ | -i "${datei_ton_geschnitten_entrauscht_wav}" \ | ||
+ | -c:v copy \ | ||
+ | -c:a aac \ | ||
+ | -map 0:v:0 \ | ||
+ | -map 1:a:0 \ | ||
+ | "${datei_bildsichrmaufnahme_geschnitten_entrauscht}" | ||
+ | </syntaxhighlight> | ||
== Anmerkungen == | == Anmerkungen == | ||
Zeile 237: | Zeile 498: | ||
[[Kategorie: Bildschirmaufnahmen]] | [[Kategorie: Bildschirmaufnahmen]] | ||
[[Kategorie: Programme in Kommandozeile]] | [[Kategorie: Programme in Kommandozeile]] | ||
+ | [[Kategorie:Audiobearbeitung]] |
Aktuelle Version vom 29. September 2023, 13:48 Uhr
Zusammenfassung – Bildschirmaufnahmen vermittels Kommandozeile: Ein Beitrag, der sich an „Fortgeschrittene“ richtet, die den Umgang mit der Kommandokonsole 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? (Open-Source: Ton: OGA, Film OGV z. B. für dieses Wiki oder Wikipedia; bei YouTube: MP4)
- Hinweis zur Schnelligkeit (aber noch zu auszuloten, zu prüfen): bei Zielformat MP4 war eine MKV-Aufnahme mit Angabe des Videodecoder meistens flüssiger verlaufen als direkt im MP4, letzteres verlangsamte den Computer
Fenstergrößen herausfinden
Eine einfache Möglichkeit, einen wunschgemäßen Aufnahmerahmen zu bekommen, ist ImageMagick als Hilfsprogramm zu verwenden, damit können wir einen Rahmenbereich auf dem Bildschirm abzeichnen, in dem wir dann später aufnehmen wollen:
import PNG:- | identify PNG:- | perl -ne '/ (\d+x\d+) \d+x\d+[-+](\d+)[-+](\d+) / and print "… -video_size $1 -i :0.0+$2,$3 …\n"'
# … -video_size 1080x650 -i :0.0+229,93 …
# bedeutet:
# … Video Größe 1080x 650y dann -i Bildschirm-Eingang :0.0 und Versatz 229-x und 93-y …
Etwas umfangreicher ist die Möglichkeit gezielt die Fenstergrößen aufzeigen:
wmctrl -lG
# links-oben Breite × Höhe Fenstertitel
# (0+x 0+y) (px-breit px-hoch)
# 0x00c00003 -1 0 742 1366 25 localhost.localdomain xfce4-panel
# 0x01c00007 -1 0 0 1366 768 localhost.localdomain Schreibtisch
# 0x04200003 0 0 0 1366 742 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 mity=742
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.
Tonaufnahmen
Tonaufnahme als OGA (OGG-Audio)
Einzelne Tonaufnahme von Computerprogrammen und Mikrophon, hier nach OGA (für schnelle Computer):
# Einzelne STEREO-Datei erstellen
# cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname='Tonaufnahme'
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y \
-loglevel warning \
-f pulse -i "$klanggeraet_computer" \
-f pulse -i "$klanggeraet_mikrophon" \
-filter_complex amix=inputs=2 \
"${dateiname}_Stereo_${datumzeit}.oga"
# 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
Einzelne Datei als MONO Datei (für schnelle Computer):
# Einzelne MONO-Datei erstellen
# cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname='IT-Plenumsentscheid'
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y \
-loglevel warning \
-f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_computer" \
-f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_mikrophon" \
-filter_complex amix=inputs=2 \
"${dateiname}_Mono-${datumzeit}.oga"
# WICHTIG Aufnahme beenden mit q WICHTIG
# zusätzliche Kommando-Optionen erklärt:
# -ac 1 bedeuten “ac=audio channel“ 1, also nur 1 Tonkanal
# das ergibt MONO je Geräteeinfluß (hier: Computer=analog-stereo.monitor + Mikro=analog-stereo)
Getrennte Dateien je Aufnahme-Kanal, also für langsamere Computer (Mikrophon-Klang getrennt von Computer-Klang):
# cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname='IT-Plenumsentscheid'
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y \
-loglevel warning \
-f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_computer" \
-f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_mikrophon" \
-map 0:a:0 "${dateiname}_${datumzeit}-Ton-Computer-Mono.oga" \
-map 1:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon-Mono.oga"
# WICHTIG Aufnahme beenden mit q WICHTIG
# ---------- 2 Dateien zusammenfügen zu einer
nice -n 19 ffmpeg -y \
-i "${dateiname}_${datumzeit}-Ton-Computer-Mono.oga" \
-i "${dateiname}_${datumzeit}-Ton-Mikrophon-Mono.oga" \
-filter_complex amix=inputs=2 \
-metadata title="IT Plenumsentscheid (OSEG)" \
-metadata year="2022" \
-metadata description="Besprechung über IT Sachen und Beschluß über dies und das ..." \
"${dateiname}_${datumzeit}-Ton-zusammengefügt.oga"
Tonaufnahme als MP3
# cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y \
-loglevel warning \
-f pulse -i "$klanggeraet_computer" \
-f pulse -i "$klanggeraet_mikrophon" \
-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 1366x742
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/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname="TestBildschirmaufnahme"
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y -video_size 1366x742 -framerate 25 -f x11grab -i :0.0 \
-show_region 1 -loglevel warning \
-f pulse -i "$klanggeraet_computer" \
-f pulse -i "$klanggeraet_mikrophon" \
-ac 2 \
-filter_complex amix=inputs=2 \
"${dateiname}_${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
- bei Endformat MP4 war direktes MP4-Aufnehmen z. T. sehr sehr zäh und verlangsamte alles (bei 8GB RAM Linux Manjaro Virtuelle Maschine), jedoch Aufnehmen in MKV, empfohlen aus anderer Quelle[2] mit
-vcodec … Videodatei.mkv
lief sehr flüssig – daher sind folgende Beispiele in MKV gegeben und gegebener Videokodierung-vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0
# Aufnahme in 3 Dateien - verbessert thread_queue_size (?Puffer):
# cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname="TestBildschirmaufnahme"
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y -video_size 1366x742 -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 "$klanggeraet_computer" \
-f pulse -thread_queue_size 4096 -ac 2 -i "$klanggeraet_mikrophon" \
-vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 \
-map 0:v:0 "${dateiname}_${datumzeit}-Bildschirm.mkv" \
-map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \
-map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \
&& echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m"
# WICHTIG Aufnahme beenden mit q WICHTIG
# Aufnahme in 3 Dateien (ohne thread_queue_size)
# cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname="TestBildschirmaufnahme"
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y -video_size 1366x742 -framerate 25 -f x11grab -i :0.0 \
-show_region 1 -loglevel warning \
-f pulse -ac 2 -i "$klanggeraet_computer" \
-f pulse -ac 2 -i "$klanggeraet_mikrophon" \
-vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 \
-map 0:v:0 "${dateiname}_${datumzeit}-Bildschirm.mkv" \
-map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \
-map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \
&& echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m"
# WICHTIG Aufnahme beenden mit q WICHTIG
Bildschirmaufnahme mit Kopfhörer
Hier ein Beispiel mit Kopfhörer (das Mikrophon ist nur mono) …
pactl list short sources | column -t
# Computer
# 0 alsa_output.pci-0000_02_02.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
# 1 alsa_input.pci-0000_02_02.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
# Kopfhörer
# 2 alsa_output.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
# 3 alsa_input.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.mono-fallback module-alsa-card.c s16le 1ch 44100Hz SUSPENDED
… und es wird in MKV-Format aufgenommen, das später auch in MP4 umgewandelt werden kann. Im folgenden Beispiel
- wurde für das Mono-Mikrophon
-ac 1
angegeben - wurde die Fläche ohne Statusleiste aufgenommen (
-video_size 1920x1060
; mit Statusleiste wäre hier-video_size 1920x1104
) - wurde für die Videoaufnahme genauer vorgeschrieben (kann man sicher noch optimieren)
# Schritt 1 Bildschirmaufnahme in MKV
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname='Netzwerktreffen über Zoom'
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.usb-GN_Netcom_A_S_Jabra_EVOLVE_LINK_MS_000312255EB608-00.mono-fallback
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -y -video_size 1920x1060 -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 "$klanggeraet_computer" \
-f pulse -thread_queue_size 4096 -ac 1 -i "$klanggeraet_mikrophon" \
-vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 \
-map 0:v:0 "${dateiname}_${datumzeit}-Bildschirm.mkv" \
-map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \
-map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \
&& echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m"
# Wichtig: beenden mit q
# ---------- Schritt 2 Zusammenfügen
datumzeit=20220411-1254
dateiname='Netzwerktreffen über Zoom'
nice -n 19 ffmpeg -y -i "${dateiname}_${datumzeit}-Bildschirm.mkv" \
-i "${dateiname}_${datumzeit}-Ton-Computer.aac" \
-i "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \
-filter_complex amix=inputs=2 \
-metadata title="Netzwerktreffen Thema Dienstbesprechung" \
-metadata year="2022" \
-metadata description="Ausprobieren was geht …" \
"${dateiname}_${datumzeit}-Bild-und-Ton.mp4"
Zusammenfügen einzelner Aufnahmen
# Aufnahme der 3 Dateien zusammenfügen (mit Überschreibung der Zieldatei):
# Aufnahmedatei war mit -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 -threads 0 ….mkv
# cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=20220119-1500
dateiname="TestBildschirmaufnahme"
# ---------- Dateien zusammenfügen
nice -n 19 ffmpeg -y -i "${dateiname}_${datumzeit}-Bildschirm.mkv" \
-i "${dateiname}_${datumzeit}-Ton-Computer.aac" \
-i "${dateiname}_${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 …" \
"${dateiname}_${datumzeit}-Bild-und-Ton.mp4"
# mit ffplay abspielen
ffplay "${dateiname}_${datumzeit}-Bild-und-Ton.mp4"
# mpv "${dateiname}_${datumzeit}-Bild-und-Ton.mp4"
Anwendungsbeispiele aus dem Alltag
Bildschirmaufnahme in getrennte Dateien
cd ~/Videos/Bildschirmaufnahmen/
# ---------- Variablen selbst anpassen
datumzeit=$(date '+%Y%m%d-%H%M')
dateiname="Video bei YoutTube herunterladen"
# Bezeichnung technischer Geräte für Klang/Ton:
klanggeraet_computer=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
# ---------- Aufnahme vermmittels ffmpeg
ffmpeg -video_size 1366x742 -framerate 25 \
-show_region 1 -loglevel warning -probesize 42M \
-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 "${dateiname}_${datumzeit}-Bildschirm.mp4" \
-map 1:a:0 "${dateiname}_${datumzeit}-Ton-Computer.aac" \
-map 2:a:0 "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" \
&& echo -e "\e[35mAufnahmezeitdatum für BASH:\e[0m \e[34mdatumzeit=$datumzeit\e[0m"
# datumzeit=20220218-1902 # war 20220218-1902
Video zusammenfügen:
- Start bei 00:00:16.5
- Ende bei 00:04:51 (Gesamtvideo war 00:04:54.66)
- sklaliere das Video auf 1920x1080, weil es bei YouTube auch als „HD“ Video angenommen werden soll (beließe man es bei 1366x742, dann ist die YouTube-Qualität stärker verschwommen als das Urvideo tatsächlich aufweist)
- füge Metadaten dem Video ein
ffprobe "Video bei YoutTube herunterladen_20220218-1902-Bildschirm.mp4" # Videodaten des Urvideos anzeigen lassen
# Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Video bei YoutTube herunterladen_20220218-1902-Bildschirm.mp4':
# Metadata:
# major_brand : isom
# minor_version : 512
# compatible_brands: isomiso2avc1mp41
# encoder : Lavf57.83.100
# Duration: 00:04:54.66, start: 0.000000, bitrate: 286 kb/s
# Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 1366x742, 283 kb/s, 25.67 fps, 25.67 tbr, 19712 tbn, 51.33 tbc (default)
# Metadata:
# handler_name : VideoHandler
datumzeit=20220218-1902
dateiname="Video bei YoutTube herunterladen"
cd ~/Videos/Bildschirmaufnahmen/
nice -n 19 ffmpeg -y \
-i "${dateiname}_${datumzeit}-Bildschirm.mp4" \
-i "${dateiname}_${datumzeit}-Ton-Computer.aac" \
-i "${dateiname}_${datumzeit}-Ton-Mikrophon.aac" -ac 2 \
-filter_complex "[1]afade=type=out:start_time=287:duration=4[TonCompAusblenden];\
[2]afade=t=out:st=287:d=4[TonMikroAusblenden];\
[TonCompAusblenden][TonMikroAusblenden]amix=inputs=2" \
-ss 00:00:16.5 -to 00:04:51 \
-preset faster -pix_fmt yuv420p -maxrate 5000K -bufsize 5000K \
-vf scale=1920x1080:flags=lanczos -movflags +faststart -b:a 160k \
-metadata title="Video bei YoutTube herunterladen (18. Hornung (Februar) 2022)" -metadata year="2022" -metadata description="Kurzanleitung für Firefox Erweiterung (=Add-On) „Easy Youtube Video Downloader Express“ zum herunterladen von YoutTube Videos." \
"${dateiname}_${datumzeit}-Bild-und-Ton.mp4"
Erklärungen
- Zeitbemessung:
-filter_complex
hat spezielle Syntax und allgemein wird ein Filter so angegeben[EINGANGS-i-INDEX]filtername=var1=wert1:var2=wert2[BEZEICHNUNG-Weiterleitung]
… und dies kann kombiniert werden. Hier ist-i "${dateiname}_${datumzeit}-Ton-Computer.aac"
die 2. Eingangsdatei von allen drei-i
, aber da ffmpeg den Eingangs-Index bei 0 anfängt, und von 0, 1 und 2 hochgezählt wird, müssen wir [1] angeben für die 2. Eingangsdatei:[1]afade=type=out:start_time=287:duration=4[TonCompAusblenden]
bedeutet:afade
→ Audio-Filter zum ausblenden, Startzeit bei 287 Sekunden (es geht ja bis 00:04:51, also 291 Sekunden minus 4 Sekunden zum Ausblenden ergibt eine Startzeit bei 287 Sekunden), Dauer des Ausblendens 4 Sekunden;[2]afade=t=out:st=287:d=4[TonMikroAusblenden]
ist dasgleiche in Kurzschreibweise für den Ton des Mikrophons;[TonCompAusblenden][TonMikroAusblenden]amix=inputs=2
führt beide bezeichneten Weiterleitungskanäle zusammen
- die Angaben für die Videoneuverarbeitung (
-preset faster … -vf scale=1920x1080:flags=lanczos -movflags +faststart -b:a 160k
sind Netzfunde; Details siehe englische Dokumentation der Videofilter https://ffmpeg.org/ffmpeg-filters.html#Video-Filters) -metadata title
und-metadata description
fügt Videotitel und Viedeobeschreibung in das Video hinein
Ein Beispiel einer Vorlesung – vom Bildschirm abgelesen aus Eberhard (1795, Bd.1) – hier die Schritte:
- Bildschirmfläche bestimmen
- Video mit allen Metadaten und Bildschirmaufnahme mit MKV Format aufnehmen
- wichtig ist, die Bild/Ton-Formate zu nehmen, die “native” für ffmpeg sind, also komplizierte Formatumwandlungen (encoding) während der Aufnahme tunlichst vermeiden
- in dieser Aufnahme wird der Ton mit dem Mono-Mikrophon Sennheiser MKE Essential Omni aufgenommen, was nur einen linken Tonkanal ausgibt, damit auch wirklich nur der linke Kanal aufgenommen wird, ist die komplizierte Geschichte mit
-filter_complex "[1:a]pan=mono|c0=FL[mikro_mono] "
,FL
heißt Front Left,[1:a]
bezeichnet die Nummer des Eingangskanals (es ist ein 0-Index, also bezieht sich 1 auf den Zweit-angegebene Eingangskanal der-i
Optionen) - Computerprogramm-Klänge werden hier nicht berücksichtigt
- Videoaufnahme anschauen (für Zeitpunkte, wo geschnitten werden soll)
- Nachberarbeiten:
- zeitlich beschneiden
- entrauschen (über Audacity)
- Video mit entrauschtem Ton zusammenfügen
Die folgende Aufnahme bekommt eine hohe Datenqualität (vielleicht zu umfangreich für manche Veröffentlichung im Netz, man könnte die Qualität weiter abändern durch folgende Einstellmöglichkeiten: die Rate der Sekundenbilder: -r 25
(25 je Sekunde; also weniger würde dann ruckeliger), oder -preset medium
[3], oder die Qualität des Videos -qscale:v 5
spielerisch verändern, also welche Qualitätsstufe erwirkt welche Dateigröße, Pixeligkeit des Films usw.)
# (0) Vorarbeit: Den Bildschirmbereich auswählen mit Hilfe ImageMagick
import PNG:- | identify PNG:- | perl -ne '/ (\d+x\d+) \d+x\d+[-+](\d+)[-+](\d+) / and print "-video_size $1 -i :0.0+$2,$3\n"'
# -video_size 1079x651 -i :0.0+229,92
# diese Pixelangaben sind für den ffmpeg Befehl gedacht, es bedeutet:
# 1079x651 ist x(Breite)=1079 y(Höhe)=651
# -i :0.0+229,92 ist input (Bildschirm-Nummer) :0.0 + (Versatz-Pixel-von-Links weg) 229, (Versatz-Pixel-von-oben) 92
### Ablauf
#
# mkv-Aufnahme
# ↓ ↓ Zeitspanne bestimmen (-ss von-wann-Anfang -tt bis wann-Ende)
# ↓ wav-geschnitten → wav-entrauscht
# ↓ ↓
# ↓ ogg-entrauscht
# mkx-Aufnahme + wav-entrauscht → mp4-entrauscht
# ↓
# Ende: mp4-entrauscht + ogg-entrauscht erstellt
#
### Werte für Befehle
klanggeraet_mikrophon=alsa_input.pci-0000_00_1b.0.analog-stereo
datumzeit=$(date '+%Y%m%d')
dateiname_anfang="Lesung Eberhard (1795, S. 47f; bsb10583552) ~ albern, dumm, einfältig usw."
datei_bildsichrmaufnahme_0="${dateiname_anfang}_${datumzeit}-Bildschirm.mkv"
datei_bildsichrmaufnahme_geschnitten="${dateiname_anfang} (${datumzeit}).mkv"
datei_bildsichrmaufnahme_geschnitten_entrauscht="${dateiname_anfang} (${datumzeit})_entrauscht.mp4"
datei_ton_geschnitten_wav="${dateiname_anfang} (${datumzeit}).wav"
datei_ton_geschnitten_entrauscht_wav="${dateiname_anfang} (${datumzeit})_entrauscht.wav"
datei_ton_geschnitten_entrauscht_ogg="${dateiname_anfang} (${datumzeit})_entrauscht.ogg"
cd ~/Videos/Bildschirmaufnahmen/
# geht sehr gute Lautstärke (-r 30 wird doch sehr groß, -r 25 vielleicht ausreichend)
ffmpeg -y -show_region 1 -r 25 \
-f x11grab -thread_queue_size 1024 -video_size 1080x650 -i :0.0+229,93 \
-f pulse -i "${klanggeraet_mikrophon}" \
-filter_complex "[1:a]pan=mono|c0=FL[mikro_mono] " \
-vcodec mpeg4 \
-acodec pcm_s16le \
-preset medium \
-qscale:v 5 \
-map 0 \
-map "[mikro_mono]" \
-metadata title="${dateiname_anfang}" \
-metadata date="1795" \
-metadata artist="Johann August Eberhard" \
-metadata album="Lesung Johann August Eberhards Versuch einer allgemeinen deutschen Synonymik" \
-metadata genre="Speech" \
-metadata keywords="albern, dumm, einfältig, Albernheit, Dummheit, Einfalt" \
-metadata comment="Vorlesung aus Eberhard (1795, Seite 47f) über die Begriffe albern, dumm, einfältig. Albernheit, Dummheit, Einfalt. Quelle: https://mdz-nbn-resolving.de/urn:nbn:de:bvb:12-bsb10583552-0 (Bayerische Staatsbibliothek)."\
"${dateiname_anfang}_${datumzeit}-Bildschirm.mkv"
# Anschauen, an welchen Zeitmarken man schneiden möchte
mpv "${datei_bildsichrmaufnahme_0}"
# Nacharbeit (1): Video nur schneiden, noch keine Umformatierung (encoding)
ffmpeg -y -i "${datei_bildsichrmaufnahme_0}" \
-c:v copy -c:a copy \
-ss 00:00:28 -to 00:14:08 "${datei_bildsichrmaufnahme_geschnitten}"
# Nacharbeit (2): Tondatei zum entrauschen
ffmpeg -y -i "${datei_bildsichrmaufnahme_0}" \
-ss 00:00:28 -to 00:14:08 "${datei_ton_geschnitten_wav}"
# entrauscht über Audacity:
# (1) Leere Rauschstelle auswählen, Menü: Effects → Noise Reduction → Get Noise Profile
# (2) Alles auswählen, Menü: Effects → Noise Reduction → OK
# (3) Abspeichern siehe Dateiname ${datei_ton_geschnitten_entrauscht_wav}
# Nacharbeit (3): einzelne Tondatei erstellen für die Öffentlichkeit
ffmpeg -y -i "${datei_ton_geschnitten_entrauscht_wav}" \
-codec:a libvorbis -qscale:a 5 \
"${datei_ton_geschnitten_entrauscht_ogg}"
# Nacharbeit (4): verrauschte (erste) Filmaufname mit entrauschter Tondatei vereinen
ffmpeg -i "${datei_bildsichrmaufnahme_geschnitten}" \
-i "${datei_ton_geschnitten_entrauscht_wav}" \
-c:v copy \
-c:a aac \
-map 0:v:0 \
-map 1:a:0 \
"${datei_bildsichrmaufnahme_geschnitten_entrauscht}"
Anmerkungen
- ↑ siehe Anleitung ähnlich https://gist.github.com/adrianolsk/bfa32f3227dc674eff72a2008f6c0316#file-fix-microphone-background-noise-sh
- ↑ SCREEN CAPTURE, RECORDING, CASTING A - 2020 (Bildschirmaufnahme, Aufnehmen, Besprechung A - 2020). Quellen: https://www.bogotobogo.com/FFMpeg/ffmpeg_video_screencasting_screen_recording_capture.php, (Besprechung B https://www.bogotobogo.com/FFMpeg/ffmpeg_video_screencasting_screen_recording_capture_active_current_top_window.php) abgerufen am 11. Ostermonat (April) 2022
- ↑ Voreinstellungen (preset) siehe: trac.ffmpeg.org/wiki/Encode/H.264#Preset → Abschnitt 2. Wähle eine Voreinstellung (preset) und stelle ein (…) Eine Voreinstellung ist eine Sammlung von Optionen, die ein bestimmtes Verhältnis zwischen Kodierungsgeschwindigkeit und Komprimierung bieten. Eine langsamere Voreinstellung bietet eine bessere Komprimierung (Komprimierung ist Qualität pro Dateigröße). Das bedeutet, daß man zum Beispiel bei einer bestimmten Dateigröße oder konstanten Bitrate mit einer langsameren Voreinstellung eine bessere Qualität erreicht. Bei konstanter Qualität spart man einfach Bitrate, wenn man eine langsamere Voreinstellung wählt. Man nimm (am besten) die langsamste Voreinstellung, für die man (noch) Geduld hat. […]