Me gustaría grabar una salida de un programa con PulseAudio usando la línea de comandos / script bash. Es importante no registrar toda la salida, sino solo la salida de un programa específico.
Pensé que tendría que crear un nuevo sumidero nulo y luego mover la salida del programa a este nuevo sumidero. Luego dígale a parec que use este monitor específico para grabar.
El primer paso sería algo como esto:
pactl load-module module-null-sink sink_name=steam
Pero, ¿cómo mover la salida del programa ahora a este sumidero?
¿Y cómo grabar el sumidero específico con un script bash?
fuente
pulseaudio -k
en un terminal.list-sink-inputs
tome nota delsink
valor. Para cambiar de nuevo solo correpactl move-sink-input $INDEX $SINK
. Algo así comopactl move-sink-input 4719 1
Mejorando la respuesta de Waschtl de este hilo para que pueda AMBOS ESCUCHAR Y GRABAR el sonido de la aplicación:
Primero, buscamos nuestra salida predeterminada y ponemos su nombre de sumidero en
$DEFAULT_OUTPUT
:Luego, creamos un sumidero combinado que solo tiene un esclavo: $ DEFAULT_OUTPUT . El sonido generado por la aplicación (fuente) se reenviará al receptor esclavo (es decir, salida real), y también lo grabaremos. Es diferente a un sumidero nulo donde el sonido de origen no se reenvía.
sink_properties
es opcional y puede generar errores si usa espacios en el nombre de la descripción.Entonces, podríamos usar el
pactl move-sink-input ...
comando de respuesta Waschtl (con record-n-play en lugar de steam ) pero la GUIpavucontrol
es más simple (y excelente para verificar / solucionar problemas):Luego, reproducimos algo de sonido en la aplicación que queremos grabar. En la
pavucontrol
Playbackpestaña, seleccionamos en la lista desplegable de la aplicación: "Grabar y reproducir" .Finalmente, ¡estamos bien para grabar y escuchar al mismo tiempo! ( ejemplo mp3 cojo , ejecuta en primer plano)
O podemos grabar en segundo plano y detenernos en cualquier momento:
NÓTESE BIEN:
pulseaudio -k
funciona muy bien para restablecer todo a los valores predeterminados de la sesión.pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2
.EDITAR: Cuidado, ya que Ubuntu 18 (quizás también 17), el sumidero combinado tiende a convertirse en el dispositivo de salida del sistema predeterminado, en lugar del dispositivo de salida real. Entonces, cuando cambia el volumen usando el icono de sonido en la bandeja del sistema, afecta el sonido de su grabación. Solución alternativa: después de crear el sumidero combinado, ábralo
pavucontrol
en la pestaña Salida. Seleccione "Ver: dispositivos de salida virtual" y restablezca el volumen de sonido del receptor combinado al 100%. Luego seleccione "Ver: Dispositivos de salida de hardware" y presione el icono verde "Definir como alternativa" en el dispositivo de salida real.fuente
La respuesta de @ Waschtl es fantástica. @ixtmixilix preguntó sobre la restauración del audio normal después de que la grabación haya finalizado. Esta es la forma más fácil que conozco:
Instala y ejecuta la
pavucontrol
GUI. Debería ver su aplicación de salida de audio y su medidor de volumen debajo de la Playbackpestaña allí. Habrá un botón al lado que muestra que se está reproduciendo en Salida nula . Haga clic en eso y cámbielo a su salida de audio normal, audio estéreo analógico incorporado en mi caso.Aquí hay una captura de pantalla de lo que estás buscando:
También puede usar este enfoque para configurar su grabación en el futuro, después de ejecutar el
load-module
comando en la respuesta de @ Waschtl para crear el sumidero.fuente
Mejorando aún más la respuesta de KrisWebDev , si desea que record-n-play esté siempre disponible, primero descubra la salida predeterminada:
que generará algo como:
A continuación, cree un archivo
~/.config/pulse/default.pa
:Reemplace
alsa_output.pci-0000_00_1b.0.analog-stereo
con cualquier salida que obtuvo delpacmd
comando. Pulse no lee el archivo de configuración predeterminado cuando existe un archivo de configuración personalizado; es por eso que la primera línea anterior incluye el archivo de configuración predeterminado. De esa forma, pulseaudio todavía carga primero la configuración predeterminada.Ejecute
pulseaudio -k
para matar la instancia actual de pulseaudio para que se inicie una nueva con la nueva configuración.Si en algún momento desea deshacer los cambios aquí, simplemente elimine el
~/.config/pulse/default.pa
archivo y ejecútelopulseaudio -k
.Si desea que record-n-play sea el sumidero predeterminado para todas las salidas, puede hacerlo agregando otra línea al final de
~/.config/pulse/default.pa
:Para los programas en los que pulseaudio ya ha almacenado información, recuerda el dispositivo de salida que utilizaron por última vez, por lo que deberá volver a configurarlos manualmente mediante uno de los métodos descritos en la respuesta de KrisWebDev.
fuente
He creado este script bash en base a las respuestas proporcionadas por @Waschtl y @KrisWebDev.
Disponible aquí: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007
¿Cómo utilizar?
Nueva versión
He creado un script de Python que ofrece algunas mejoras sobre el anterior. https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0
¿Cómo utilizar?
Cuando presione enter, la grabación comenzará de inmediato. si en el momento en que presiona enter, la aplicación ya estaba detenida (es decir, cerró mplayer, por ejemplo), el script esperará hasta que la aplicación vuelva a aparecer y comience a grabar.
El único inconveniente de ese script (frente al original) es que si la lista contiene dos entradas con el mismo nombre, el script no se comportará correctamente. Por ejemplo
fuente