Escolhendo o áudio do computador
PulseAudio
Isso pode ser feito com o PulseAudio e pavucontrol
. De COMO: Screencasting adequado no Linux :
Instale
pavucontrol
. Comece a gravar comffmpeg
. Começar %código%. Vá até a guia "Gravação" e você encontrarápavucontrol
listado lá. Alterar a captura de áudio de “Internal Audio Analog Stereo” para “Monitorar o estéreo analógico de áudio interno”. Agora deve gravar sistema e aplicação de áudio em vez de microfone.Esta configuração será lembrada. A próxima vez que você quiser capturar com
ffmpeg
, iniciará automaticamente a gravação do áudio do sistema. E se Se você quiser reverter isso, useffmpeg
novamente para voltar a entrada de microfone.
ALSA
Alternativamente, o ALSA pode capturar áudio do sistema se o seu sistema de áudio suportar um dispositivo de loopback rotulado frequentemente: Mix estéreo , Wave out mix , Mono Mix ou O que você ouve . Verifique em pavucontrol
para ver se você tem um desses, mas loopback de hardware não é tão comum nos dias de hoje . Em seguida, consulte FFmpeg Wiki: Capturando Áudio com o ALSA para obter a sintaxe adequada se o seu sistema suportar esse recurso.
Caso contrário, acredito que você possa fazer um loopback de software com o ALSA, mas posso estar incorreto e não ter experiência com isso.
Roteiro de baixa qualidade
O comando alsamixer
nesse script terrível e recorrente tem alguns problemas:
-
ffmpeg
deve ser usado em vez de-preset
-
-vpre
é ignorado por libx264 (use-qscale
ou-crf
) - O grupo de imagens não está definido (use
-b:v
) - O VBV deve ser usado (use
-g
e-maxrate
) - A saída não pode usar um esquema de subamostragem de croma compatível (use
-bufsize
)
A entrada - x11grab deve usar
-pix_fmt yuv420p
, não-framerate
-
-r
parece ser um número arbitrário e nem todo mundo usa o mesmo hardware. Você deve usar o padrão (removendo-threads 6
, mas é "ganancioso"), ou definir um valor apropriado que permita codificar a uma taxa satisfatória e ainda permitir suco suficiente para executar as outras coisas que você está gravando .
O comando deve ser algo assim:
ffmpeg \
-f alsa -ac 2 -i "$INAUD" \
-f x11grab -video_size "$INRES" -framerate "$FPS" -i :0.0 \
-vcodec libx264 -s "$OUTRES" -preset "$QUAL" -maxrate 1000k -bufsize 2000k -g 50 -pix_fmt yuv420p \
-acodec libmp3lame -ar 44100 -b:a 128k \
-f flv "$STREAM_URL"
Observação: não use apenas cegamente meus valores de exemplo para -threads
, -maxrate
, -bufsize
e -g
. Você deve ajustá-los de acordo com suas necessidades, conforme descrito em Codificando sites de streaming com o FFmpeg . Consulte também o Guia de codificação de vídeo FFmpeg H.264 .