Enregistrer la sortie d'un programme avec PulseAudio

43

J'aimerais enregistrer une sortie d'un programme avec PulseAudio en utilisant le script de ligne de commande / bash. Il est important de ne pas enregistrer toutes les sorties, mais uniquement la sortie d’un programme spécifique.

Je pensais que je devrais créer un nouveau null-sink et déplacer la sortie du programme vers ce nouvel évier. Dites ensuite à parec d'utiliser ce moniteur spécifique pour enregistrer.

La première étape serait quelque chose comme ceci:

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

Mais comment déplacer la sortie du programme vers cet évier?
Et comment enregistrer le récepteur spécifique avec un script bash?

    
posée user5950 10.09.2011 - 17:49
la source

5 réponses

46

Essayez quelque chose comme ça:

Dans un terminal entrez

pacmd

(c'est la CLI du PulseAudio-Server) puis utilisez

list-sink-inputs

(où vous obtenez les index des entrées en cours) Trouvez maintenant l'index de votre saisie. Désormais appelé $ INDEX

la partie scriptable est:

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 -

Explications:

  • La première commande ajoutera un null-sink comme vous le saviez déjà.
  • La deuxième commande déplace le récepteur-récepteur de votre dissipateur audio standard en vapeur
  • La troisième commande enregistre le moniteur du périphérique (-d) et place la sortie (raw-wave-stream) dans oggenc, qui code ce flux dans un fichier oga. (pour mp3 utiliser lame)
réponse donnée Waschtl 10.09.2011 - 20:10
la source
19

Amélioration de réponse de Waschtl de ce fil de discussion pour que vous puissiez ÉCOUTER ET ENREGISTRER le son de l’application :

Tout d'abord, nous recherchons notre sortie par défaut et mettons son nom de récepteur dans $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

Ensuite, nous créons un évier combiné qui n’a qu’un seul esclave. : $ DEFAULT_OUTPUT . Le son généré par l'application (source) sera transmis au récepteur esclave (c'est-à-dire à la sortie réelle) et nous l'enregistrerons également. Il est différent d'un récepteur nul où le son source n'est pas transféré.

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

sink_properties est facultatif et peut bogue si vous utilisez des espaces dans le nom de la description.

Ensuite, nous pourrions utiliser la commande pactl move-sink-input ... de Réponse de Waschtl (avec record-n-play au lieu de steam ) mais l'interface graphique pavucontrol est plus simple (et idéale pour la vérification / le dépannage):

$ sudo apt-get install pavucontrol
$ pavucontrol &

Ensuite, nous jouons du son dans l'application que nous voulons enregistrer. Dans l'onglet pavucontrol Lecture , nous sélectionnons dans la liste déroulante des applications: "Enregistrer et jouer" .

Enfin, nous sommes bons pour enregistrer et écouter en même temps! ( lame exemple de mp3, exécuté en avant-plan)

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

Ou nous pouvons enregistrer en arrière-plan et arrêter à tout moment:

$ 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

Remarque:

  • Pour tout annuler ou réessayer: Supprimez ou réinitialisez les puits en utilisant cette réponse . pulseaudio -k fonctionne très bien pour tout réinitialiser aux valeurs par défaut de la session.
  • Si nous modifions la sortie par défaut dans les paramètres du son du système, le paramètre de lecture de l’application personnalisée sera écrasé et nous devrons revenir dans pavucontrol pour le rétablir dans l’interface combinée.
  • Pour pouvoir écouter le son de plusieurs "vraies" interfaces (par exemple, casque, sortie HDMI, etc.), nous devrions inclure toutes les "vraies" sorties que nous pourrions utiliser pour écouter, en tant que enregistrement -n-play slink slaves, comme: pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2 .
réponse donnée KrisWebDev 24.01.2016 - 11:41
la source
7
La réponse de @ Waschtl est fantastique. @ixtmixilix a demandé comment restaurer un son normal une fois l'enregistrement terminé. Voici le plus simple que je connaisse:

Installez et exécutez l'interface graphique pavucontrol . Vous devriez voir votre application de sortie audio et son compteur de volume sous l'onglet Lecture . Il y aura un bouton à côté de lui indiquant qu'il joue sur Null Output . Cliquez dessus et changez-le pour votre sortie audio ordinaire, Stéréo analogique audio intégrée dans mon cas.

Voici une capture d'écran de ce que vous recherchez:

Vous pouvez également utiliser cette approche pour configurer votre enregistrement ultérieurement, après avoir exécuté la commande load-module dans la réponse de @ Waschtl pour créer le récepteur.

    
réponse donnée Jack O'Connor 02.03.2013 - 19:02
la source
5

Améliorez la réponse de KrisWebDev , si vous souhaitez que la fonction record-n-play soit toujours disponible, découvrez-la d'abord la sortie par défaut:

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

qui affichera quelque chose comme:

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

Ensuite, créez un fichier ~/.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"

Veuillez remplacer alsa_output.pci-0000_00_1b.0.analog-stereo par le résultat obtenu avec la commande pacmd . Pulse ne lit pas le fichier de configuration par défaut lorsqu'un fichier de configuration personnalisé existe - c'est pourquoi la première ligne ci-dessus inclut le fichier de configuration par défaut. De cette façon, pulseaudio charge toujours la configuration par défaut en premier.

Exécutez pulseaudio -k pour tuer l'instance pulseaudio en cours afin d'en créer une nouvelle avec la nouvelle configuration.

Si vous souhaitez annuler les modifications ici, supprimez simplement le fichier ~/.config/pulse/default.pa et exécutez pulseaudio -k .

Si vous souhaitez que le record-n-play soit le récepteur par défaut pour toutes les sorties, vous pouvez le faire en ajoutant une autre ligne à la fin de ~/.config/pulse/default.pa :

set-default-sink record-n-play

Pour les programmes sur lesquels pulseaudio a déjà stocké des informations, il se souvient du périphérique de sortie utilisé en dernier, vous devrez donc reconfigurer manuellement ceux qui utilisent l’une des méthodes décrites dans la réponse de KrisWebDev.

    
réponse donnée Jonas Berlin 19.07.2016 - 10:56
la source
2

J'ai créé ce script bash en fonction des réponses fournies par les réponses @Waschtl et @KrisWebDev.

Disponible ici: lien

Comment utiliser?

$ ./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
    
réponse donnée Ramast 01.05.2017 - 21:10
la source

Lire d'autres questions sur les étiquettes