Вернуться назад

OBS

Установка:

sudo pacman -S obs-studio

В OBS есть два типа кодирования:

  1. Аппаратноеq (через видеокарту)
  2. Программное (через CPU)

На Arch OBS часто по умолчанию выбирает NVENC или VAAPI, даже если видеокарта – не NVIDIA, или драйвер не установлен вообще.

Выбор кодировщика: Файл → Настройки → Вывод. Здесь нужно поменять режим вывода с "Простой" на "Расширенный", чтобы можно было выбрать кодировщик с аппаратным ускорением. Или можно просто оставить x264 – так стабильнее.

Кодировщик звука по умолчанию: libfdk AAC. Доступен также FFmpeg AAC. Лучше оставить libfdk AAC по умолчанию. Это AAC-кодировщик от Fraunhofer (очень качественный). OBS использует его напрямую. Лучшее качество звука при том же битрейте. К минусам можно отнести чуть большую нагрузку, но она незаметна.

Доступные форматы записи:

Лучше записывать в .mkv. Если нужен .mp4, то: Файл → Ремультиплексировать записи.

Список доступных кодировщиков видео на вкладке «Запись»:

Здесь выбираем x264 вместо дефолтного (Использовать кодировщик потока), чтобы не зависеть от настроек трансляции и чтобы была доступна кнока "Пауза".

Preset (Пресет) определяет баланс между скоростью и качеством:

Для обычного игрового захвата на x264 лучше выбрать veryfast. Если CPU позволяет, можно пробовать faster.

Rate Control (Управление битрейтом)

У OBS на Wayland нет прямого захвата окна или игры, как в X11. Всё делается через PipeWire + xdg-desktop-portal. OBS не видит окна напрямую — он просит разрешение у композитора.

Список источников:

В этом списке нет захвата экрана. Чтобы он появился нужно:

sudo pacman -S pipewire pipewire-pulse wireplubmer xdg-desktop-portal xdg-portal-desktop-wlr
    # Это всё, что нужно для flatpack-версии

pacman -S qt5-wayland qt5ct

# и нужно настроить переменную окружения:
export QT_QPA_PLATFORM=wayland
export XDG_CURRENT_DESKTOP=sway
export XDG_SESSION_DESKTOP=sway
export XDG_CURRENT_SESSION_TYPE=wayland


# dd
export QT_QPA_PLATFORMTHEME="qt5ct"

В списке источников появился пункт "Захват экрана (PipeWire)". Но я даже не заметил, когда он появился. У меня установлен qt6-wayland. Я установил xdg-desktop-portal-wlr, перезагрузился. Переустановил OBS. Но не заметил, что пункт появился. А спустя пол часа смотрю: а он уже есть в списке. В какой момент он появился – я так и не понял.

wlrobs – An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors. Он есть в AUR. Ссылка: https://hg.sr.ht/~scoopta/wlrobs.

После установки плагина wlrobs в источниках пояивилось ещё два пункта:

И первый из них (Wayland output(dmabuf)) работает лучше.

Ссылочки: https://bbs.archlinux.org/viewtopic.php?id=278713, https://obsproject.com/forum/threads/no-window-capture-arch-kde-wayland.176497/

Подробная статья про OBS на Arch + Wayland: https://wiki.archlinux.org/title/Open_Broadcaster_Software

Самое главное!

Чтобы запись была плавной и без подёргиваний, нужно поменять разрешение монитора. У меня по умолчанию оно выставлено в 144 Hz. А игровое видео я записывал с частотой в 60 fps. И видео получалось немного дёрганным. Просто нужно выставить разрешение на мониторе:

swaymsg output HDMI-A-2 mode 1920x1080@60Hz

Потом выставляем в OBS целочисленные FPS в 60 и записываем видео.

звук

Добавляем в источник "Захват входного потока аудио (PulseAudio)". При этом если мы сейчас поставим запись, то будет записывать две копии аудиодорожки. Это потому что по умолчанию в разделе "Аудио" тоже включён микрофон. Надо его отключить. Настройки → Аудио → Общие устройства аудио → Микрофон/дополнительный звук

Behringer UMC22 по умолчанию пишет только в левый канал. В правом – тишина. Чтобы исправить это, заходим в Микшер звука (Audio Mixer) и в "Расширенные свойства звука" (Advanced Audio Properties). В колонке Mono ставим галочку. Всё. Теперь OBS будет писать в оба канала.

Разделить звуковые дорожки

