Возможно объединение двух аудиоисточников с x11grab?

11

В настоящее время я работаю со следующей настройкой.

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

Что я хочу испечь в:

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

Это возможно? И, может быть, даже смешать в «то, что я слышу» (так называемое воспроизведение), так сказать?

Я пробовал что-то вроде (но не полностью понимая -map)

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

Но это не очень хорошо.

Я так близко сейчас, это дает мне звуковые каналы, но все звучит так, будто я нахожусь в небольшой консервной банке.

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

Появляется только когда я смешиваю два звука вместе. Попытка включить JACK и здесь, но без каких-либо реальных результатов (я думал, что я пропущу все через микшерную плату, чтобы выгрузить ffmpeg из микширования).

Работает с:

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

Дает это однако:

[alsa @ 0x1399280] не может установить формат образца 0x10000 2 (неверный аргумент)

разъем: ошибка ввода / вывода

Torxed
источник
Просто предложение, но Sox - это просто реализованная Cli-утилита, предназначенная для такого рода вещей. замороженный, кажется, имеет довольно твердую ручку на нем, хотя.
mikeserv

Ответы:

2

Вы должны быть в состоянии использовать фильтр amix для микширования звука.

Пример:

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>

Я также добавил наложение веб-камеры, чтобы удалить его, снимите строку веб-камеры, точку с запятой и определения после точки с запятой.

Имейте в виду, что вам может потребоваться определить -maps, если вы добавляете какие-либо входные данные, имеющие несколько потоков, для удаления посторонних.

Объяснение:

-filter_complex
определяет фильтры с несколькими входами или выходами
[0:a:0]
Входной аудиопоток № 0 (интернет-радио)
[1:a:0]
Входной аудиопоток № 0 (микрофон)
amix=inputs=2
Смешайте два аудиопотока, если входные потоки не определены, он автоматически выбирает два, так что в этом случае вы сможете пропустить два приведенных выше определения.
;
Начать новую цепочку фильтров
[3:v:0]
Входной видеопоток № 3 (веб-камера)
scale=200:-1
Масштабировать видео до 200x ???, -1 сохраняет соотношение сторон, поэтому видео 600x480 становится 200x160.
[webcam]
Назовите масштабированный вывод "веб-камера".
,
Перейдите к следующему фильтру в этой цепочке.
[2:v:0]
Входной видеопоток № 2 (рабочий стол)
[webcam]
Масштабированный поток веб-камеры.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
Наложите второй вход на первый вход, поместив второй вход на 10 пикселей справа и на 10 пикселей снизу.

Кроме того, вы можете настроить микширование источника захвата звуковой карты, чтобы получить то, что выводит компьютер, и вы часто можете включить микрофон, чтобы получить петлю монитора микрофона, но для того, чтобы он работал должным образом, вы должны использовать разъем или импульс. Я не знаю, почему Джек не работает для вас, поэтому я не могу помочь вам с этим, извините.

замороженный
источник