Это статья, в которой я ставлю эксперимент - можно ли стримить на Твич с помощью карты от AMD и сравним это с кодировкой на процессоре.
Кодировка на процессоре (x264)
Простой вариант, всего три настройки и хорошее качество.
Управление битрейтом - каждый знает что для Твича должен быть CBR, который держит битрейт на постоянном уровне.
Битрейт - ширина канала, которая выделяется для стрима, для Твича максимум 6000
Интервал ключевых кадров - время в секундах, после которого следует вставлять ключевой кадр (I-Frame), для Твича - 2 секунды
Предустановка использования ЦП - то, сколько процессорного времени будет отнимать OBS для кодирования, чем ниже параметр по списку, тем больше используется процессор и при этом лучше качество
Профиль - профиль h.264
- baseline - для совместимости со старыми устройства
- main - для стримов
- high - для стримов в высоком разрешении
Профиль high выглядит лучше main и имеет алгоритмы, которые позволяют лучше сжимать видео. Поэтому я остановился на нём.
Настройка - специальные настройки кодировщика, я оставил пустым
Настройка x264 - позволяет шаманить с кодировщиком с помощью ключей команды ffmpeg
А вот результаты с разными разрешениями и предустановками ЦП. Я использовал небольшой лайфхак - стрим идёт не в 60, а в 50 fps, чтобы улучшить качество картинки, но не потерять динамику.
1080p с Veryfast самый затратный вариант и видны просадки fps в игре
C Superfast процессор уже дышит свободнее, но и качество похуже
Чтобы меньше грузить процессор лучше спуститься на более низкое разрешение.
Даже Superfast всё равно отбирает 12% (Ryzen 7 2700), что для Call of Duty (например) неприемлемо, поэтому рассмотрим план Б...
Кодировка на видеокарте (AMD Advanced Media Framework)
Если стримить на Youtube с высоким битрейтом, то можно также обойтись простыми настройками как в случае с x264, но с битретом 6000 кбит на базовых настройках сложно получить хорошую картинку даже в 720p ( сужу по своей 5700XT). Смогу ли я настроить кодек хотя бы до уровня Superfast x264? Интрига! Мастер настройки нам в помощь.
Предустановка - здесь можно выбрать предустановки для стриминговой платформы
Предустановка качества - для хорошей картинки ставим Качество
Профиль - профиль h.264, ставим High
Уровень профиля - в зависимости от разрешения и fps ставятся некоторые ограничения, чем выше профиль, тем меньше ограничений и возможно лучше качество, можно оставить Автоматическое
Тип кодирования - оставить как есть или выставить CABAC он даст лучшее качество
Максимум кадров-ссылок - количество ссылок в одном кадре (B-кадре или P-кадре) на другие кадры , чем их больше тем потенциально может быть лучше качество, меньшее число разгружает работу кодировщика
Режим пред-прохода - предварительно обрабатывает кадры в Group of Pictures (GOP, по умолчанию между ключевыми кадрами), включение может улучшить качество
Минимальное/Максимальное QP - параметры квантования, вкратце - чем меньше число, тем лучше картинка и меньше пикселизация
Данные накопителя - заполняет пустующие место поддерживая битрейт, ну как бы надо для CBR
Пропуск кадров - пропускает кадры, если не поток не влезает в рамки битрейта, чтобы он работал надо уменьшать максимальный QP
VBAQ - Дисперсия на основе адаптивного квантования, практика показала, что лучше включить
HRD - оставить включённой, т.к. эта технология помогает не выходить за рамки битрейта
Повышение качества изображения с быстрым движением - бытует мнение, что эта функция не работает на карточках ранее 5000-й серии, поэтому пока выкл.
Буфер VBV - это собственно буфер кодека, по канону он должен быть 2 * Битрейт, но с ним можно играть в большую и меньшую сторону с риском потерь пакетов. Если уменьшить буфер и убрать в нуль Изначальное заполнение буфера то можно избежать затяжной пиксельной каши, но стрим будет с неё начинаться
Период IDR в кадрах - тут должен определяться размер GOP, но этот параметр не работает
Интервал I-кадров / Период I-кадров - эти параметры по повторяют параметр Интервал ключевых кадров
Интервал P-кадров / Период P-кадров - задать в секундах (интервал) или в кадрах (период) когда должен вставляться P-кадр. Чем чаще P-кадры, тем лучше картинка. Между P-кадрами вставляются B-кадры, т.е. когда мы ставим Период P-кадров=2, то мы имеем ввиду, что у нас будут идти два B-кадра, затем один P.
Передача OpenCL - Передача кадров с помощью OpenCL вместо памяти GPU. Преобразование OpenCL - Преобразует кадр на GPU, используя OpenCL вместо DirectCompute. Не знаю как эти параметры меняют качество, но они могут влиять на производительность от случая к случаю.
Чтобы улучшить картинку, я также включил Коррекцию изображения в
настройках драйвера и вот что получилось в 720p и 1080p
Вот ещё один вариант в 864p
А что если включить "Повышение качества изображения с быстрым движением"?
Как я говорил эта функция возможно доступна только от 5000-й серии и рассмотрим её включение отдельно, т.к. придётся поменять некоторые настройки
И вот так выглядит результат
Когда я сам искал какое-то описание параметра кодировщика AMF, то я нашёл мало руководств, где объясняли бы все параметры. Надеюсь эта статья кому-нибудь поможет в этой нелёгкой настройке AMF или подтолкнёт кого-то на новые эксперименты и открытия!
На этом всё спасибо за внимание.