Mesclar duas fontes de áudio com x11grab, possível?

11

Atualmente, estou executando a seguinte configuração.

ffmpeg \
 -i http://pub1.di.fm:80/di_vocaltrance \
 -f x11grab -s 1920x1080 -r 25 -i :0.0 \
 -c:v libx264 -preset fast -pix_fmt yuv420p -s 1280x800 \
 -c:a libmp3lame -ab 96k -ar 22050 \
 -threads 0 \
 -f flv "rtmp://...."

O que eu quero assar:

 -f alsa -ac 2 -i hw:0 -acodec pcm_s32le -aq 1 -ab 128k\

Isso é possível? E talvez até misture "o que eu ouço" (aka reprodução) por assim dizer?

Eu tentei algo do tipo (mas não compreendo totalmente o mapa)

 -i http://pub1.di.fm:80/di_vocaltrance -map 0:1 \
 -f x11grab -s 1920x1080 -r 25 -i :0.0 -map 0:0 \

Mas isso realmente não foi tão bem.

Estou tão perto agora, isso me dá canais de som, mas tudo parece que estou dentro de uma espécie de lata pequena.

#!/bin/bash
KEY=`cat key.db`

ffmpeg \
 -i http://pub1.di.fm:80/di_vocaltrance \
 -f alsa -ac 2 -i hw:0 -acodec mp3 -aq 1 -ab 128k \
 -f x11grab -s 1920x1080 -r 25 -i :0.0 \
 -c:v libx264 -preset fast -pix_fmt yuv420p -s 1280x800 \
 -c:a mp3 -ab 96k -ar 22050 \
 -threads 0 \
 -map 0:0 -map 1:0 -map 2:0 \
 -f flv "rtmp://live.twitch.tv/app/$KEY"

Só aparece quando eu misturo os dois sons. Tentando trazer o JACK aqui também, mas sem resultados reais (pensei em passar tudo por uma placa de mixagem para descarregar o ffmpeg da mixagem).

Executando com:

 -f alsa -ac 2 -i jack \
 ....

Dá isto no entanto:

[alsa @ 0x1399280] não pode definir o formato de amostra 0x10000 2 (argumento inválido)

jack: Erro de entrada / saída

Torxed
fonte
Apenas uma sugestão, mas o Sox é um utilitário cli simplesmente implementado, projetado para esse tipo de coisa. congelado parece ter um controle bastante firme sobre ele.
mikeserv

Respostas:

2

Você deve poder usar o filtro amix para misturar seu áudio.

Exemplo:

ffmpeg \
  -i http://pub1.di.fm:80/di_vocaltrance \ # internet radio
  -f alsa    -i hw:0 \                     # microphone
  -f x11grab -i :0.0 \                     # computer desktop
  -f v4l2    -i /dev/video0 \              # webcam or
  # -f iec61883 -i auto \                  # firewire camcorder
  -filter_complex '[0:a:0][1:a:0]amix=inputs=2;[3:v:0]scale=200:-1[webcam],[2:v:0][webcam]overlay=main_w-overlay_w-10:main_h-overlay_h-10' \
  <output>

Também adicionei uma sobreposição de webcam, para removê-la, retire a linha da webcam, o ponto e vírgula e as definições após o ponto e vírgula.

Lembre-se de que você pode precisar definir -maps se incluir alguma entrada que possua vários fluxos para remover os estranhos.

Explicação:

-filter_complex
define filtros com várias entradas ou saídas
[0:a:0]
Insira o número 0 do fluxo de áudio 0 (rádio na Internet)
[1:a:0]
Entrada número 1 do fluxo de áudio 0. (microfone)
amix=inputs=2
Misture dois fluxos de áudio; se nenhum fluxo de entrada estiver definido, ele seleciona automaticamente dois; portanto, nesse caso, você deve deixar de fora as duas definições acima.
;
Iniciar uma nova cadeia de filtros
[3:v:0]
Insira o número 0 do fluxo de vídeo 0 (webcam)
scale=200:-1
Escale o vídeo para 200x ???, -1 mantém a proporção, para que um vídeo de 600x480 se torne 200x160.
[webcam]
Chame a saída em escala de "webcam".
,
Continue para o próximo filtro nesta cadeia.
[2:v:0]
Insira o número 0 do fluxo de vídeo 2 (área de trabalho)
[webcam]
O fluxo da webcam em escala.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
Sobreponha a segunda entrada sobre a primeira, colocando a segunda entrada 10 pixels da direita e 10 pixels da parte inferior.

Além disso, você pode configurar a fonte de captura da placa de som para mixar para obter o que o computador produz e, com freqüência, pode ativar o som do microfone para obter um loopback do monitor do microfone, mas para que ele funcione corretamente, é necessário usar jack ou pulso. Eu não sei por que jack não funcionou para você, então não posso ajudá-lo com isso, desculpe.

congeladas
fonte