Fusionner deux sources audio avec x11grab, c'est possible?

11

Actuellement, je cours avec la configuration suivante.

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

Ce que je veux cuire:

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

Est-ce possible? Et peut-être même mélanger "ce que j'entends" (aka lecture) pour ainsi dire?

J'ai essayé quelque chose dans le sens de (mais je ne comprends pas bien -map)

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

Mais ça ne s'est pas vraiment bien passé.

Je suis si proche maintenant, cela me donne des canaux sonores, mais tout sonne comme si j'étais à l'intérieur d'une petite boîte de conserve en quelque sorte.

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

Il n'apparaît que lorsque je mixe les deux sons ensemble. J'essaie également de faire entrer JACK ici, mais sans résultats réels (je pensais que je passerais tout via une carte de mixage pour décharger ffmpeg du mixage).

Courir avec:

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

Donne cependant ceci:

[alsa @ 0x1399280] ne peut pas définir le format d'échantillon 0x10000 2 (argument non valide)

jack: erreur d'entrée / sortie

Torxed
la source
Juste une suggestion, mais Sox est un utilitaire cli simplement implémenté conçu pour ce genre de chose. surgelé semble cependant avoir une poignée assez ferme.
mikeserv

Réponses:

2

Vous devriez pouvoir utiliser le filtre amix pour mélanger votre audio.

Exemple:

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>

J'ai également ajouté une superposition de webcam, pour la supprimer, enlever la ligne de webcam, le point-virgule et les définitions après le point-virgule.

Sachez que vous devrez peut-être définir -maps si vous ajoutez une entrée qui a plusieurs flux pour supprimer les flux étrangers.

Explication:

-filter_complex
définit des filtres avec plusieurs entrées ou sorties
[0:a:0]
Entrez le numéro de flux audio 0. (radio Internet)
[1:a:0]
Entrez le numéro de flux audio 1 de 0. (microphone)
amix=inputs=2
Mélangez deux flux audio ensemble, si aucun flux d'entrée n'est défini, il en sélectionne automatiquement deux, donc dans ce cas, vous devriez pouvoir omettre les deux définitions ci-dessus.
;
Démarrer une nouvelle chaîne de filtres
[3:v:0]
Entrez le numéro de flux vidéo 3 de 0. (webcam)
scale=200:-1
Redimensionnez la vidéo à 200x ???, -1 conserve le rapport hauteur / largeur, donc une vidéo 600x480 devient 200x160.
[webcam]
Appelez la sortie mise à l'échelle "webcam".
,
Passez au filtre suivant de cette chaîne.
[2:v:0]
Entrez le flux vidéo numéro 2 de 0. (bureau)
[webcam]
Le flux de webcam à l'échelle.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
Superposez la deuxième entrée sur la première entrée, en plaçant la deuxième entrée à 10 pixels de droite et à 10 pixels de bas.

En outre, vous pouvez définir la source de capture de la carte son pour qu'elle se mélange pour obtenir ce que l'ordinateur produit, et vous pouvez souvent réactiver le microphone pour obtenir un retour de boucle de moniteur de microphone, mais pour le faire fonctionner correctement, vous devez utiliser une prise ou une impulsion. Je ne sais pas pourquoi jack n'a pas fonctionné pour vous, donc je ne peux pas vous aider avec ça, désolé.

congelé
la source