- Вопрос или проблема
- arecord
- sox
- pacat
- pw-cat
- Установить источник по умолчанию
- Слушать во время записи
- Преобразование файлов
- Ответ или решение
- Установка необходимых пакетов
- Получение списка устройств вывода
- Запись аудио
- Использование Sox
- Автоматическая запись
- Проверка и выбор устройства по умолчанию
- Прослушивание во время записи
- Конвертация файлов аудио
- Вывод
Вопрос или проблема
Я хочу записать звуковой выход в 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 файл в выбранный вами формат:
Большое спасибо @Ответу Ахмада. Это сработало для меня:
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. Вы можете выбрать любой из предложенных методов в зависимости от ваших предпочтений и требований к качеству. Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь задавать их.