Я пытаюсь закодировать поток 4K (3840x2160) с уровнем меньше или равным 5,0 без успеха.
Я использую ffmpeg последней сборки, драйверы nvidia 410.66. Все докеризировано на образе nvidia/cuda:8.0-devel-ubuntu16.04.
Моя тестовая команда:
ffmpeg -nostdin -loglevel trace -hwaccel cuvid -c:v hevc_cuvid -analyzeduration 10000000 -probesize 10000000 -y -i "udp://239.1.2.3:1234?pkt_size=1316\&timeout=2500000\&buffer_size=409600\&fifo_size=1000000\&overrun_nonfatal=1" -map i:0x100 -filter:v:0 "scale_cuda=w=3840:h=2160" -c:v:0 hevc_nvenc -profile main -level 150 -preset llhp -zerolatency 1 -cbr 1 -rc cbr_ld_hq -b:v:0 2000k -minrate:0 1500k -maxrate:0 2400k -bufsize:0 1000k -map i:0x101 -c:a copy -f ismv /tmp/test.ismv
Оно должно быть меньше или равно, потому что спецификация Apple гласит:
1.6. Профиль, уровень и уровень для HEVC ДОЛЖНЫ быть меньше или равны профилю Main10, уровень 5.0, высокий уровень.
Странно то, что если я кодирую с меньшим разрешением (HD), это работает, но с разрешением 4K я получаю эту ошибку:
Ошибка InitializeEncoder: неверный параметр (8) Ошибка инициализации выходного потока 0: 0 - Ошибка при открытии кодировщика для выходного потока # 0: 0 - возможно, неверные параметры, такие как битовая скорость, скорость, ширина или высота
Моя команда ffmpeg configure:
PKG_CONFIG_PATH="/usr/local/nv-codec-headers" ./configure --prefix=/usr/local/ffmpeg_build --extra-cflags='-I/usr/local/ffmpeg_build/include -I/usr/local/cuda/include/' --extra-ldflags='-L/usr/local/ffmpeg_build/lib -L/usr/local/cuda/lib64/' --bindir=/usr/local/bin --extra-libs=-ldl --enable-cuvid --enable-cuda --enable-cuda-sdk --enable-nvenc --enable-filter=scale_cuda --enable-filter=thumbnail_cuda --enable-libnpp --enable-gpl --enable-libx264 --enable-libfdk-aac --enable-nonfree --enable-version3