2017-09-24 43 views
0

GPU (CUDA)를 사용하여 ffmpeg 비디오 인코딩에 문제가 있습니다.ffmpeg - cuda encode - OpenEncodeSessionEx 실패 : 메모리 부족

나는 내가 다수의 병렬 인코딩을 할 때 2 배 엔비디아 GTX 1050 티

이 문제가되어 있습니다. 2 개 이상의 프로세스와는 FFmpeg은 다음과 같이 사망 :

[h264_nvenc @ 0xcc1cc0] OpenEncodeSessionEx failed: out of memory (10) 

문제는 GPU에서 사용 가능한 리소스가 많이있다 엔비디아 SMI 보여줍니다 :

+-----------------------------------------------------------------------------+ 
| NVIDIA-SMI 384.66     Driver Version: 384.66     | 
|-------------------------------+----------------------+----------------------+ 
| GPU Name  Persistence-M| Bus-Id  Disp.A | Volatile Uncorr. ECC | 
| Fan Temp Perf Pwr:Usage/Cap|   Memory-Usage | GPU-Util Compute M. | 
|===============================+======================+======================| 
| 0 GeForce GTX 105... Off | 00000000:41:00.0 Off |     N/A | 
| 40% 37C P0 42W/75W | 177MiB/4038MiB |  30%  Default | 
+-------------------------------+----------------------+----------------------+ 
| 1 GeForce GTX 105... Off | 00000000:42:00.0 Off |     N/A | 
| 40% 21C P8 35W/75W |  10MiB/4038MiB |  0%  Default | 
+-------------------------------+----------------------+----------------------+ 

두 번째 GPU는하지 않는 것이 전혀 사용하지 말고 첫 번째 파일에 충분한 메모리가 남아있어 세 번째 파일을 지원할 수 있습니다.

어떤 아이디어라도 도움이 될 것입니다.

+0

ffmpeg 명령 줄 도구의 대화식 사용에 관한 내용은 주제와 관련이 없습니다. ** " –

답변

1
  1. 인코딩 컨텍스트를 적용하는 방법에 대한 코드가 없으므로 두 번째 GPU가 사용되지 않는 이유를 알 수 없습니다. av_opt_set() 또는 명령 줄 인수에서 사용 했습니까?
  2. 더 중요한 문제는 geforce 카드가 한 시스템에서 2 개 이상의 인코딩 세션을 소유 할 수 없다는 것입니다. 더 필요하면 quadro, tesla 등 비싼 것들을 사용해야합니다. ffmpeg 정보 페이지 [https://stackoverflow.com/tags/ffmpeg/info]에서 **
+0

고맙습니다. 카드가 2 회의 econding 세션 만 지원한다는 것을 몰랐습니다. -gpu를 사용하여 시도했습니다. – VelDev

+0

내 명령 : ffmpeg -analyzed 100M -probesize 100M -gpu 2 -hwaccel cuvid -c : vh264_cuvid -i in.mp4 -vf scale_npp = 858 : 480 -maxmax 800K -bufsize 4000K -threads 0 -profile : v main -level 4.0 -movflags + faststart -preset fast -c : v h264_nvenc -ac 2 out.mp4 – VelDev

+1

@VelDev 해당 명령에 인코딩 gpu를 지정하지 않았습니다. '-i'의'-gpu'는'cuvid' 디코딩 부분만을 적용합니다. 'nvenc'과 함께 또 다른'-gpu'가 있어야합니다. – halfelf