2017-05-05 5 views
0
나는 상당히 빠른 GPU 기반 시스템 (AWS의 g2.2xlarge 인스턴스)의 2 개는 FFmpeg 명령을 실행하고

:는 FFmpeg 색 공간 변환 속도

ffmpeg -i ./in.mp4 -s 1280x720 -r 30 -an -f rawvideo -pix_fmt yuv420p - | cat - >/dev/null 

는 524fps를 제공

ffmpeg -i ./in.mp4 -s 1280x720 -r 30 -an -f rawvideo -pix_fmt argb - | cat - >/dev/null 

단지 (101) 동안. .. 그것은 단지 GPU는 물론, 현대 CPU에서 프레임 당 8ms를 넘기지 않아야합니다!

내가 뭘 잘못하고 있는데 어떻게이 속도를 향상시킬 수 있습니까?

추신 : 이제 정말 말도 안돼!

ffmpeg -i ./in.mp4 -s 1280x720 -r 30 -an -f rawvideo -pix_fmt yuv420p - | ffmpeg -s 1280x720 -r 30 -an -f rawvideo -pix_fmt yuv420p -i - -s 1280x720 -r 30 -an -f rawvideo -pix_fmt argb - | cat - >/dev/null 

은 275fps! 그것은 완벽하지는 않지만, 내가 살 수있는 어떤 것입니다.

왜?

감사합니다.

+0

비트율이 거의 동일하므로 ~ 4.0225Mbits/s이므로 동일한 장치에서 실행될 가능성이 큽니다. 나는 그것을 더 빠르게 만드는 방법을 모르지만 GPU에서 이미 실행 중입니다. –

+0

색상 공간 변환? 왜 그것이 GPU에서 돌아가고 있다고 생각합니까? 비트 레이트는 출력 mp4의 비트율을 말합니다. 왜냐하면 저는 그것이 -b : v와 동일하게하기 때문에 동일합니다. 물론 그 인코딩은 GPU에서 실행되며 그 속도에 문제가 없습니다. 색상 공간 변환 속도에 문제가 있습니다. 나에게, 그것은 매우 느린 것, 초 당 원시 데이터의 340mbytes ... SIMD 명령을 가진 멀티 코어 컴퓨터에서 ... 그것은 나에게 빠르게 들리지 않는다. –

+0

아, 그렇다면 신경 쓰지 마세요. 실수로 사과 드리며, 디버그 결과를 오해했습니다. 필자는 사운드 파일을 변환하는 데 ffmpeg만을 사용한 적이 있습니다. 저는 항상 비트율이 어떤 이유로 변환 속도를 참조한다고 생각했습니다. –

답변

2

하면 해당 GPU가 출력 인코딩에 사용되는 쉽게 알 수있다 - 어떤 CPU는 10 배 재생 속도

당신이 확신에 1280x720x30fps에서 MP4로 인코딩 할 수 없었다? 중급 범위의 Haswell i5에서 내 CPU 인코딩은 해당 해상도에서 약 4-5 배가됩니다. 코덱을 지정하지 않았으므로 ffmpeg는 MP4 출력에 대해 libx264로 기본 설정됩니다. MP4 출력은 GPU에서 인코딩되지 않습니다.

ARGB 파이프 라인의 출력을 확인하십시오. RGB로 저장하려면 libx264를 -c:v libx264rgb으로 명시 적으로 호출해야합니다. H.264는 알파를 저장하지 않습니다. 따라서 MP4 포맷의 경우, 매우 최신의 ffmpeg 빌드를 사용하여 VP9로 인코딩해야 할 것입니다. 출력은 알파 평면이있는 YUV 픽셀 형식입니다. MOV가 작동하면 PNG 및 QTRLE이 다른 옵션입니다.

저는 ffmpeg에서 사용할 수있는 VP9/PNG/QTRLE 용 하드웨어 가속 엔코더에 대해 알지 못합니다.

+0

좋아요! OK라고 지정하면 GPU에서 인코딩 할 코덱을 지정할 수 있습니까? yuv420p를 사용하면서 인코딩 속도에 어떤 영향을 주는지 살펴 보겠습니다. –

+0

'h264_nvenc','h264_qsv' – Mulvya

+0

고마워요. 그런데 GPU (Packet.net type 0)가없는 머신에서 시도한 결과 두 케이스 모두 거의 똑같이 느리다 ... yuv420p는 0.486x argb는 0.34x. 따라서 빠른 프로세서에서의 속도 저하는 훨씬 더 뚜렷합니다. –