LINUX.ORG.RU

декодирование с помощью hevc_cuvid\h264_cuvid

 ,


0

1

Понадобилось недавно транскодировать пару фильмов из HEVC в H264(телевизор не тянет). Сначала попробовал на процессоре и увидел что скорость выходит 0.4х. Меня это расстроило и я решил попробовать задействовать недавно купленную GTX1060. Нагуглил что для кодирования используется nvenc. С кодированием проблем не возникло, а вот с декодированием(чтобы полностью использовать транскодирование на карточке) возникли проблемы.

Все мануалы пишут что нужно использовать декодеp h264_cuvid, но у меня его в упор нет. Есть h264_vdpau, но он сыплет ошибками при использовании в ffmpeg.

Думал что cuvid отсутствует от того что я не установил библиотеки cuda. Установил. Пересобрал ffmpeg. Пишет что есть hwaccels h264_cuvid, но выбрать его для декодирования(ffmpeg -hwaccel cuvid) не выходит, пишет что нет такого метода.

В общем, вопрос в том как задействовать в ffmpeg декодирование на GPU?(с целью получить полный процесс транскодирования на GPU) Во всяких mpv декодирование на vdpau вполне работает и жрет 2% процессора.

PS: только кодирование(декодирование на CPU) на GPU дает скорость 2.5х.

★★★★★

исходник небось 10битный, обломись cuvid умеет только NV12 на выход, да, версию ffmpeg, какие ошибки конкретно выводит ffmpeg и состав формат исходного потока не надо сообщать

нвидиевцы в паскале улучшили декодер в плане производительности, но все равно, на моем максвел2 декод на cpu отстает от декода на gpu на доли процента

hizel ★★★★★ ()
Ответ на: комментарий от hizel

Так и хорошо что «обломись cuvid умеет только NV12 на выход», т.к. nvenc умеет только его на вход, как я понял. У меня проблема в том что вообще нет декодера с словом cuvid в названии, а vdpau сыпет ошибками.

Loki13 ★★★★★ ()
Ответ на: комментарий от hizel

на моем максвел2 декод на cpu отстает от декода на gpu на доли процента

У меня феном старенький. с hevc справляется с трудом, а видяха свежая, должна по идее раза в 4 быстрее, а то nvenc утилизирует GPU только на 15%. К тому же у блоба есть «Модуль ядра Унифицированной памяти NVIDIA, nvidia-uvm.ko», что должно помогать в транскодировании.

Loki13 ★★★★★ ()

Хочу чтобы заработал вариант

ffmpeg -hwaccel cuvid -i «$file» -c:v hevc_nvenc -preset slow -crf 18 -c:a copy hevc/«$file»

Вот только не взирая на наличие cuda, ffmpeg не находит этот декодер.

Loki13 ★★★★★ ()
Ответ на: комментарий от anonymous
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input -c:v h264_nvenc -preset slow output.mkv

Я так и делаю. Мне в ответ что нет такого декодера h264_cuvid(дословно не помню) и нет такого hwaccels.

Не дописал просто в строке примера "-c:v h264_cuvid".

Попробую вечером руками в ебилд добавить --enable-cuda и --enable-cuvid. Может быть поможет.

Loki13 ★★★★★ ()
Ответ на: комментарий от Loki13

Пишет что есть hwaccels h264_cuvid

значит cuvid собран

ffmpeg -hwaccel cuvid -c:v hevc_cuvid -i input input.mkv -c:v h264_nvenc -preset slow output.mkv

раз исходник hevc

hizel ★★★★★ ()
Ответ на: комментарий от hizel

значит cuvid собран

ffmpeg -hwaccel cuvid -c:v hevc_cuvid -i input input.mkv -c:v h264_nvenc -preset slow output.mkv

возвращает

Unknown decoder 'hevc_cuvid'

Сейчас пробую cuda-7 поставить, была 8. Может ffmpeg не научился еще со свежей работать.

Loki13 ★★★★★ ()

А разве в бинарных сборках ffmpeg есть nvenc?

anonymous ()
Ответ на: комментарий от hizel

Ффух. Получилось. Собственно проблема была в том что cuda ставится в /opt/cuda, а ffmpeg для включения поддержки cuvid ищет cuda.h в /usr/include.

После копирования cuda.h в /usr/include и прописывание --enable-cuda и --enable-cuvid в ебилде, ffmpeg собрался наконец с поддержкой.

Результат по h264: с h264 на процессоре ~6х скорость на fhd и 10000kbps, с cuvid 11-12x. Довольно неплохой я считаю прирост. Причём на hevc наверное будет даже больше, но у меня сейчас файлов нет с hevc.

Ах, да, все это было про декодирование, кодирование я ещё позавчера с помощью nvenc осилил. Полностью на проце 1-2х получалось для х264 и 0.4х для hevc.

Loki13 ★★★★★ ()
Последнее исправление: Loki13 (всего исправлений: 2)

А на амуде так можно?

anonymous ()
Ответ на: комментарий от anonymous

На амуде вроде есть VCE, вот только беглый гуглеж показал что пользоваться можно только под вендой. Хотя есть что-то для использования в HandBrake, вот коммит

https://github.com/sr55/HandBrake/blob/0b95451184bf9df20c6f3fd0ab5e7a085dcb55e0/contrib/ffmpeg/A12-vce.patch

Так что может с handbrake из гита что и выйдет, но вероятнее всего заработает(если заработает) только с блобом, я не слышал про реализацию vce в свободных дровах.

Loki13 ★★★★★ ()
Последнее исправление: Loki13 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.