Мне нужна помощь в выяснении возможных причин, по которым ПК и/или VLC используют ЦП для воспроизведения видео 4K вместо ГП. (Я думаю, что ЦП всегда используется для рендеринга видео, независимо от видео, потому что графики производительности системы всегда показывают, возможно, 2–5% использования ГП и 30–80% использования на некоторых или всех потоках ЦП)
Вот что я знаю:
- играяэто видеов браузере на youtube в 2160p 60fps, работает просто отлично с 80% загрузкой процессора на половине ядер - хотя все еще не так много загрузки графического процессора в моем системном мониторе. ИграюодинаковыйОднако видео в VLC использует 100% моего процессора Ryzen 5 6 ядер 12 потоков 4,2 ГГц и в лучшем случае заикается и обычно стоит на месте. [ПРАВКА] Я получил видео в 3 форматах: mp4, mkv и webm, все 4k@60. MKV и WEBM используют те же ресурсы (cpu), что и в браузере/yt, однако FPS ниже, определенно ниже 20 кадров в секунду вместо 60 кадров в секунду. Однако MP4 использует 100% моего процессора и заикается, как я и объяснял.
- VLC настроен на использование аппаратного ускорения, и я перепробовал все варианты (Автоматически, Direct3D 11, DirectX DXVA 2.0), перезапускал VLC (и даже мой ПК) после изменений, но никакой разницы.
- Я использую последнюю версию VLC (3.0.11)
- GPU - это gtx 1660Ti, который должен быть более чем избыточным с точки зрения мощности, может делать 120 Гц VR и т. д., и использует последние драйверы nvidia. У меня нет других/интегрированных видеокарт.
Возможно ли, что из-за того, что у меня нет какого-то кодека/драйвера в системе, VLC по умолчанию использует рендеринг CPU? И тот же вопрос для моего браузера, который работает с лучшим fps, чем в VLC, но все равно, похоже, использует только CPU. Также как мне узнать, какое декодирование поддерживается на каком оборудовании и какие кодеки нужны? Как мне найти журнал или что-то еще, где VLC сообщает мне, рендерит ли он текущее видео с помощью GPU или нет и почему?
Почему так сложно декодировать видео на GPU? Если вы можете написать вычислительный шейдер, который выполняет вычисления GPGPU для чего угодно, например, расчета физики, или генерации сеток, или скульптурирования облаков точек, или факторизации простых чисел, или запуска 100%-ной демосцены видеоигры в стиле shadertoy, почему бы не сделать это с видео? Я понимаю, что некоторые кодеки очень своеобразны и, возможно, предназначены для CPU, но наверняка игровой GPU 2019-2020 годов может перебрать его лучше, чем 6-ядерный CPU или видеомодуль чипа ARM паршивого смартфона.
[Обновление] Я обнаружил, что это связано с кодированием. Видео в контейнере MP4 вообще не использует GPU, тогда как MKV и WEBM используют GPU:
Похоже, что youtube MP4 используетКодирование кодеком AV1а остальные 2 используютVP9 кодирование. Оба эти формата имеют открытый исходный код, поэтому у VLC не должно возникнуть с ними проблем.
Это такжепохоже, что нет никаких видеокартпрямо сейчас, которые встраивают декодер в свой чип. Но есть ли для этого ASIC или нет, не означает, что сам графический процессор не может декодировать его способом GPGPU (как также упоминается в статье в Википедии для AV1). В любом случае, это не решает мою проблему, но объясняет причины.
решение1
Я обнаружил, что проблема связана с кодировкой. Youtube упаковывает видео в 3 контейнера: контейнер MP4 при воспроизведении в VLC вообще не использует GPU, в то время как другие 2 контейнера MKV и WEBM используют GPU:
Похоже, что youtube MP4 используетКодирование кодеком AV1а остальные 2 используютVP9 кодирование. Оба эти формата являются форматами с открытым исходным кодом, поэтому VLC не должен иметь с ними проблем, но по какой-то причине не может воспроизводить AV1 на GPU. Поэтому возникает вопрос, почему VLC / Windows не может воспроизводить av1 на GPU.
Это такжепохоже, что нет никаких видеокартпрямо сейчас, которые встраивают декодер AV1 в свой чип (как они сделали с h.264 и h.265). Но есть ли ASIC и т. д. для этого или нет, не означает, что сам графический процессор не может декодировать его способом GPGPU (как также упоминается в статье википедии для AV1). В любом случае, это не решает мою проблему на 100%, но объясняет причины, и теперь я знаю, что искать (как воспроизводить AV1 на графическом процессоре - но я не знаю, как часто я буду сталкиваться с AV1 в своей повседневной жизни, поэтому я пока счастлив без него)
решение2
Причина разницы в том, что VLC использует собственные кодеки, а браузер — системные кодеки.
Я скачал видео в нескольких разрешениях. Он использует кодек, идентифицированный как "isom (isom/iso2/mp41)", и попробовал его:
- С VLC, версия 8K - нет видео
- В VLC, версия 4K - видео дергается с большими интервалами между кадрами (зависает)
- С MP-HC (x64), 8K и 4K версиями - все плавно, но все ядра задействованы на 100% и около 30-50% графического процессора
- С Chrome YouTube — плавно, с небольшим использованием CPU и GPU, но 720p — самое большое доступное разрешение
- С Firefox YouTube — версия 4K, плавная, мало ЦП, 20-50% ГП
- НО когда видеофайлы 8K и 4K были удаленынапрямую в Firefox или Chrome воспроизведение видео фактически не работало.
Мой вывод таков, что этот кодек требует много ресурсов и является довольно проблемным для большинства игроков. Браузеры при использовании YouTube обманывают, используя гораздо более низкое разрешение, чем то, которое они должны использовать.