Я хотел бы записать вывод программы с PulseAudio, используя командную строку / сценарий bash. Важно не записывать все выходные данные, а только выходные данные одной конкретной программы.
Я думал, что мне нужно будет создать новый нулевой приемник и затем перенести вывод программы в этот новый приемник. Чем сказать Parec, чтобы использовать этот конкретный монитор для записи.
Первый шаг будет примерно таким:
pactl load-module module-null-sink sink_name=steam
Но как теперь перенести вывод программы в этот приемник?
А как записать конкретный сток с помощью bash-скрипта?
scripts
pulseaudio
audio-recording
user5950
источник
источник
pulseaudio -k
в терминале.list-sink-inputs
обратите внимание наsink
значение. Чтобы поменять местами, просто бегиpactl move-sink-input $INDEX $SINK
. Нечто подобноеpactl move-sink-input 4719 1
Улучшение ответа Waschtl этой темы, чтобы вы могли ОБА СЛУШАТЬ И ЗАПИСАТЬ звук приложения:
Сначала мы ищем наш вывод по умолчанию и помещаем его имя приемника в
$DEFAULT_OUTPUT
:Затем мы создаем комбинированный приемник, который имеет только одно подчиненное устройство: $ DEFAULT_OUTPUT . Звук, сгенерированный приложением (источником), будет перенаправлен на подчиненный приемник (т. Е. Реальный вывод), и мы также запишем его. Это отличается от нулевого приемника, где исходный звук не передается.
sink_properties
не является обязательным и может содержать ошибку, если вы используете пробелы в имени описания.Тогда мы могли бы использовать
pactl move-sink-input ...
команду из Waschtl ответа (с рекордно-н-играми вместо пара ) , но GUIpavucontrol
является более простым (и отлично подходит для проверки / устранения неисправностей):Затем мы воспроизводим звук в приложении, которое хотим записать. На
pavucontrol
Playbackвкладке мы выбираем в раскрывающемся списке приложения: «Записывай и играй» .Наконец, мы хороши для записи и прослушивания одновременно! ( пример с хромой mp3, работает на переднем плане)
Или мы можем записать в фоновом режиме и остановить в любое время:
NB:
pulseaudio -k
прекрасно работает, чтобы сбросить все к значениям по умолчанию сеанса.pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2
.РЕДАКТИРОВАТЬ: Остерегайтесь, начиная с Ubuntu 18 (может быть 17 тоже), комбинированный приемник, как правило, становится устройством вывода системы по умолчанию, а не реальным устройством вывода. Поэтому, когда вы меняете громкость с помощью значка звука на панели задач, это влияет на звук записи. Обходной путь: После создания комбинированного приемника откройте
pavucontrol
вкладку «Вывод». Выберите «View: Virtual Output Devices» и сбросьте громкость звука объединенного приемника до 100%. Затем выберите «View: Аппаратные устройства вывода» и нажмите зеленый значок «Определить как альтернативу» на реальном устройстве вывода.источник
@ Ответ Waschtl фантастический. @ixtmixilix спросил о восстановлении обычного звука после завершения записи. Вот самый простой способ, который я знаю:
Установите и запустите
pavucontrol
графический интерфейс. Вы должны увидеть свое приложение для вывода звука и его измеритель громкости на Playbackвкладке. Рядом с ним будет кнопка, показывающая, что он играет на нулевом выходе . Нажмите на это и измените его на ваш обычный аудио выход, встроенный аудио аналоговый стерео в моем случае.Вот скриншот того, что вы ищете:
Вы также можете использовать этот подход для настройки вашей записи в будущем, после того как вы запустите
load-module
команду в ответе @ Waschtl, чтобы создать приемник.источник
Для дальнейшего улучшения ответа KrisWebDev , если вы хотите, чтобы запись-n-play была всегда доступна, сначала найдите вывод по умолчанию:
который выведет что-то вроде:
Далее создайте файл
~/.config/pulse/default.pa
:Пожалуйста, замените
alsa_output.pci-0000_00_1b.0.analog-stereo
все, что вы получили отpacmd
команды. Pulse не считывает файл конфигурации по умолчанию, когда существует пользовательский файл конфигурации - поэтому первая строка выше включает файл конфигурации по умолчанию. Таким образом pulseaudio по-прежнему сначала загружает конфигурацию по умолчанию.Бегать
pulseaudio -k
для уничтожения текущего экземпляра pulseaudio, чтобы запустить новый экземпляр с новой конфигурацией.Если в любое время вы хотите отменить изменения здесь, просто удалите
~/.config/pulse/default.pa
файл и запуститеpulseaudio -k
.Если вы хотите, чтобы запись-n-воспроизведение была приемником по умолчанию для всех выходов, вы можете сделать это, добавив еще одну строку в конец
~/.config/pulse/default.pa
:Для программ, в которых pulseaudio уже хранит информацию, он запоминает все устройства вывода, которые они использовали последними, поэтому вам придется вручную перенастроить их, используя один из методов, описанных в ответе KrisWebDev.
источник
Я создал этот bash-скрипт на основе ответов, предоставленных ответами @Waschtl и @KrisWebDev.
Доступно здесь: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007
Как пользоваться?
Новая версия
Я создал скрипт Python, который предлагает некоторые улучшения по сравнению со старым. https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0
Как пользоваться?
Когда вы нажмете Enter, запись начнется немедленно. Если к тому времени, когда вы нажмете Enter, приложение уже будет остановлено (например, вы закрыли mplayer), сценарий будет ждать, пока приложение снова не появится, и начать запись.
Единственный недостаток этого сценария (по сравнению с оригинальным) состоит в том, что если список содержит две записи с одинаковыми именами, сценарий будет работать неправильно. Например
источник