Gabungkan dua sumber audio dengan x11grab, mungkin?

11

Saat ini saya sedang menjalankan dengan pengaturan berikut.

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

Apa yang ingin saya panggang:

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

Apakah ini mungkin? Dan mungkin bahkan mencampur "apa yang saya dengar" (alias pemutaran) sehingga untuk berbicara?

Saya sudah mencoba sesuatu di sepanjang baris (tetapi tidak sepenuhnya memahami -map)

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

Tapi itu tidak benar-benar berjalan dengan baik.

Saya sangat dekat sekarang, ini memberi saya saluran suara, tetapi semuanya terdengar seperti saya berada di dalam kaleng kecil macam.

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

Itu hanya muncul ketika saya mencampur dua suara bersama. Mencoba untuk mendapatkan JACK di sini juga, tetapi tanpa hasil yang sebenarnya (saya pikir saya akan melewati semuanya melalui papan mixer untuk membongkar ffmpeg dari pencampuran).

Berjalan dengan:

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

Namun memberikan ini:

[alsa @ 0x1399280] tidak dapat mengatur format sampel 0x10000 2 (Argumen tidak valid)

jack: Kesalahan input / output

Torx
sumber
Hanya sebuah saran, tetapi Sox adalah utilitas cli yang diimplementasikan sederhana yang dirancang untuk hal semacam ini. beku tampaknya memiliki pegangan yang cukup kuat di atasnya sekalipun.
mikeserv

Jawaban:

2

Anda harus dapat menggunakan filter amix untuk menggabungkan audio Anda.

Contoh:

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>

Saya menambahkan overlay webcam juga, untuk menghapusnya, melepas garis webcam, semi-colon dan definisi setelah semi-colon.

Pastikan Anda harus mendefinisikan -maps jika Anda menambahkan input yang memiliki beberapa aliran untuk menghapus yang asing.

Penjelasan:

-filter_complex
mendefinisikan filter dengan banyak input atau output
[0:a:0]
Masukkan nomor stream audio 0. 0 (radio internet)
[1:a:0]
Input 1 nomor aliran audio 0. (mikrofon)
amix=inputs=2
Campurkan bersama dua aliran audio, jika tidak ada aliran input yang ditentukan, maka akan dipilih secara otomatis dua, jadi dalam hal ini , Anda harus dapat mengabaikan dua definisi di atas.
;
Mulai rantai filter baru
[3:v:0]
Masukkan nomor streaming video 3 0. (webcam)
scale=200:-1
Skala video ke 200x ???, -1 menjaga rasio aspek, sehingga video 600x480 menjadi 200x160.
[webcam]
Sebut output skala "webcam".
,
Lanjutkan ke filter berikutnya dalam rantai ini.
[2:v:0]
Masukkan nomor streaming video 2 0. (desktop)
[webcam]
Aliran webcam yang diskalakan.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
Overlay input kedua atas input pertama, menempatkan input kedua 10 piksel dari kanan, dan 10 piksel dari bawah.

Selain itu, Anda dapat mengatur sumber kartu suara untuk mencampur untuk mendapatkan apa yang dihasilkan komputer, dan Anda sering dapat membunyikan mikrofon untuk mendapatkan loopback monitor mikrofon, tetapi untuk membuatnya berfungsi dengan baik Anda harus menggunakan jack atau pulsa. Saya tidak tahu mengapa jack tidak bekerja untuk Anda, jadi saya tidak dapat membantu Anda dengan itu, maaf.

beku
sumber