Estou usando este script:http://www.thegameengine.org/miscellaneous/streaming-twitch-tv-ubuntu/para transmitir para o Twitch. Funciona, mas não quero transmitir meu microfone, apenas o áudio do computador. Como devo alterar o script para conseguir isso?
Responder1
Escolhendo o áudio do computador
PulsoÁudio
Isso pode ser feito com PulseAudio e pavucontrol
. DeCOMO FAZER: Screencasting adequado no Linux:
Instalar
pavucontrol
. Comece a gravar comffmpeg
. Começarpavucontrol
. Vá para a guia “Gravação” e você encontraráffmpeg
uma lista lá. Altere a captura de áudio de “Áudio Estéreo Analógico Interno” para “Monitor de Áudio Estéreo Analógico Interno“. Agora ele deve gravar o áudio do sistema e do aplicativo em vez do microfone.Esta configuração será lembrada. Na próxima vez que você quiser capturar com
ffmpeg
, ele iniciará automaticamente a gravação do áudio do sistema. Se você quiser reverter isso, usepavucontrol
novamente para voltar à entrada de microfone.
ALSA
Alternativamente, o ALSA pode capturar o áudio do sistema se o seu sistema de áudio suportar um dispositivo de loopback frequentemente rotulado:Mistura estéreo,Mistura de onda,Mistura Mono, ouO que você ouve. Verifique alsamixer
se você tem um desses, masloopback de hardware não é tão comum hoje em dia. Então consulteFFmpeg Wiki: Capturando áudio com ALSApara obter a sintaxe correta se o seu sistema suportar esse recurso.
Caso contrário, acredito que você pode fazer um loopback de software com ALSA, mas posso estar incorreto e não ter experiência com isso.
Roteiro de baixa qualidade
O ffmpeg
comando naquele script horrível e recorrente tem alguns problemas:
-preset
deve ser usado em vez de-vpre
-qscale
é ignorado pela libx264 (use-crf
or-b:v
)- O grupo de fotos não está definido (use
-g
) - VBV deve ser usado (use
-maxrate
e-bufsize
) - A saída pode não usar um esquema de subamostragem de croma compatível (use
-pix_fmt yuv420p
) - A entrada x11grab deve usar
-framerate
, não-r
-threads 6
parece um número arbitrário e nem todos usam o mesmo hardware. Você deve usar o padrão (removendo-threads
, mas é "ganancioso") ou definir um valor apropriado que permita codificar a uma taxa satisfatória e ainda assim permitir energia 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 cegamente meus valores de exemplo para -maxrate
, -bufsize
, -g
e -b:a
. Você deve ajustá-los de acordo com suas necessidades, conforme descrito emCodificação para sites de streaming com FFmpeg. Veja tambémGuia de codificação de vídeo FFmpeg H.264.