Połącz dwa źródła dźwięku z x11grab, możliwe?


11

Obecnie korzystam z następującej konfiguracji.

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

Co chcę upiec:

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

czy to możliwe? A może nawet dodać „to, co słyszę” (aka odtwarzanie), że tak powiem?

Próbowałem czegoś podobnego do (ale nie do końca zrozumiałego -mapa)

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

Ale to nie poszło tak dobrze.

Jestem teraz tak blisko, to daje mi kanały dźwiękowe, ale wszystko brzmi jakbym był w małej puszce.

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

Pojawia się tylko wtedy, gdy zmiksuję oba dźwięki razem. Próbuję tu także dostać JACK, ale bez żadnych faktycznych rezultatów (myślałem, że przekażę wszystko przez płytę miksera, aby zwolnić ffmpeg z miksowania).

Działa z:

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

Daje to jednak:

[alsa @ 0x1399280] nie może ustawić formatu próbki 0x10000 2 (nieprawidłowy argument)

jack: Błąd wejścia / wyjścia


To tylko sugestia, ale Sox to po prostu zaimplementowane narzędzie cli zaprojektowane do tego rodzaju rzeczy. Wydaje się, że mrożona ma dość solidne podejście.
mikeserv

Odpowiedzi:


2

Powinieneś być w stanie użyć filtra amix do zmiksowania swojego dźwięku.

Przykład:

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>

Dodałem również nakładkę kamery internetowej, aby ją usunąć, zdjąć linię kamery, średnik i definicje po średniku.

Należy pamiętać, że może być konieczne zdefiniowanie -maps, jeśli dodasz jakiekolwiek dane wejściowe, które mają wiele strumieni, aby usunąć te z zewnątrz.

Wyjaśnienie:

-filter_complex
definiuje filtry z wieloma wejściami lub wyjściami
[0:a:0]
Wprowadź strumień audio 0 zera (radio internetowe)
[1:a:0]
Strumień audio wejścia 1 nr 0 (mikrofon)
amix=inputs=2
Miksuj ze sobą dwa strumienie audio, jeśli nie zdefiniowano żadnych strumieni wejściowych, automatycznie wybiera dwa strumienie, więc w tym przypadku powinieneś być w stanie pominąć dwie powyższe definicje.
;
Rozpocznij nowy łańcuch filtrów
[3:v:0]
Wejściowy strumień wideo nr 3 (kamera internetowa)
scale=200:-1
Skaluj wideo do 200x ???, -1 zachowuje proporcje, więc film 600x480 staje się 200x160.
[webcam]
Nazwij skalowane wyjście „kamerą internetową”.
,
Przejdź do następnego filtra w tym łańcuchu.
[2:v:0]
Strumień wideo wejścia 2 numer 0. (komputer stacjonarny)
[webcam]
Skalowany strumień kamery internetowej.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
Nakładaj drugie wejście na pierwsze wejście, umieszczając drugie wejście 10 pikseli z prawej strony i 10 pikseli z dołu.

Możesz także ustawić źródło przechwytywania karty dźwiękowej na miksowanie, aby uzyskać to, co wyprowadza komputer, i często możesz wyłączyć wyciszenie mikrofonu, aby uzyskać sprzężenie zwrotne monitora mikrofonu, ale aby zapewnić jego prawidłowe działanie, musisz użyć gniazda jack lub pulsu. Nie wiem, dlaczego Jack nie pracował dla ciebie, więc nie mogę ci w tym pomóc, przepraszam.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.