¿Cómo puedo grabar la salida de audio desde la línea de comandos en Linux?

¿Cómo puedo grabar la salida de audio desde la línea de comandos en Linux?

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, arecordy 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 .wavde 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 pacatpara PipeWire. Admite configuraciones de calidad personalizadas para ogg y mp3, mientras pacatque 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 --targetopció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 soxpuedes 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 usararecordpara 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 cdcuál es un atajo para --format=s16_le --rate=44100.

Establecer fuente de audio predeterminada

Cuando no proporcione --device, arecordse 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 arecorden estándar -y luego canalizando esos datos de audio ateeque 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:

  • AMP3:ffmpeg -i rec.wav rec.mp3
  • AOgg:ffmpeg -i rec.wav rec.ogg
  • AFLAC:flac rec.wav -o rec.flac

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"

información relacionada