Как записать аудиовыход из командной строки в Linux?

Как записать аудиовыход из командной строки в Linux?

Я хочу записать вывод аудио в файл mp3. Какие инструменты и команды я могу использовать в терминале Ubuntu Linux?

решение1

Другие ответы предполагали следующие инструменты: sox, arecord, и parec. Кроме того,Трубопроводпользователи могут использовать pw-cat, хотя другие инструменты также работают с PipeWire. Их все можно вызвать просто:

arecord

arecord --format=cd file.wav

По умолчанию сохраняет в .wavформате. Если не указать приличный формат, качество звука по умолчанию будет плохим. Одна из функций, которая мне нравится в этой программе, — это ее приятный графический вывод vumeter. Она также поддерживает динамическое именование выходных файлов (через час, минуту, день...). К сожалению, она не может выводить в ogg или mp3.


sox

rec file.ext

Эта программа в настоящее время не работает с zsh-дополнениями. Она отображает счетчик в графическом выводе, но также отображает и другую информацию. Она поддерживает mp3 и ogg.


pacat

parecord file.ext

Поддерживает mp3 и ogg. Но не может отображать счетчик в графическом выводе.


pw-cat

pw-record file.ext

Это pacatдля PipeWire. Он поддерживает пользовательские настройки качества для ogg и mp3, а pacatне. Он также не имеет измеряемого графического вывода.

Для записи с другого аудиоустройства, например гарнитуры, вы можете использовать один из перечисленных методов.здесьчтобы сначала получить имя вашего записывающего устройства. Например:

pw-cli list-objects | grep node.name

Предполагая, что в результате получилось «alsa_input.usb-Logitech_Wireless_Headset.mono», мы используем это имя с опцией --target:

pw-record --target alsa_input.usb-Logitech_Wireless_Headset.mono file.wav

решение2

Сначала вам необходимо извлечь имя вашего устройства вывода:

Для этого вы можете установить следующие пакеты:

sudo apt-get install pulseaudio-utils lame mpg123

И запустите:

pacmd list-sinks | grep -e 'name:' -e 'index' -e 'Speakers'

Вывод может быть таким:

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>

После того, как вы нашли имя, вы можете выполнить следующую команду, чтобы записать вывод в файл mp3:

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | lame -r -V0 - out.mp3

Или с помощью soxyou можно сделать следующее, однако я нашел первое решение более надежным:

sox -t pulseaudio alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -t mp3 test.mp3 

Однако, если вы хотите автоматически запускать и останавливать запись, вы можете выполнить:

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%

Он начинает запись, когда звук отправляется на динамик, и останавливается, если ничего не получено в течение 3 секунд. Для получения дополнительной информации о sox, см. егоman-страница для Linux.

решение3

Вы можете использоватьarecordдля этого.

Получите ваши доступные устройства с помощью arecord -l. Это даст что-то вроде этого:

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

Затем для записи с помощью USB-микрофона (карта 1, подустройство 0) используйте, например:

arecord --device="hw:1,0" --format=s16_le --rate=48 rec_$(date "+%F_%H-%M-%S").wav

Также есть -f cd, который является сокращением для --format=s16_le --rate=44100.

Установить источник звука по умолчанию

Если вы не предоставите --device, arecordбудет произведена запись спо умолчаниюИсточник звука. Чтобы показать текущий источник по умолчанию, запустите

pactl info | grep "Default Source"

Чтобы изменить источник по умолчанию с помощью минимального текстового меню, вы можете использоватьfzf:

pactl set-default-source $(pactl list short sources | cut -f2 | fzf)

Я считаю это более удобным, чем поиск индексов карт и подустройств.

Слушайте во время записи

Часто бывает полезно слушать аудиоустройство и записывать с него одновременно. Мы можем сделать это, сделав arecordзапись на стандартный выход с помощью -и затем перенаправив эти аудиоданные вteeкоторый записывает аудио в файл и передает его в aplay:

arecord -f cd - | tee rec.wav | aplay -

Конвертация файлов

Конвертируйте WAVE-файл в формат по вашему выбору:

  • КМП3:ffmpeg -i rec.wav rec.mp3
  • КОгг:ffmpeg -i rec.wav rec.ogg
  • КFLAC:flac rec.wav -o rec.flac

решение4

Спасибо @Ahmad. Мне это помогло:

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%

где параметры входного потока можно увидеть с помощью pacmd list-sinks:

name: <alsa_output.pci-0000_0c_00.4.iec958-stereo>
sample spec: s16le 2ch 44100Hz
properties:
        alsa.resolution_bits = "16"

Связанный контент