Como faço para transmitir áudio do computador apenas com o ffmpeg?

1

Estou usando este script: link para transmitir para o Twitch. Funciona, mas não quero transmitir meu microfone, apenas o áudio do computador. Como devo mudar o script para conseguir isso?

    
por theva 27.08.2014 / 23:03

1 resposta

0

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 com ffmpeg . 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, use ffmpeg 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 .

    
por LordNeckbeard 28.08.2014 / 20:51