![¿Cómo puedo grabar la salida de audio desde la línea de comandos en Linux?](https://rvso.com/image/1628814/%C2%BFC%C3%B3mo%20puedo%20grabar%20la%20salida%20de%20audio%20desde%20la%20l%C3%ADnea%20de%20comandos%20en%20Linux%3F.png)
Quiero grabar la salida de audio en un archivo mp3. ¿Qué herramientas y comandos puedo usar en la terminal de Ubuntu Linux?
Respuesta1
Otras respuestas sugirieron las siguientes herramientas: sox
, arecord
y parec
. Además,TuberíaAlambreLos usuarios pueden utilizar pw-cat
, aunque las otras herramientas también funcionan con PipeWire. Todos ellos se pueden invocar simplemente:
arecord
arecord --format=cd file.wav
Se guarda .wav
de forma predeterminada. Si no especifica un formato decente, la calidad de audio predeterminada es deficiente. Una característica que me gusta de este programa es su agradable salida gráfica vumeter. También admite nombres de archivos de salida dinámicos (por hora, minuto, día...). Desafortunadamente, no puede enviarse a ogg o mp3.
sox
rec file.ext
Este programa actualmente no funciona con finalizaciones de zsh. Muestra un medidor en su salida gráfica, pero también muestra otra información. Soporta mp3 y ogg.
pacat
parecord file.ext
Soporta mp3 y ogg. Pero no puede mostrar un medidor en su salida gráfica.
pw-cat
pw-record file.ext
Es pacat
para PipeWire. Admite configuraciones de calidad personalizadas para ogg y mp3, mientras pacat
que no. Tampoco tiene una salida gráfica medida.
Para grabar desde un dispositivo de audio diferente, por ejemplo, unos auriculares, puede utilizar uno de los métodos enumeradosaquípara obtener primero el nombre de su dispositivo de grabación. Por ejemplo:
pw-cli list-objects | grep node.name
Suponiendo que esto generó "alsa_input.usb-Logitech_Wireless_Headset.mono", usamos ese nombre con la --target
opción:
pw-record --target alsa_input.usb-Logitech_Wireless_Headset.mono file.wav
Respuesta2
Primero necesitas extraer el nombre de tu dispositivo de salida:
Para hacer esto, puede instalar los siguientes paquetes:
sudo apt-get install pulseaudio-utils lame mpg123
Y correr:
pacmd list-sinks | grep -e 'name:' -e 'index' -e 'Speakers'
La salida podría ser así:
index: 1
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
index: 23
name: <alsa_output.pci-0000_00_03.0.hdmi-surround71>
Después de encontrar el nombre, puede ejecutar el siguiente comando para grabar el resultado en un archivo mp3:
parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | lame -r -V0 - out.mp3
O usando sox
puedes hacer lo siguiente, sin embargo, encontré la primera solución más sólida:
sox -t pulseaudio alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -t mp3 test.mp3
Sin embargo, si desea iniciar y detener la grabación automáticamente, puede ejecutar:
parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -t raw -b 16 -e signed -c 2 -r 44100 - test.ogg silence 1 0.1 3% 1 3.0 3%
Comienza a grabar cuando se envía un sonido al altavoz y se detiene si no se recibe nada después de 3 segundos. Para obtener más información sobre sox
, consulte supágina de manual para Linux.
Respuesta3
Puedes usararecord
para esto.
Obtenga sus dispositivos disponibles con arecord -l
. Esto producirá algo como esto:
card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
Luego, para grabar usando el micrófono USB (tarjeta 1, subdispositivo 0) use, por ejemplo:
arecord --device="hw:1,0" --format=s16_le --rate=48 rec_$(date "+%F_%H-%M-%S").wav
También está -f cd
cuál es un atajo para --format=s16_le --rate=44100
.
Establecer fuente de audio predeterminada
Cuando no proporcione --device
, arecord
se registrará desde elpor defectofuente de audio. Para mostrar la fuente predeterminada actual, ejecute
pactl info | grep "Default Source"
Para cambiar la fuente predeterminada usando un menú textual mínimo, puede usarfzf
:
pactl set-default-source $(pactl list short sources | cut -f2 | fzf)
Esto me resulta más cómodo que buscar los índices de tarjetas y subdispositivos.
Escuche mientras graba
A menudo resulta útil escuchar un dispositivo de audio y grabar desde él al mismo tiempo. Podemos hacer esto escribiendo arecord
en estándar -
y luego canalizando esos datos de audio atee
que escribe el audio en un archivo y lo pasa a aplay
:
arecord -f cd - | tee rec.wav | aplay -
Conversión de archivos
Convierta el archivo WAVE al formato de su elección:
Respuesta4
Felicitaciones a @Ahmad. Esto funcionó para mí:
sox -e signed-integer -L -b16 -c2 -r44100 -t raw "|parec -d alsa_output.pci-0000_0c_00.4.iec958-stereo.monitor" -t mp3 -c2 -C 320.01 stream.mp3 silence 1 0.1 3% 1 3.0 3%
donde los parámetros del flujo de entrada se pueden ver con pacmd list-sinks
:
name: <alsa_output.pci-0000_0c_00.4.iec958-stereo>
sample spec: s16le 2ch 44100Hz
properties:
alsa.resolution_bits = "16"