Frage Zeichnen Sie die Ausgabe eines Programms mit PulseAudio auf


Ich möchte eine Ausgabe eines Programms mit aufnehmen Pulseaudio Verwenden von Befehlszeilen- / Bash-Skript. Es ist wichtig, nicht die gesamte Ausgabe aufzuzeichnen, sondern nur die Ausgabe eines bestimmten Programms.

Ich dachte, ich müsste eine neue Null-Senke erstellen und dann die Ausgabe des Programms in diese neue Senke verschieben. Dann sag es parec Verwenden Sie diesen spezifischen Monitor zum Aufzeichnen.

Der erste Schritt wäre etwa so:

pactl load-module module-null-sink sink_name=steam

Aber wie verschiebe ich die Ausgabe des Programms jetzt auf diese Senke?
Und wie zeichnet man die spezifische Senke mit einem Bash-Skript auf?


43
2017-09-10 15:49


Ursprung




Antworten:


Versuchen Sie etwas wie folgt:

In einem Terminal eingeben

pacmd

(dies ist die CLI des PulseAudio-Servers) dann benutze

list-sink-inputs

(wo Sie die Indizes der laufenden Eingaben erhalten) Finde jetzt den Index deiner Eingabe. Jetzt als $ INDEX bezeichnet

Der skriptfähige Teil ist:

pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam
parec -d steam.monitor | oggenc -b 192 -o steam.ogg --raw -

Erklärungen:

  • Der erste Befehl fügt eine Null-Senke hinzu, wie Sie bereits wussten.
  • Der zweite Befehl verschiebt den Senken-Eingang von Ihrer Standard-Audio-Senke in Steam
  • Der dritte Befehl zeichnet den Monitor des Geräte-Steam (-d) auf und setzt die Ausgabe (row-wave-stream) in oggenc, die diesen Wave-Stream in eine Oga-Datei kodiert. (für MP3-Nutzung lahm)

46
2017-09-10 18:10



Brilliant, vielen Dank für diese tolle Antwort! :) - Force
Können Sie mir bitte erklären, wie Sie diese Operation rückgängig machen können? Meine Null-Senken sind immer noch verschiedenen Anwendungen zugeordnet, und jetzt habe ich keinen Ton mehr! - ixtmixilix
@ ixtmixilix: Der einfachste Weg, alle Einstellungen auf die Standardeinstellungen zurückzusetzen, besteht darin, den pulseaudio-Server einfach zu beenden. Wenn Autospawn eingestellt ist (dies ist die Standardeinstellung), geben Sie einfach aus pulseaudio -k in einem Terminal. - Takkat
@ixtmixilix Wenn du rennst list-sink-inputs Beachten Sie die sink Wert. Um zurück zu wechseln, lauf einfach pactl move-sink-input $INDEX $SINK. Etwas wie pactl move-sink-input 4719 1 - Ciaran


Verbesserung Waschtl antwortet von diesem Thread so können Sie BEIDE LISTEN UND AUFZEICHNEN Der App-Sound:

Zuerst suchen wir nach unserer Standardausgabe und geben den Namen der Spüle ein $DEFAULT_OUTPUT:

