Aufnehmen unter Linux

  • Hallo,
    Hier folgt ein Tutorial zum Erstellen einer Aufnahme, sowie dem optionalen Encoden selbiger. Eine Bearbeitung der Aufnahme ist nicht vorgesehen.

    Im Grunde gibt es die vielfältigsten Herangehensweisen, die nachher beschriebene halte ich im Moment jedoch für die sinnvollste. Dieses Tutorial erhebt weder den Anspruch auf Richtig- und Vollständigkeit, noch ist es in Stein gemeißelt. Veränderungen im positiven Sinne sind nicht ausgeschlossen.
    Zur Aufnahme verwende ich den SimpleScreenRecorder (im folgenden SSR) von Maarten Baert. Der Vorteil dieses Programms ist zugleich auch das Ausschlusskriterium aller anderen mir bekannten Aufnahmearten: Es kann Vollbild bzw. Fullscreen aufnehmen. Und das auch gleich auf mehrere verschiedene Arten. Das Programm kann direkt OpenGL abgreifen, was jedoch im Moment noch nicht wirklich komfortabel ist. Deswegen gehe ich auf diese Funktion nicht weiter ein.
    Das [lexicon]Encodieren[/lexicon] der Aufnahme ist optional, da man im SSR direkt eine nicht verlustfreie Encodierung einstellen kann. Darauf gehe ich an entsprechender Stelle genauer ein. Zum Bearbeiten bietet sich Kdenlive an. Reines [lexicon]Encodieren[/lexicon] eht im Terminal gut mit ffmpeg und libx264.
    Den Ton richte ich mit PulseAudio und dessen Einstellungsprogramm pavucontrol ein.

    Videotutorial

    Hier werdet Ihr später ein Erklärungsvideo finden können

    [tabmenu]
    [tab='Aufnehmen']
    SSR gestaltet sich denkbar einfach (Woher nur das Simple im Namen kommt?). Die Einstellungen sind nacheinander angeordnet. Es gibt immer Tooltips zu den Einstellungen.

    • Drückt im Willkommensbildschirm erstmal auf weiter. Solltet Ihr hier beim Start eine Warnung bekommen, so nehmt die ernst und stellt die entsprechende Option in den nvidia-settings aus.
    • Als nächstes stellt Ihr die Eingabequellen ein. Wollt Ihr Spielesound und Kommentar aufnehmen, solltet Ihr jetzt zuerst im Tab Ton Einrichten dieses Tutorials vorbeischauen.
      Setzt den Haken für den Ton rein und stellt das Aufnahmemedium auf „default“. Wählt für das Video entweder den gesamten Bildschirm aus, oder stellt euch mit einem festen Rechteck ein Fenster ein (der Knopf „Select window“). Sollte es gewünscht sein, kann das Video auch skaliert werden.
    • Als [lexicon]Container[/lexicon] empfehle ich Matroska (.mkv). Dieser kann viele Formate aufnehmen und ist recht gut anpassbar. Den Speicherort solltet Ihr nicht vergessen einzustellen.
      Als Videocodec empfiehlt sich zur Zeit ganz klar der H.264-Codec. SSR verwendet für ihn den populären x264-Encoder. In Zukunft mit [lexicon]H.265[/lexicon], [lexicon]VP9[/lexicon] und Daala kann das anders aussehen. Als Preset solltet Ihr etwas von veryfast bis ultrafast auswählen, je nachdem, wie leistungsstark eure [lexicon]CPU[/lexicon] ist. Diese Einstellung spiegelt sich nur in der späteren Dateigröße wieder.
      Mit dem Constant Rate Faktor (CRF) müsst Ihr euch für die spätere Qualität des Videos entscheiden. Kleinere Werte ergeben eine bessere Qualität. Die Werte reichen von 0 bis 51. 0 ist dabei verlustfrei. Bis 18 kann man keine optischen Verluste erkennen. Höher als 26 würde ich auf keinen Fall gehen.
      Wenn Ihr euch entscheidet, die Aufnahme im Nachhinein optimiert auf die Dateigröße zu encodieren oder Ihr die Aufnahme später zu bearbeiten, dann wählt hier 0. Entsprechend wählt beim Ton unkomprimiert (uncompressed).
      Wenn Euch die Dateigröße egal ist, wählt einen höheren Wert (nicht wenn Ihr die Aufnahme bearbeiten möchtet). Für den Ton wird generell Vorbis oder [lexicon]FLAC[/lexicon] (unter other) empfohlen. Beides im SSR weniger, da nur eine feste [lexicon]Bitrate[/lexicon] vergeben werden kann. Da euch die Dateigröße egal ist, wählt Vorbis mit *utopischen Wert eintragen* aus.
    • Die Aufnahmeseite.
      Startet die Aufnahme per Klick oder Tastenkombination. Eine Live-Vorschau ist möglich, aber nicht empfohlen.
      Zwischendurch ist eine Pause durch erneutes Drücken möglich.
      Ihr könnt die Aufnhame auch abbrechen (Achtung, alle Daten werden gelöscht!).
      Speichert hinterher eure Aufnahme.
    • Wenn Ihr euch gegen die spätere Encodierung entschieden habt, seid Ihr nun fertig und könnt euer Video hochladen. Andernfalls fahrt mit dem encodieren fort.
      Bilder

    [tab='Encodieren']

    Mit Kdenlive

    Kdenlive bietet den Komfort der grafischen Bearbeitung. Es bietet vielfältige Bearbeitungsfunktionen, die ihr euch zusammensuchen solltet.
    Nach der Bearbeitung klickt ihr "Rendern".Ausgabe ist natürlich eine Videodatei. Fügt dort ein neues H.264-Profil hinzu. Die Endung ist mkv. Als Parameter tragt ihr

    Code
    f=matroska pix_fmt=yuv420p c:v=libx264 preset=fast crf=21 threads=auto x264opts=keyint=infinite:min-keyint=1 c:a=libvorbis qscale:a=7 ar=44100 ac=2

    ein. Folgende Felder leert ihr.

    Vor dem Encodieren bearbeitet ihr dann nur im Profil die Werte preset und crf nach euren Bedürfnissen (oder legt einzelne Profile an).
    Es lassen sich auch Skripte für später erstellen oder einzelne Teilstücke encodieren (praktisch für Parts).

    Im Terminal

    Das [lexicon]Encodieren[/lexicon] kann man auch im Terminal vornehmen. Ich greife auf ffmpeg mit folgendem Befehl zurück:

    Code
    ffmpeg -i $1 -c:v libx264 -preset slow -x264opts keyint=infinite:min-keyint=1 -crf 18 -threads auto -c:a libvorbis -qscale:a 7 -r 25 $2
    Erklärung
    • ffmpeg ist das Programm
    • Auf -i folgt die Eingabedatei (input - das kann auch ein Stream sein)
    • $1 ist ein Platzhalter für den /Pfad/zu/Eurer/Datei.mkv
    • Auf -c:v folgt der Ausgabevideocodec (veraltet -vcodec)
    • libx264 ist die verwendete Videocodecbibliothek
    • Auf -preset folgt das gewünschte Preset
      Hier ruhig etwas langsamer nehmen, langsamer spricht meißt für eine kleinere Dateigröße.
    • slow ist das gewählte Preset
    • Auf -x264opts folgen spezielle Optionen für den x264-Encoder
    • keyint=infinite:min-keyint=1 setzt die maximale Länge, nachdem ein I-Frames kommen muss (GOP)
      Hier bedeutet der Ausdruck, dass mindestestens 1 I-Frame existieren muss, weitere können, müssen aber nicht existieren.
      [lexicon]x264[/lexicon] setzt I-Frames immer dann wenn es sinnvoll ist.
      Nachteil ist, dass Ihr das spätere Video nur langsam spulen könnt. (Dies gilt nicht für YT)
    • Auf -crf folgt der Qualitätsfaktor
    • 18 ist der Qualitätsfaktor
      Wählt hier einen für euch passenden Wert größer 0 (Siehe unter Aufnahme Punkt 3).
    • Auf -threads folgt die Anzahl der gleichzeitigen threads
    • auto überlässt ffmpeg die Auswahl (entspricht meißt der Anzahl der CPU-Kerne
    • Auf -c:a folgt der Audiocodec (veraltet -acodec)
    • libvorbis ist die verwendete Audiocodecbibliothek
      Wer mehr Qualität möchte kann hier auch flac eintragen.
    • Auf -qscale:a folgt der Audioqualitätsfaktor
    • 7 ist der Audioqualitätsfaktor
      Werte reichen von 0 bis 10. Größer ist besser.
    • -r 25 setzt die FPS des Ausgangsvideo auf 25
    • $2 ist ein Platzhalter für Euren/Pfad/zur/Datei.mkv

    Ersetzt einfach die Platzhalter $1 und $2 und führt den befehl im Terminal aus.

    Noch einfacher wird es, wenn Ihr einen Alias einsetzt:

    Vereinfachung

    Tragt in Eure ~/.bashrc folgendes am Ende ein:

    Code
    #Konvertierung für YT
    youtubeConvert()
    {
      ffmpeg -i $1 -vcodec libx264 -preset slower -x264opts keyint=infinite:min-keyint=1 -crf 18 -threads auto -acodec libvorbis -qscale:a 7 -r 25 $2.mkv
    }
    
    
    alias ytconvert=youtubeConvert


    Die Funktions- und Aliasnamen sind hierbei (fast) frei anpassbar. Für dieses Beispiel reicht nach einem erneuten Login in Zukunft als Aufruf

    Code
    ytconvert /Pfad/zur/Eingabedatei.mkv /Pfad/zur/Ausgabedatei


    [tab='Ton einrichten']Damit gleichzeitig Ton aus mehreren Kanälen aufgenommen wird, schleifen wir die Kanäle über einen Ausgang in SSR.

    Schema

    Inzwischen kann ich die einfache Methode nicht mehr empfehlen.
    Nach längerer Zeit setzen komische pulsierende Geräusche ein, alles sehr Merkwürdig.

    Das Schema bleibt das Gleiche, jedoch verwende ich nun Jack um die Verbindungen zu erstellen. SSR bekommt auch kann später auch selber mit Jack umgehen.
    Bis jetzt funktioniert das jedenfalls besser - auch bei längeren Aufnahmen.
    Zum Konfigurieren kommt später was. QjackCtl ist hier das Programm der Wahl.

    Einfache Methode


    Dazu müssen wir erst ein virtuelles Ausgabegerät erstellen, zu dem wir die späteren Kanäle schicken:

    Code
    pactl load-module module-null-sink sink_name=mix

    Danach legen wir soviele virtuelle Schleifen an, wie wir Kanäle zusammenfügen wollen:

    Code
    pactl load-module module-loopback sink=mix
    pactl load-module module-loopback sink=mix
    …

    In pavucontrol stellt Ihr nun zu den jeweiligen Loopback-Kanälen ein, welcher Kanal durchgereicht werden soll. (Eventuell unten alle sichtbar schalten) Startet nun eine Aufnahme, damit die Tonaufnahme von SSR in pavucontrol erscheint und stellt dort den Monitor vom Null-Ausgang ein.

    Wenn Ihr Aufnahmen öfter machen möchtet (sollte eigentlich der Regelfall hier sein), solltet Ihr diese Änderungen noch permanent vornehmen.
    Dazu kopieren wir uns erstmal, sollte sie noch nicht existieren, eine Benutzerkonfigurationsdatei für Pulse:

    Code
    cp /etc/pulse/default.pa ~/.pulse/

    Am Ende dieser werden nun die vorherigen Befehle ohne pactl eingetragen:

    Code
    load-module module-null-sink sink_name=mix
    load-module module-loopback sink=mix source=alsa_output.pci-0000_03_04.0.analog-surround-51.monitor channels=2
    load-module module-loopback sink=mix source=alsa_input.pci-0000_03_04.0.analog-stereo
    …

    Nach einem erneuten Login sollten die Module dauerhaft verfügbar sein.
    Mit source= definiere ich hier eine spezielle Quelle - in diesem Fall bei mir Monitor und [lexicon]Mikrofon[/lexicon] der Xonar DX.

    Bilder

    [/tabmenu]

    Quellen

    6 Mal editiert, zuletzt von Lucki (3. Januar 2014 um 14:08) aus folgendem Grund: Automatische Tonkonfiguration verbessert Hinweis auf Jack

  • Sehr interessanten Tutorial, villeicht kann ich dann (wenn sich die Spieleentwickler mal beeilen mit den Spielen) auch wieder zurück auf Linux gehen.
    Die Möglichkeit (wie bei den üblichen Windows Programmen) ein Fenser aufzunehmen (halt das Spiel) und selbst, wenn ein anderes Fenster das Spiel überdeckt weiterhinn nur das Spielfenster aufzunehmen?
    Ich denke mal das währe diese Ogen GL Funktion.

    Also sobeld die Spiele da sind und diese Open GL Funktion nutzbar könnte ich mir den tram mal erfüllenund wieder ein vollständiger Linux nutzer werden.

  • Ja, das ist die OpenGL-Funktion.
    Wie geschrieben ist die leider nicht wirklich praktikabel, weil man einen Preload mit GL-Inject ausführen muss.
    Dann haben aber die Hotkeys nicht mehr funktioniert, wodurch das Problem entsteht, dass man nicht mehr aus dem Spiel herauskommt und man die Aufnahme nicht mehr starten kann. Ferner ändert sich Inject-Nummer bei jeder neuen SSR-Aufnahme.
    Folglich sieht diese Aufnahmeart folgendermaßen aus: Spiel starten -> Spiel beenden (bis hierhin, damit das GL-Inject für die Aufnahme existiert) -> Aufnahme starten -> Spiel starten -> spielen -> Spiel beenden -> Aufnahme beenden.

    Bei mir sind bisher knapp die Hälfte meiner Spiele bei Steam für Linux verfügbar.

  • Du kannst mit jedem [lexicon]Codec[/lexicon] aufnehmen, den du installiert hast.

    P.S.: Die Aufnahme mit GlInject (OpenGL) kann man sich mit folgenden Skripten wesentlich vereinfachen: https://github.com/MaartenBaert/ssr/issues/54#issue-21297816
    Sinnvoll ist es zusätzlich folgenden Rat zu befolgen, um das [lexicon]Steam[/lexicon]-Overlay wieder mitzuladen: https://github.com/MaartenBaert/s…omment-33685859

    Einmal editiert, zuletzt von Lucki (13. März 2014 um 16:00)

  • Gibt es denn vernünftige Codecs, die unter Linux auch ihre Unterstrützung finden?
    lagerith gibts schonmal nicht...
    Danke für die Tipps.

  • Ja, [lexicon]Lagarith[/lexicon] gibt es nur für Windows.
    Doch wofür brauchst du den?
    [lexicon]x264[/lexicon] nimmt mit [lexicon]crf[/lexicon] = 0 (früher qp = 0) verlustfrei auf und je nachdem, wie schnell deine [lexicon]CPU[/lexicon] ist, kannst du mit den Presets eine höhere oder niedrigere Kompression fahren.

    Hm, scheinen nicht alle installierten unterstützt zu werden… ffmpeg muss die auch noch können. Sonst wären Daala und [lexicon]h.265[/lexicon] schon in der Liste.

    Codecs

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!