Установка:
sudo pacman -S obs-studio
В OBS есть два типа кодирования:
На Arch OBS часто по умолчанию выбирает NVENC или VAAPI, даже если видеокарта – не NVIDIA, или драйвер не установлен вообще.
Выбор кодировщика: Файл → Настройки → Вывод. Здесь нужно поменять режим вывода с "Простой" на "Расширенный", чтобы можно было выбрать кодировщик с аппаратным ускорением. Или можно просто оставить x264 – так стабильнее.
Кодировщик звука по умолчанию: libfdk AAC. Доступен также FFmpeg AAC. Лучше оставить libfdk AAC по умолчанию. Это AAC-кодировщик от Fraunhofer (очень качественный). OBS использует его напрямую. Лучшее качество звука при том же битрейте. К минусам можно отнести чуть большую нагрузку, но она незаметна.
Доступные форматы записи:
Лучше записывать в .mkv. Если нужен .mp4, то: Файл → Ремультиплексировать записи.
Список доступных кодировщиков видео на вкладке «Запись»:
Здесь выбираем x264 вместо дефолтного (Использовать кодировщик потока), чтобы не зависеть от настроек трансляции и чтобы была доступна кнока "Пауза".
Preset (Пресет) определяет баланс между скоростью и качеством:
Для обычного игрового захвата на x264 лучше выбрать veryfast. Если CPU позволяет, можно пробовать faster.
У 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 будет писать в оба канала.
Я хочу, чтобы у меня фон писался в одну звуковую дорожку, а микрофон – в другую.
Теперь у нас фоновый звук должен писаться в первую дорожку, а микрофон – во вторую.
Нужен 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
Проверим, видит ли система камеру:
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
Экран
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