$ pacmd list-sinks | grep -A1 "* index"
  * index: 1
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
$ DEFAULT_OUTPUT=$(pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+")
$ echo $DEFAULT_OUTPUT
alsa_output.pci-0000_00_1b.0.analog-stereo

Dann erstellen wir ein kombinierte Spüle das hat nur einen Sklaven: $ DEFAULT_OUTPUT. Der von der App (Quelle) erzeugte Ton wird an die Slave-Senke (dh die reale Ausgabe) weitergeleitet, und wir werden sie auch aufnehmen. Es ist anders als a Null Senke wo der Quellenton nicht weitergeleitet wird.

$ pactl load-module module-combine-sink \
  sink_name=record-n-play slaves=$DEFAULT_OUTPUT \
  sink_properties=device.description="Record-and-Play"

sink_properties ist optional und kann Fehler verursachen, wenn Sie Leerzeichen im Beschreibungsnamen verwenden.

Dann könnten wir verwenden pactl move-sink-input ... Befehl von Waschtl antwortet (mit Aufnahme-n-Play Anstatt von Dampf) aber GUI pavucontrol ist einfacher (und gut für die Überprüfung / Fehlerbehebung):

$ sudo apt-get install pavucontrol
$ pavucontrol &

Dann spielen wir etwas Sound in der App, die wir aufnehmen möchten. Im pavucontrol  Wiedergabe Tab, wählen wir in der App Dropdown-Liste: "Record-and-Play".

Endlich können wir gut aufnehmen und gleichzeitig hören! (Lame mp3 Beispiel, im Vordergrund laufen)

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3"

Oder wir können im Hintergrund aufnehmen und jederzeit aufhören:

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3" \
   > /dev/null &1>/dev/null
$ killall -q parec lame

NB:

  • Alles aufheben oder die Prozedur wiederholen: Löschen oder zurücksetzen Sie die Senken mit diese Antwort. pulseaudio -k funktioniert super, um alles auf die Standardeinstellungen der Sitzung zurückzusetzen.
  • Wenn wir die Standardausgabe in den System Sound Settings ändern, wird die Playback-Einstellung der benutzerdefinierten App überschrieben und wir müssen zurück in pavucontrol gehen, um sie auf die kombinierte Oberfläche zurückzusetzen.
  • Um den Ton von mehreren "echten" Interfaces (zB Kopfhörer, HDMI-Ausgang, etc ...) hören zu können, sollten wir alle "echten" Ausgänge, die wir zum Zuhören verwenden können, mit einschließen Aufnahme-n-PlaySlink-Sklaven, wie: pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2.

EDIT: Vorsicht, seit Unbuntu 18 (vielleicht auch 17), die kombinierte Senke neigt dazu, das Standard-System Ausgabegerät, anstelle der realen Ausgabegerät werden. Wenn Sie die Lautstärke über das Sound-Symbol in der Taskleiste ändern, wirkt sich dies auf Ihren Aufnahmesound aus. Problemumgehung: Öffnen Sie nach dem Erstellen der kombinierten Senke pavucontrol in der Registerkarte Ausgabe. Wählen Sie "View: Virtual Output Devices" und stellen Sie die Lautstärke der kombinierten Senke auf 100% zurück. Wählen Sie dann "View: Hardware Output Devices" und drücken Sie auf dem realen Ausgabegerät das grüne Symbol "Als Alternative definieren".


20
2018-01-24 10:41





@ Waschtls Antwort ist fantastisch. @ixtmixilix hat nach dem Beenden der Aufnahme nach dem Wiederherstellen von regulärem Audio gefragt. Hier ist der einfachste Weg, den ich kenne:

Installieren und starten Sie das pavucontrol GUI. Sie sollten Ihre Anwendung zur Audioausgabe und den Lautstärkemesser unter sehen Wiedergabe Tab dort ein. Es wird einen Knopf daneben geben, der anzeigt, dass es weiterspielt Nullausgabe. Klicke darauf und ändere es in deine normale Audioausgabe, Eingebautes Audio Analog Stereo in meinem Fall.

Hier ist ein Screenshot von dem, was Sie suchen:

screenshot

Sie können diese Methode auch verwenden, um Ihre Aufnahme in der Zukunft einzurichten, nachdem Sie das Programm ausgeführt haben load-module befehle in @ Waschtls Antwort die Senke zu erstellen.


7
2018-03-02 18:02



Wenn du kannst, lade einen Screenshot hoch Imgur und verlinke es in deine Antwort. - Lucio
Greifen Sie einen, danke für den Vorschlag. - Jack O'Connor


Verbesserung KrisWebDevWenn Sie möchten, dass record-n-play immer verfügbar ist, suchen Sie zuerst die Standardausgabe:

pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+"

was wird etwas ausgeben wie:

alsa_output.pci-0000_00_1b.0.analog-stereo

Als nächstes erstellen Sie eine Datei ~/.config/pulse/default.pa:

.include /etc/pulse/default.pa

load-module module-combine-sink sink_name=record-n-play slaves=alsa_output.pci-0000_00_1b.0.analog-stereo sink_properties=device.description="Record-and-Play"

Bitte ersetzen alsa_output.pci-0000_00_1b.0.analog-stereo mit welcher Ausgabe auch immer du von der pacmd Befehl. Pulse liest die Standardkonfigurationsdatei nicht, wenn eine benutzerdefinierte Konfigurationsdatei vorhanden ist. Daher enthält die erste Zeile die Standardkonfigurationsdatei. Auf diese Weise lädt pulseaudio immer noch zuerst die Standardkonfiguration.

Lauf pulseaudio -k um die aktuelle pulseaudio-Instanz zu beenden, damit eine neue mit der neuen Konfiguration gestartet wird.

Wenn Sie die Änderungen jederzeit rückgängig machen möchten, entfernen Sie einfach die ~/.config/pulse/default.pa Datei und ausführen pulseaudio -k.

Wenn Sie möchten, dass das Record-N-Play die Standardsenke für alle Ausgaben ist, können Sie dies tun, indem Sie am Ende eine weitere Zeile hinzufügen ~/.config/pulse/default.pa:

set-default-sink record-n-play

Für Programme, für die pulseaudio bereits Informationen gespeichert hat, merkt es sich das zuletzt verwendete Ausgabegerät, so dass Sie diese manuell mit einer der in KrisWebDevs Antwort beschriebenen Methoden neu konfigurieren müssen.


5
2017-07-19 08:56





Ich habe dieses Bash-Skript basierend auf den Antworten von @Waschtl und @KrisWebDev erstellt.

Hier verfügbar: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007

Wie benutzt man?

$ ./pulse-recorder.bash 
    index: 225
                application.name = "ALSA plug-in [mplayer]"
                module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in [mplayer]"
Choose recording index: 225
temp.mp3 file already exist, replace (y/n)? y

2
2018-05-01 19:10



Für den Fall, dass Sie mehrere Ausgänge haben (zB Lautsprecher, mehrere Headsets, Monitor Audio), können Sie in Zeile 21 ersetzen mit zB: default_output = alsa_output.pci-0000_00_1b.0.analog-stereo, wo dies von der Ausgabe der pacmd Liste ist -Sinks - smaudet