BLog

ImprintImpressum
PrivacyDatenschutz
DisclaimerHaftung
Downloads 

Screencasting mit ffmpeg unter FreeBSD

Es ist wie immer, man bekommt die Erfahrung erst nachdem man sie dringendst benötigte. So auch bei diesem Thema. Oder anders herum, wenn man einmal weiß wie es geht, dann ist auch Screencasting mit ffmpeg(1) unter FreeBSD einfach. Bevor ich das aber alles wieder vergesse, notiere ich die Erkenntnisse noch schnell hier in meinem BLog.

Mikrofoneingänge und Gerätekennungen

Die Mikrofoneingänge bei PC’s sind die rosafarbenen Buchsen. Ich stöpsele also das Mikro in die rosa Buchse auf der Rückseite und die folgenden Terminal-Kommandos sagen mir, daß /dev/dsp0 die dazugehörige Gerätekennung ist - s.a. sound(4):

# cat /dev/sndstat

Installed devices:
pcm0: <Realtek ALC892 (Rear Analog)> (play/rec) default
pcm1: <Realtek ALC892 (Front Analog)> (play/rec)
pcm2: <Intel Kaby Lake (HDMI/DP 8ch)> (play)
No devices installed from userspace.

# ls -1 /dev/dsp*

/dev/dsp0.0
/dev/dsp1.0
/dev/dsp2.1

Man muß sich jetzt nur noch dazu denken, daß /dev/dsp0 zu pcm0 gehört, so wie dsp1 zu pcm1, etc.

Mit dem mixer(8)-Dienstprogramm schaut man sich die Zuordnungen und Pegel der Soundkarten-Ein- und Ausgänge an:

# mixer

Mixer vol      is currently set to 100:100
Mixer pcm      is currently set to 100:100
Mixer speaker  is currently set to  74:74
Mixer line     is currently set to   1:1
Mixer mic      is currently set to  67:67
Mixer mix      is currently set to  74:74
Mixer rec      is currently set to  35:35
Mixer igain    is currently set to 100:100
Mixer ogain    is currently set to 100:100

Der wichtige Punkt ist, daß die Pegel des Mikrofoneingangs nicht 0 sind und deutlich unter 100 % liegen. Die 2/3-Aussteuerung ist ein guter Kompromiss zwischen Eingangslautstärke und noch erträglichem Hintergrundrauschen. Wenn man dagegen die Mic-Pegel auf 100 setzt, dann muß man mit unangenehmem Rauschen in seinen Aufnahmen rechnen. Jedenfalls können die Pegel wie folgt gesetzt werden:

# mixer mic 75:75

Ich bleibe aber bei 2/3:

# mixer mic 67:67

Das Screncasting

Sofern multimedia/ffmpeg noch nicht installiert ist, führt man das folgende Kommando aus:

# pkg install ffmpeg

Ein Screencast wird mit einem ffmpeg-Kommando im Terminal gestartet. Jetzt will man im Normalfall aber nicht, daß die Szene damit beginnt wie mehr oder weniger schnell und geschickt das Terminalfenster aus dem Weg geräumt wird. Man könnte das Pausen-Kommando sleep(1) vor den eigentlichen ffmpeg-Befehl setzen, ich finde es aber praktischer den Screencast über ein ssh(1)-Terminal vom Hintergrund aus zu starten, und man kann nach Absetzen des Kommandos ohne weiteres loslegen.

Wichtig, man muß denselben Benutzer für die ssh-Anmeldung verwenden der uns auch durch den Screencast führt. Das Start-Kommando im ssh-Terminal ist:

% ffmpeg \
  -thread_queue_size 1024 -f x11grab -r 25 -s 1024x768 -i :0.0 \
  -thread_queue_size 1024 -f oss -i /dev/dsp0 \
  -c:v libx265 -tag:v hvc1 /home/rolf/capture.hevc.mp4

  • Damit wird x11grab als Eingang für den Video-Kanal festgelegt. Die Rate soll 25 fps und die Bildgröße 1024 x 768 Punkte betragen.
  • Als Toneingang wird OSS (Open Sound System - FreeBSD-Sound ist dazu kompatibel) - und die Gerätekennung für das o.g. Mikrofon angegeben.
  • Als Video-Encoder verwenden wir H.265 (HEVC), welches dem älteren H.264 darin überlegen ist, daß er wesentlich kleinere Video-Dateien bei gleicher Qualität erzeugt.
  • Apple’s Abspielsysteme können mit HEVC-MP4-Dateien nur etwas anfangen, wenn die Video-Spur das Etikett (tag) hvc1 trägt.
  • Der Screencast wird im Home-Verzeichnis abgespeichert.

Mit der <Enter/Return>-Taste startet der Screencast, und mit <Ctrl><C> wird er beendet.

Video-Vorschau mit dem VLC-Media-Player

Der VLC-Media-Player muß ggf. noch installiert werden:

# pkg install vlc

VLC wird gestartet und man öffnet darin die Screencast-Datei:

Man versichert sich, daß man alles im Kasten hat was man rüberbringen will.

Den Screencast zur Veröffentlichung vorbereiten

Nur die modernen Browser unterstützen H.265, für ältere Browser müssen man auch H264 anbieten. Ausserdem kommt derzeit kein Browser unter macOS mit dem RGB-Farbraum (24bit/Pixel) des soeben erzeugten Videos klar, und vor der Veröffentlichung muß der Farbraum auf YUV420p (12bit/Pixel) reduziert werden. Die Farben sehen danach verwaschener aus, aber damit muß man erst einmal leben, bis vielleicht irgendwann einmal die Pixel-Formate YUV422 (16bit/Pixel) oder gar YUV444 (24bit/Pixel) von den meisten Browsern unterstützt werden. Wir bewahren also auf jeden Fall die Original-Screencast-Datei auf, so daß wir sie später ggf. mit einem besseren Farbraum neu veröffentlichen können.

  1. Erzeugung der H.264-YUV420p Version:
    ffmpeg -i /home/rolf/capture.hevc.mp4 -c:v libx264 -pix_fmt yuv420p \
    -c:a copy /home/rolf/capture.12bit.mp4
  2. Erzeugung der H.265-YUV420p Version:
    ffmpeg -i /home/rolf/capture.hevc.mp4 -c:v libx265 -pix_fmt yuv420p -tag:v hvc1 \
    -c:a copy /home/rolf/capture.hevc12bit.mp4

Die beiden Dateien werden auf den Web-Server hochgeladen und mit dem folgenden HTML-Code auf die Web-Seite eingebunden:

<video controls height="504" width="672">
   <source src="articles/static/1577324342/capture.hevc12bit.mp4" type="video/mp4;codecs=hvc1">
   <source src="articles/static/1577324342/capture.12bit.mp4" type="video/mp4;codecs=avc1">
   <source src="articles/static/1577324342/capture.12bit.mp4" type="video/mp4">
   Mein erster Screencast
</video>

Copyright © Dr. Rolf Jansen - 2019-12-25 22:39:02

Diskussion auf Twitter: 1210080203982229505

PROMOTION