Springe zum Inhalt

PulseAudio: Audio-Stream von Programmen aufnehmen

Mit PulseAudio ist es relativ einfach, den durch Programme generierten Soundstream aufzunehmen. Sei es nun das Youtube-Video, von dem man gerne den Sound speichern möchte oder sei es der Sound-Output von Spielen, welche man vielleicht nachher als Let's-Play veröffentlichen möchte. Früher musste dazu zuerst umständlich der Monitor-Kanal der Soundkarte aktivieren werden und dann konnte von dort aufgenommen werden. Ebenfalls durften keine anderen Audiosignale, wie z.B. irgendwelche Benachrichtigungen eingemischt werden, solange der Sound aufgenommen wurde. Ein aktuelles PulseAudio ist da wesentlich komfortabler beim Aufnehmen des Sounds.

PulseAudio verwendet Kanäle, die Programme zum Abspielen ihrer Sounds verwenden können. Um nun solche einen Kanal aufzunehmen muss erst einmal die Nummer des jeweiligen Kanals ermittelt werden.

Die folgenden Kommandos wurden unter Mint 18 getestet (Ubuntu 16.04). Die unter Ubuntu 14.04 abweichenden Kommandos hat Arne freundlichweise im ersten Kommentar gepostet.

Mit folgendem Kommando können alle Kanäle der derzeit mit PulseAudio verbunden Programme angezeigt werden:

pacmd list-sink-inputs

Anhand der Beschreibung bzw. des verbundenen Programms ist anschließend der PulseAudio-Index des sogenannten Sinks zu ermitteln. Mithilfe folgenden Kommandos kann dann der Audio-Output dieses einen Kanals aufgenommen und als Datei gespeichert werden:

parec --verbose --monitor-stream=<Index> --file-format=wav recording.wav

Die Aufnahme ist dabei unabhängig von der Einstellung der Lautstärke der Ausgabe. Es wird direkt der Input aufgezeichnet, was insbesondere für ein nachfolgendes Schneiden nützlich ist und auch keine Qualitätsverluste mit sich bringt, da das WAV-Format ein nicht verlustbehaftetes Komprimierungsverfahren ist. Möchte man sofort die Streamausgabe komprimieren, z.B. im OGG-Format, dann kann folgendes Kommando verwendet werden:

parec --verbose --monitor-stream=<Index> | oggencode -b 192 -o record.ogg --raw -

Für MP3 als Ausgabeformat kann statt oggencode lame verwendet werden.

Zum Schluss bleibt nur noch eins zu sagen: beim Kopien aller Werke gilt: beachte das Copyright!

2 Gedanken zu „PulseAudio: Audio-Stream von Programmen aufnehmen

  1. Arne

    Hallo Jens,
    bevor einer deiner Leser mit Ubuntu noch verzweifelt: In der Version sind die Parameter etwas anders. Zumindest unter Ubuntu 14.04, wahrscheinlich aber auch bei anderen Version.

    pacmd list-sink-inputs ist gleich, ich setze noch ein grep dahinter um den Output zu filtern:
    pacmd list-sink-inputs|grep "sink"

    Beispiel Output:
    >>> 1 sink input(s) available.
    sink: 1
    module-stream-restore.id = "sink-input-by-application-name:Firefox"

    Der gesuchte Wert ist also in diesem Fall 1.

    Nun kommt der Unterschied. Statt --monitor-stream= ist hier --device anzugeben.

    Beispiel:
    parec --verbose --device 1 --file-format=wav record.wav

    Wenn man gleich als Ogg speichern will gibt es noch einen Unterschied. Unter Ubuntu heißt der Encoder schlicht oggenc.

    Beispiel:
    parec --verbose --device 1 | oggenc -b 192 -o record.ogg --raw -

    Übrigens ein guter Post von dir Jens, ist einfacher als die Methode die ich bisher genutzt habe. Vielen Dank!

    1. Jens Tautenhahn

      Vielen Dank! Einem selbst fehlen da ja häufig die Testmöglichkeiten. Hab gleich mal einen Hinweis im Artikel angebracht.

Kommentare sind geschlossen.