Я использую этот скрипт:http://www.thegameengine.org/miscellaneous/streaming-twitch-tv-ubuntu/для трансляции на Twitch. Это работает, но я не хочу транслировать свой микрофон, только звук с компьютера. Как мне изменить скрипт, чтобы добиться этого?
решение1
Выбор компьютерного звука
PulseAudio
Это можно сделать с помощью PulseAudio и pavucontrol
. ОтHOWTO: Правильная трансляция экрана в Linux:
Установить
pavucontrol
. Начните запись сffmpeg
. Запуститьpavucontrol
. Перейдите на вкладку «Запись», и вы найдетеffmpeg
там перечисленные. Измените аудиозахват с «Внутреннее аудио аналоговое стерео» на «Монитор внутреннего аудио аналогового стерео». Теперь он должен записывать системный и прикладной звук вместо микрофона.Эта настройка будет запомнена. В следующий раз, когда вы захотите захватить с помощью
ffmpeg
, он автоматически начнет запись системного звука. Если вы хотите вернуть это, используйтеpavucontrol
снова, чтобы вернуться к микрофонному входу.
АЛСА
Кроме того, ALSA может захватывать системный звук, если ваша аудиосистема поддерживает устройство обратной связи, которое часто обозначается как:Стерео микс,Микс волн,Моно Микс, илиЧто ты слышишь. Проверьте alsamixer
, есть ли у вас что-то из этого, ноАппаратная обратная связь в наши дни не так распространена. Затем обратитесь кFFmpeg Wiki: Захват звука с помощью ALSAдля правильного синтаксиса, если ваша система поддерживает эту функцию.
В противном случае я полагаю, что можно создать программную обратную связь с помощью ALSA, но я могу ошибаться и не иметь в этом опыта.
Отстойный сценарий
Команда ffmpeg
в этом ужасном, повторяющемся скрипте имеет некоторые проблемы:
-preset
следует использовать вместо-vpre
-qscale
игнорируется libx264 (используйте-crf
или-b:v
)- Группа картинок не задана (используйте
-g
) - Следует использовать VBV (использовать
-maxrate
и-bufsize
) - Выходные данные могут не использовать совместимую схему субдискретизации цветности (используйте
-pix_fmt yuv420p
) - Входные данные x11grab должны использовать
-framerate
, а не-r
-threads 6
кажется произвольным числом, и не все используют одинаковое оборудование. Вам следует либо использовать значение по умолчанию (удалив-threads
, но это "жадно"), либо установить подходящее значение, которое позволит вам кодировать с удовлетворительной скоростью и при этом оставить достаточно сока для выполнения других вещей, которые вы записываете.
Вместо этого команда должна быть примерно такой:
ffmpeg \
-f alsa -ac 2 -i "$INAUD" \
-f x11grab -video_size "$INRES" -framerate "$FPS" -i :0.0 \
-vcodec libx264 -s "$OUTRES" -preset "$QUAL" -maxrate 1000k -bufsize 2000k -g 50 -pix_fmt yuv420p \
-acodec libmp3lame -ar 44100 -b:a 128k \
-f flv "$STREAM_URL"
Примечание:Не используйте слепо мои примеры значений для -maxrate
, -bufsize
, -g
, и -b:a
. Вы должны настроить их в соответствии со своими потребностями, как описано вКодирование для потоковых сайтов с помощью FFmpeg. Также смРуководство по кодированию видео FFmpeg H.264.