이것은 2GB에서 300MB로 비디오 크기 조정 (1080p)에 대한 현재 명령이지만 시간이 오래 걸립니다.
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v libx264 -preset slow -crf 21 -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
NVIDIA GTX1070으로 nvenc를 사용해 보았습니다.
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v h264_nvenc -preset slow -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
출력 크기는 항상 원래 크기의 3⨉ 또는 5⨉입니다 – nvenc는 사용하지 않습니다 -crf
.
그렇다면 고품질 및 작은 크기의 비디오를 변환 / 크기 조정하기 위해 ffmpeg와 함께 nvenc를 어떻게 사용합니까? 인코딩에 GPU를 사용해야합니까?
답변
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 인코딩에는 다음 기능이 없습니다.
- SAO ( Adaptive Offset ) 루프 필터 기능 샘플 .
- 적응 양자화
- 미리보기 속도 제어.
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
답변
해결책을 찾았습니다.
ffmpeg -hwaccel auto -i in.mp4 -c:v h264_nvenc -preset llhq -rc constqp -qp 21 -c:a copy out.mp4
h264_nvenc -qp
대신을 사용 하는 것 같습니다 -crf
. 이 옵션 -rc
은로 설정되어있는 동안에 만 작동 합니다 constqp
.
답변
대한 -crf
libx264 관련이있을 수 있습니다 -cq
또는 -qp
h264_nvenc에서 :
-crf
일정한 품질 모드를위한 품질 선택
-cq
VBR 속도 제어에서 일정한 품질 모드에 대한 목표 품질 수준 (0 ~ 51, 0은 자동을 의미)을 설정
-qp
일정한 양자화 파라미터 레이트 제어 방법 (-1 ~ 51) (디폴트 -1)
가장 빠른 하드웨어 가속 인코딩 방법 :
ffmpeg -hwaccel cuvid -c:v h264_cuvid -resize 640x480 -i input.mp4 -c:v h264_nvenc -cq 21 -c:a copy output.mp4
-resize
입력 해상도 (하드웨어); 는 FFmpeg 필요가 컴파일되지하기 --enable-libnpp
위한 scale_npp
필터입니다.
더 많은 정보를 위해서:
ffmpeg -h encoder=h264_nvenc
ffmpeg -h denoder=h264_cuvid