Я хочу, чтобы у меня фон писался в одну звуковую дорожку, а микрофон – в другую.

Теперь у нас фоновый звук должен писаться в первую дорожку, а микрофон – во вторую.

wf-recorder

Нужен pipewire, xdg-desktop-portal, xdg-desktop-portal-wlr

wf-recorder

# файл video.mkv, битрейт: 60
wf-recorder -f video.mkv -r 60

# если ещё хочу записывать звук:
wl-recorder -f video.mkv -r 60 -i -a

# 
wf-recorder -c h264_vaapi -d /dev/dri/renderD128 -p color_range=2

# записываем через software x264 (рекомендую):
# Нагрузка будет выше, но цвета должны быть лучше
wf-recorder -c libx264 -p color_range=2 -f out.mp4

# Вот так у меня виснет:
wf-recorder -c libx264 -p preset=slow -p crf=18 -r 60
# А вот так уже норм:
wf-recorder -c libx264 -p preset=faster -p crf=18 -r 60

# Решило проблему с цветами:
wf-recorder \
  --pixel-format rgb24 \
  -c libx264rgb \
  -f out.mkv

# Тоже работает:
  wf-recorder \
  -c libx264 \
  -p vf=eq=gamma=0.85 \
  -f out.mp4


# Рекомендовано гпт:
wf-recorder \
  --pixel-format rgb24 \
  -c libx264rgb \
  -p crf=18 \
  -f out.mkv
# Несжатое видео:
wf-recorder --pixel-format rgb24 -c rawvideo -f capture.avi

# Нормальное сжатие:
ffmpeg -i capture.avi \
  -c:v libx264rgb \
  -preset slow \
  -crf 18 \
  final.mkv

НО! avi - старый формат. Он почему-то меняет rgb на bgr. Если я хочу записывать несжатое видео, то лучше писать его в bgr:

wf-recorder --pixel-format bgr24 -c rawvideo -f capture.avi

# А потом сжимаем его:
ffmpeg -i capture.avi -c:v libx264rgb -preset slow -crf 18 final.mkv

Либо можно писать несжатое видео в .nut. Тогда не будет RGB-брака.


wf-recorder --pixel-format rgb24 -c rawvideo -f capture.nut

v4l2-ctl

Проверим, видит ли система камеру:


ls /dev/video*
   # /dev/video0  /dev/video1

sudo pacman -S v4l-utils

# Проверяем версию
v4l2-ctl --version

# Проверим камеру через v4l-utils:
v4l2-ctl --list-devices

Форматы, которые поддерживает веб-камера:

v4l2-ctl --list-formats-ext

s

Экран


mkfifo /tmp/screen_fifo
wf-recorder -f /tmp/screen_fifo.mkv -g 1920x1080+0+0

Веб-камера + наложение:


ffmpeg -y -i /tmp/screen_fifo.mkv -f v4l2 -i /dev/video0 \
-filter_complex "[1:v] scale=320:240 [cam]; [0:v][cam] overlay=W-w-10:H-h-10" \
-c:v libx264 -preset veryfast -crf 23 final_output.mkv
# нихрена нерабочий

ffmpeg -y -i /tmp/screen_fifo.mkv -f v4l2 -i /dev/video0 \
-filter_complex "[1:v] scale=320:-1:force_original_aspect_ratio=decrease [cam]; [0:v][cam] overlay=W-w-10:H-h-10" \
-c:v libx264 -preset veryfast -crf 23 final_output.mkv

Моя проблемка: https://obsproject.com/forum/threads/system-stuttering-when-using-pipewire-screen-capture-on-kde-plasma.172753/

веб-камера

# v4l2src содержится именно в этом пакете (good plugins):
sudo pacman -S gst-plugins-good

# элемент x264enc содержится в плагине gst-plugins-ugly
sudo pacman -S gst-plugins-ugly

Проверим, видит ли GStreamer источник камеры:


gst-device-monitor-1.0 Video

Запускаем запись:

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4

# Чуть изменённый вариант (с параметром "e"):
gst-launch-1.0 -e v4l2src device=/dev/video0 ! videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4

В примере выше мы записываем файл .mp4. И его нужно корректно завершать. Если мы просто нажмём Ctrl+C, то файл потом не запустится. Поэтому надо запускать запись с параметром -e. Тогда Ctrl+C нормально завершит запись. -e = End Of Stream корректно.

Запись в формате .mkv:


gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! x264enc ! matroskamux ! filesink location=output.mkv

Kooha