Gostaria de gravar uma saída de um programa com o PulseAudio usando script de linha de comando / bash. É importante não registrar toda a saída, mas apenas a saída de um programa específico.
Eu pensei que teria que criar um novo coletor nulo e depois mover a saída do programa para esse novo coletor. Diga ao parec para usar este monitor específico para gravar.
O primeiro passo seria algo como isto:
pactl load-module module-null-sink sink_name=steam
Mas como mover a saída do programa agora para esse coletor?
E como gravar o coletor específico com um script bash?
scripts
pulseaudio
audio-recording
user5950
fonte
fonte
pulseaudio -k
em um terminal.list-sink-inputs
anote osink
valor. Para trocar de volta, basta executarpactl move-sink-input $INDEX $SINK
. Algo comopactl move-sink-input 4719 1
Melhorando a resposta Waschtl deste tópico, para que você possa ouvir e gravar o som do aplicativo:
Primeiro, procuramos nossa saída padrão e colocamos seu nome de coletor em
$DEFAULT_OUTPUT
:Em seguida, criamos um coletor combinado que possui apenas um escravo: $ DEFAULT_OUTPUT . O som gerado pelo aplicativo (fonte) será encaminhado para o coletor de escravos (ou seja, saída real) e também será gravado. É diferente de um coletor nulo onde o som da fonte não é encaminhado.
sink_properties
é opcional e pode apresentar erros se você usar espaços no nome da descrição.Em seguida, poderíamos usar o
pactl move-sink-input ...
comando Waschtl answer (com record-n-play em vez de steam ), mas a GUIpavucontrol
é mais simples (e ótima para verificar / solucionar problemas):Em seguida, reproduzimos algum som no aplicativo que queremos gravar. Na
pavucontrol
Playbackguia, selecionamos na lista suspensa do aplicativo: "Record-and-Play" .Por fim, é bom gravar e ouvir ao mesmo tempo! ( exemplo mp3 coxo , executado em primeiro plano)
Ou podemos gravar em segundo plano e parar a qualquer momento:
NB:
pulseaudio -k
funciona muito bem para redefinir tudo para os padrões da sessão.pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2
.EDIT: Cuidado, desde o Ubuntu 18 (talvez 17 também), o coletor combinado tende a se tornar o dispositivo de saída do sistema padrão, em vez do dispositivo de saída real. Portanto, quando você altera o volume usando o ícone de som na bandeja do sistema, afeta o som da gravação. Solução alternativa: após criar o coletor combinado, abra
pavucontrol
na guia Saída. Selecione "Exibir: dispositivos de saída virtual" e redefina o volume do som do coletor combinado para 100%. Em seguida, selecione "Visualizar: dispositivos de saída de hardware" e pressione o ícone verde "Definir como alternativa" no dispositivo de saída real.fonte
A resposta de @ Waschtl é fantástica. O @ixtmixilix perguntou sobre a restauração do áudio normal após o término da gravação. Aqui está a maneira mais fácil que eu conheço:
Instale e execute a
pavucontrol
GUI. Você deve ver seu aplicativo de saída de áudio e seu medidor de volume na Playbackguia lá. Haverá um botão próximo a ele mostrando que está sendo reproduzido na Saída Nula . Clique nele e altere-o para a sua saída de áudio comum, estéreo analógico de áudio embutido no meu caso.Aqui está uma captura de tela do que você está procurando:
Você também pode usar essa abordagem para configurar sua gravação no futuro, depois de executar o
load-module
comando na resposta de @ Waschtl para criar o coletor.fonte
Melhorando ainda mais a resposta do KrisWebDev , se você deseja que o Record-n-play esteja sempre disponível, primeiro descubra a saída padrão:
que produzirá algo como:
Em seguida, crie um arquivo
~/.config/pulse/default.pa
:Substitua
alsa_output.pci-0000_00_1b.0.analog-stereo
por qualquer saída que você obteve dopacmd
comando. O Pulse não lê o arquivo de configuração padrão quando existe um arquivo de configuração personalizado - é por isso que a primeira linha acima inclui o arquivo de configuração padrão. Dessa forma, o pulseaudio ainda carrega a configuração padrão primeiro.Execute
pulseaudio -k
para eliminar a instância atual do pulseaudio para que uma nova seja iniciada com a nova configuração.Se a qualquer momento você quiser desfazer as alterações aqui, basta remover o
~/.config/pulse/default.pa
arquivo e executarpulseaudio -k
.Se você deseja que o record-n-play seja o coletor padrão para todas as saídas, você pode fazer isso adicionando mais uma linha ao final de
~/.config/pulse/default.pa
:Para programas nos quais o pulseaudio já possui informações armazenadas, ele se lembra de qualquer dispositivo de saída que eles usaram por último, então você terá que reconfigurar manualmente aqueles usando um dos métodos descritos na resposta do KrisWebDev.
fonte
Criei esse script bash com base nas respostas fornecidas pelas respostas @Waschtl e @KrisWebDev.
Disponível aqui: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007
Como usar?
Nova versão
Eu criei um script python que oferece algumas melhorias em relação ao antigo. https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0
Como usar?
Quando você pressiona enter, a gravação começará imediatamente. se, no momento em que você pressionar Enter, o aplicativo já estiver parado (por exemplo, você fechou o mplayer), o script aguardará até que o aplicativo apareça novamente e comece a gravar.
A única desvantagem desse script (vs original) é que, se a lista contiver duas entradas com o mesmo nome, o script não se comportará corretamente. Por exemplo
fonte