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 개의 B- 프레임을 사용하는 인코더가 되는 비디오 인코더 .
여기서 핵심 부분은 -cq:v 19
및 -rc:v vbr_hq
인수이며, CRF 값 19를 준수하면서 미리 설정된 가변 비트 전송률과 최대 허용 비트 전송률 ( -b:v
및 -maxrate:v
)로 인코더를 조정할 수 있습니다 .
이제 NVENC에 대한 작은 메모와 고품질 인코딩을 위해 튜닝하십시오.
다른 하드웨어 기반 인코더와 마찬가지로 NVENC에는 몇 가지 제한 사항이 있으며 특히 HEVC의 경우 알려진 제한 사항이 있습니다.
파스칼에서 :
HEVC 인코딩의 경우 다음 제한 사항이 적용됩니다.
- 32보다 큰 CTU 크기는 지원되지 않습니다.
- HEVC의 B- 프레임도 지원되지 않습니다.
- NVENC 인코더가 지원하는 텍스처 형식은 인코더가 사용할 수있는 색 공간을 제한합니다. 현재 4 : 2 : 0 (8 비트) 및 4 : 4 : 4 (10 비트)를 지원합니다. 4 : 2 : 2 10 비트와 같은 외부 형식은 지원되지 않습니다. 이는 이러한 색 공간이 필요한 일부 워크 플로우에 영향을 미칩니다.
- 사전 제어도 32 프레임으로 제한됩니다. 자세한 내용 은 이 사설을 참조하십시오.
Turing 은 HEVC에 대한 B- 프레임 지원과 B- 프레임을 참조로 사용할 수있는 기능을 추가하여 Pascal에서 사용할 수있는 모든 개선 사항을 제공합니다. 이 기능에 대한 예는 이 답변을 참조하십시오 .
Maxwell Gen 2 (GM200x 시리즈 GPU)에서 :
HEVC 인코딩에는 다음 기능이 없습니다.
Maxwell에 미치는 영향은 제한된 비트 전송률 하에서 HEVC를 사용하는 움직임이 많은 장면은 lookahead 기능이 누락되고 SAO (Adaptive Sample Offset) 루프 필터링 기능으로 인해 아티팩트 (블로킹)가 발생할 수 있다는 것입니다. Pascal은이 기능에서 다소 개선되었지만 비디오 인코더가 내장 된 SDK 버전에 따라 일부 기능을 사용하지 못할 수도 있습니다.
예를 들어, Pascal에서 H.264 인코딩을위한 가중치 예측 모드에는 NVENC SDK 8.0x 이상이 필요하며이 인코딩 모드는 B 프레임 지원도 비활성화합니다. 마찬가지로 NPP (Nvidia Performance Primitives)에서 실행되는 하드웨어 기반 스케일러와 NVENC를 함께 사용하면 스케일링 아티팩트 비용, 특히 업 스케일링 된 컨텐츠에서 비디오 스케일링 애플리케이션으로 성능이 향상 될 수 있습니다. NPP의 스케일링 기능이 GPU의 CUDA 코어에서 실행됨에 따라 비디오 인코딩 파이프 라인에도 영향을 미치며, 추가로드로 인한 성능 영향을 사례별로 분석하여 성능 품질을 결정해야합니다. 절충이 허용됩니다.
명심하십시오 : 하드웨어 기반 엔코더는 동등한 소프트웨어 기반 구현보다 항상 약간 덜 커스터마이징을 제공하므로 마일리지와 허용 가능한 출력 품질은 항상 다릅니다.
그리고 당신의 참고를 위해 :
FFmpeg를 사용하면 다음을 통해 항상 엔코더 설정을 사용자 정의 할 수 있습니다.
ffmpeg -h encoder {encoder-name}
따라서 NVENC 기반 인코더의 경우 다음을 실행할 수 있습니다.
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc
또한 다음을 실행하여 모든 NVENC 기반 인코더와 NPP 기반 스케일러를 볼 수 있습니다.
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
.