![Как записать аудиовыход из командной строки в Linux?](https://rvso.com/image/1628814/%D0%9A%D0%B0%D0%BA%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C%20%D0%B0%D1%83%D0%B4%D0%B8%D0%BE%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%20%D0%B8%D0%B7%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D0%B2%20Linux%3F.png)
Я хочу записать вывод аудио в файл 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
Или с помощью sox
you можно сделать следующее, однако я нашел первое решение более надежным:
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-файл в формат по вашему выбору:
решение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"