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

Вопрос или проблема

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

Другие ответы предлагали следующие инструменты: sox, arecord и parec. Кроме того, пользователи PipeWire могут использовать 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

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

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

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 (приоритет 10000, задержка 0 usec, доступно: неизвестно)
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

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

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.

Вы можете использовать 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-микрофона (card 1, subdevice 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 -

Преобразование файлов

Преобразуйте WAV файл в выбранный вами формат:

  • В MP3: ffmpeg -i rec.wav rec.mp3
  • В Ogg: ffmpeg -i rec.wav rec.ogg
  • В FLAC: flac rec.wav -o rec.flac

Большое спасибо @Ответу Ахмада. Это сработало для меня:

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"

Как гордый автор этой бесплатной и открытой сети диктовки голоса AI на Python, мне приятно отметить, что она включает в себя утилиту для записи без помощи рук, record.py.

record.py создает .mp3 файл (или, по желанию, большинство других форматов). Он начинает запись только тогда, когда существует какой-либо непрерывный шум для записи, например, голос или музыка. Он может работать в цикле, где он будет создавать последовательно пронумерованные записи. Или, как, например, телефонные звонки или что-то подобное. Птичьи песни. Когда жена что-то говорит и хочет узнать, уделяли ли вы ей внимание. Э эм, да. Давайте воспроизведем это.

Работает это так: он лежит и отбрасывает образцы. Он не создает временные файлы. Аудиопоток проходит через T. Половина из него имеет задержку 2 секунды. Поэтому, когда звук определяется, он ничего из этого не пропускает. Он “готов”. Вы также можете вставлять фильтры, удаление шумов, реверберацию, эхо и эффекты в аудиопоток.

И вы можете взять record.py прямо с этой страницы. Вам не нужно git clone весь проект, хотя он довольно маленький. И вы получаете голос в текст, AI и другие вещи вместе с этим.

Ответ или решение

Для записи аудио вывода из командной строки в Linux вы можете использовать несколько инструментов, таких как sox, arecord, parec и pw-record. В этой инструкции я подробно объясню, как их использовать.

Установка необходимых пакетов

Перед тем, как начать, убедитесь, что у вас установлены все необходимые пакеты. Вы можете установить их следующей командой:

sudo apt-get install pulseaudio-utils lame sox

Получение списка устройств вывода

Чтобы записать аудио, сначала нужно узнать, какое устройство вы хотите использовать. Выполните эту команду:

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)

Запись аудио

Чтобы записать аудио с помощью parec, выполните следующую команду:

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

Здесь alsa_output.pci-0000_00_1b.0.analog-stereo.monitor — это имя устройства мониторинга, а out.mp3 — имя выходного файла.

Использование Sox

Также можно использовать sox для записи:

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

Автоматическая запись

Если вы хотите, чтобы запись начиналась автоматически в момент появления звука и останавливалась через некоторое время отсутствия звука, вы можете использовать:

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -t raw -b 16 -e signed -c 2 -r 44100 - out.ogg silence 1 0.1 3% 1 3.0 3%

Проверка и выбор устройства по умолчанию

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

pactl info | grep "Default Source"

Для изменения устройства по умолчанию с использованием текстового меню fzf выполните:

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

Прослушивание во время записи

Чтобы одновременно записывать и воспроизводить звук, используйте следующую команду:

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

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

Для конвертации записанного WAVE файла в другие форматы, вы можете использовать ffmpeg:

  • Для MP3:
ffmpeg -i rec.wav rec.mp3
  • Для Ogg:
ffmpeg -i rec.wav rec.ogg
  • Для FLAC:
flac rec.wav -o rec.flac

Вывод

Эти инструменты предоставляют вам гибкость для записи аудио вывода из командной строки в Linux. Вы можете выбрать любой из предложенных методов в зависимости от ваших предпочтений и требований к качеству. Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...