Для кодувань на основі CRF передайте наступні аргументи у фрагменті нижче до FFmpeg:
-c:v h264_nvenc -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k -profile:v high
Звичайно, вам потрібно буде скоригувати цільові бітові швидкості та фіксовану cq
величину. 19 - рекомендована настройка як "візуально ідентична 0, проте зберігає хорошу компресію на компресію до розміру файлу. Дивіться цю рецензію для більш того, що робить CRF.
Зауважимо, що -cq
шкала є логарифмічною, тобто 0 по суті є без втрат, а 51 - найгіршим.
Якість можна покращити, додавши такі параметри, як B-кадри (обмежте максимум на 3, а для цього потрібен основний профіль H.264 і вище. Базові профілі не підтримують B-кадри. Для цього перейдіть -bf {uint}
до відео кодер, такий, що -bf:v 4
приводив би до кодування з використанням 4 В-кадрів.
Ключовими частинами тут є аргументи -cq:v 19
та -rc:v vbr_hq
аргументи, які дозволяють налаштувати кодер як із заданим бітрейтом змінної, так і з максимально допустимим бітрейтом ( -b:v
і -maxrate:v
), дотримуючись значення CRF 19.
А тепер невеликі нотатки про NVENC та налаштування його на якісні коди:
NVENC, як і будь-який інший апаратний кодер, має кілька обмежень, зокрема, з HEVC, ось відомі обмеження:
На Паскалі:
Для кодексів HEVC застосовуються такі обмеження:
- Розміри CTU вище 32 не підтримуються.
- B-кадри в HEVC також не підтримуються.
- Формати текстур, підтримувані кодером NVENC, обмежують кольорові простори, з якими може працювати кодер. Наразі ми підтримуємо 4: 2: 0 (8-бітові) та 4: 4: 4 (для 10-бітових). Сторонні формати, такі як 10: 2: 2 10-розрядні, не підтримуються. Це вплине на деякі робочі процеси, де потрібні такі простори кольорів.
- Керування вперед також обмежене 32 кадрами. Ви можете переглянути цю редакцію для отримання більш детальної інформації.
Turing має всі вдосконалення, доступні для Pascal, з додаванням підтримки B-кадру для HEVC та можливості використовувати B-кадри в якості еталону. Дивіться цю відповідь для прикладу цієї можливості.
А на Maxwell Gen 2 (графічні процесори серії GM200x):
У кодуванні HEVC відсутні такі функції:
Вплив на Максвелла полягає в тому, що важкі сцени руху з HEVC під обмеженими бітратами можуть постраждати від артефактування (блокади) через відсутні функції функцій пошуку та адаптації циклу адаптивного зсуву (SAO). Паскаль дещо покращив цю можливість, але залежно від версії SDK, з якої було побудовано відеокодер, не всі функції можуть бути доступні.
Наприклад, для зваженого режиму передбачення для кодувань H.264 на Pascal потрібен NVENC SDK 8.0x і вище, і цей режим кодування також відключить підтримку B-кадру. Аналогічно, комбінація апаратних масштабувальників, що працюють на Nvidia Performance Primitive (NPP) та NVENC, може внести поліпшення продуктивності в додатки для масштабування відео за рахунок масштабування артефактування, особливо з розширеним вмістом. Це також впливає на конвеєр відеокодування, оскільки функції масштабування АЕС запускають ядра CUDA на графічному процесорі, і, як такий, вплив продуктивності, що вводиться додатковим навантаженням, слід аналізувати в кожному конкретному випадку, щоб визначити, чи якість продуктивності компроміс є прийнятним.
Пам'ятайте про це: апаратний кодер завжди пропонує дещо менші налаштування, ніж еквівалентна реалізація на основі програмного забезпечення, і, як такий, ваш пробіг та прийнятна якість виходу завжди будуть відрізнятися.
Для довідки:
За допомогою FFmpeg ви завжди можете звернутися до налаштувань кодера для настройки:
ffmpeg -h encoder {encoder-name}
Отже, для кодерів на основі NVENC ви можете запускати:
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc
Ви також можете побачити всі кодери на базі NVENC та масштабувачі на АЕС (якщо такі побудовані), виконавши:
for i in encoders decoders filters; do
echo $i:; ffmpeg -hide_banner -${i} | egrep -i "npp|cuvid|nvenc|cuda"
done
Вибірка зразка на моїй тестовій панелі:
encoders:
V..... h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)
decoders:
V..... h263_cuvid Nvidia CUVID H263 decoder (codec h263)
V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg)
V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4)
V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1)
V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8)
V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9)
filters:
... hwupload_cuda V->V Upload a system memory frame to a CUDA device.
... scale_npp V->V NVIDIA Performance Primitives video scaling and format conversion
slow
щобfast
в першій команді. CRF не реалізовано вnvenc
.