Combinar dos fuentes de audio con x11grab, ¿es posible?

11

Actualmente estoy ejecutando con la siguiente configuración.

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://...."

Lo que quiero hornear:

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

es posible? ¿Y tal vez incluso mezclar "lo que escucho" (también conocido como reproducción) por así decirlo?

He intentado algo similar a (pero no entiendo completamente -map)

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

Pero eso realmente no fue tan bien.

Estoy tan cerca ahora, esto me da canales de sonido, pero todo suena como si estuviera dentro de una especie de lata.

#!/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"

Solo aparece cuando mezclo los dos sonidos juntos. Tratando de poner JACK aquí también, pero sin ningún resultado real (pensé en pasar todo a través de una mesa de mezclas para descargar ffmpeg de la mezcla).

Corriendo con:

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

Da esto sin embargo:

[alsa @ 0x1399280] no puede establecer el formato de muestra 0x10000 2 (argumento no válido)

jack: error de entrada / salida

Torxed
fuente
Solo una sugerencia, pero Sox es una utilidad cli simplemente implementada diseñada para este tipo de cosas. Sin embargo, congelado parece tener un control bastante firme.
mikeserv

Respuestas:

2

Debería poder usar el filtro amix para mezclar su audio.

Ejemplo:

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>

También agregué una superposición de cámara web, para eliminarla, quite la línea de la cámara web, el punto y coma y las definiciones después del punto y coma.

Tenga en cuenta que es posible que tenga que definir -maps si agrega cualquier entrada que tenga múltiples flujos para eliminar los extraños.

Explicación:

-filter_complex
define filtros con múltiples entradas o salidas
[0:a:0]
Ingrese el número 0 de transmisión de audio 0 (radio por Internet)
[1:a:0]
Entrada 1 del flujo de audio número 0. (micrófono)
amix=inputs=2
Mezcle dos secuencias de audio, si no hay secuencias de entrada definidas, selecciona automáticamente dos, por lo que en este caso, debería poder omitir las dos definiciones anteriores.
;
Comience una nueva cadena de filtros
[3:v:0]
Ingrese el número de transmisión de video número 3 (cámara web)
scale=200:-1
Escala el video a 200x ???, -1 mantiene la relación de aspecto, por lo que un video 600x480 se convierte en 200x160.
[webcam]
Llame a la salida escalada "webcam".
,
Continúe con el siguiente filtro en esta cadena.
[2:v:0]
Ingrese la secuencia de video número 2 0 (escritorio)
[webcam]
La transmisión de la webcam a escala.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
Superponga la segunda entrada sobre la primera entrada, colocando la segunda entrada 10 píxeles desde la derecha y 10 píxeles desde la parte inferior.

Además, puede configurar la fuente de captura de la tarjeta de sonido para que se mezcle para obtener lo que la computadora emite, y a menudo puede activar el silencio del micrófono para obtener un loopback del monitor del micrófono, pero para que funcione correctamente debe usar un conector o pulso. No sé por qué Jack no funcionó para ti, así que no puedo ayudarte con eso, lo siento.

congelado
fuente