조회 수 10288 추천 수 0 댓글 13
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

(샤나가 아닌 다른 프로그램을 소개하는 포스팅입니다. 타 커뮤니티 사이트에서 소개된 프로그램에 대한 사용기를 옮깁니다. 샤나와도 무관하지 않아서 여기에도 포스팅합니다.)

 

샤나 외에 하드웨어 가속 인코딩을 지원하는 많은 프로그램 중 A's Video Converter는 자체적으로 제공하는 해상도 변경을 위한 하드웨어 필터(Nvidia 그래픽 카드용으로도!)가 있어서 소프트웨어 필터인 scale를 이용할 때 발생하는 병목 현상 및 속도 저하를 어느 정도 피할 수 있습니다.

 

많은 분들이 샤나에서 메뉴로 제공하지 않는 AMD 하드웨어 가속 인코딩을 위해 이 프로그램을 사용하시지만, NVENC를 이용한 인코딩에서도 해상도 변경을 위해 (샤나에는 없는) 하드웨어 필터를 이용하면 속도가 두 배 이상 향상되어 꽤 유용한 프로그램이기도 합니다.

 

정해진 해상도로밖에는 변경을 못한다는 단점이 있긴 하지만 규격에 맞는 동영상을 하드웨어 인코딩할 때라면 매우 편합니다.

 

 

1시간짜리 FHD(1920x1080) 동영상 파일을 HD(1280x720)로 해상도를 줄여서 샤나와 A's에서 각각 인코딩해 보았습니다. 인코더는 HEVC_NVENC (영상), AAC (오디오, 샤나에서는 fdk-aac, A's에서는 aac)를 썼고, 해상도 변경을 위해 샤나에서는 scale 필터를, A's에서는 자체 제공하는 하드웨어 리사이징 필터를 사용했습니다.

 

결과는 다음과 같습니다.

 

[샤나]

속도 6.41x (189fps) 진행시간 9분 25초

 

[A's]

속도 14.58x (436fps) 진행시간 4분 7초

 

A's가 샤나보다 배 이상 빠른 것을 볼 수 있습니다.

 

 

시각적으로 비교하기 좋게 스크린샷을 첨부합니다.

 

[스크린샷]

 

<샤나 진행창>

Shana_compared_to_AsVideoConverter_transcoding.png

 

<A's 진행창>

AsVideoConverter_trasncoding.png

 

 

<샤나 GPU-CPU 사용 내역>

Shana_compared_to_AsVideoConverter_CPU_GPU_usage.png

(샤나에서는 하드웨어 가속 디코딩을 끄고 진행했습니다. 소프트웨어 필터를 사용할 때 하드웨어 가속 디코딩을 활성화하면 중간에 병목 현상 때문에 오히려 GPU, CPU 활용도와 속도가 떨어집니다. 참고로 하드웨어 가속 디코딩(NVDEC)을 켜면 속도가 130 fps 정도로 확 떨어집니다.)

 

<A's GPU-CPU 사용 내역>

AsVideoConverter_CPU_GPU_usage.png

 

 

<샤나 output 동영상 미디어인포>

Shana_compared_to_AsVideoConverter_output_video_mediainfo.png

 

<A's output 동영상 미디어인포>

AsVideoConverter_output_video_mediainfo.png

 

 

인코딩 결과 동영상 품질은 둘 다 비슷한 걸로 보아 A's의 내장 하드웨어 필터 품질이 쓸 만한 것 같습니다. 참고로, A's 역시 샤나와 마찬가지로 custom build한 내장 FFmpeg를 이용하는 것으로 보입니다.

 

 

===============================================================================

 

<<추가적인 내용: Nvidia에서 제공하는 하드웨어 필터 scale_npp 사용>>

 

해상도 변경을 위한 또다른 하드웨어 필터로 Nvidia에서 제공하는 scale_npp가 있습니다. 이를 이용하기 위해서는 FFmpeg 바이너리를 custom build 하여야 하는데, Nvidia에서 제공하는 CUDA Toolkit을 설치하여 CUDA 헤더 파일들을 확보한 뒤 FFmpeg를 '--enable-libnpp' 옵션을 주고 컴파일하여야 합니다.

 

CUDA Toolkit을 공백 없는 path에 설치하고, media-autobuild_suite을 이용해 custom build 한 FFmpeg로 DOS 셸에서 아래의 명령어를 실행하여 하드웨어 가속 디코딩 + 하드웨어 필터 scale_npp 사용 + 하드웨어 가속 인코딩을 적용해 보았습니다.

 


 

ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i input.mkv -vf scale_npp=1280:720 -c:v hevc_nvenc -profile:v main -preset slow -b:v 2M -rc vbr_hq -rc-lookahead 30 -spatial_aq 1 -aq-strength 8 -c:a libfdk_aac -b:a 64k -ac 2 -ar 44100 -profile:a aac_he -tag:v hvc1 -map_metadata -1 -metadata creation_time=now -metadata:s:v:0 language=kor -metadata:s:a:0 language=kor -y output.mp4

 


 

실행 결과는 아래와 같습니다.

 

[FFmpeg CLI]

속도 10.4x (312fps) 진행시간 약 5분 46초

 

A'보다 124fps 정도 속도가 느린데, 이것은 화질 향상을 위해 프리셋을 'slow'로 맞추고 인코딩 옵션을 customize 했기 때문으로 추측됩니다. 샤나도 같은 인코딩 옵션을 사용했기 때문에 동일한 이유로 샤나가 A's보다 속도가 느린 이유 중에 이 부분에서 기인하는 부분도 있을 것으로 생각됩니다.

 

그리고 또 다른 속도 저하 요인으로는 필터 알고리듬의 차이가 아닐까 생각됩니다. A's 사용하는 필터의 알고리듬이 뭔지는 모르겠지만 scale_npp가 사용하는 기본 알고리듬인 'cubic'과의 차이가 약간이나마 속도 차이에 반영된 것 같습니다.

 

하지만 FFmpeg가 샤나보다는 123fps 정도로 확실히 속도가 빠른데 이는 샤나에서 사용한 소프트웨어 필터 scale이 아닌 하드웨어 필터 scale_npp를 사용했기 때문으로 추측됩니다.

 

 

스크린샷을 첨부합니다.

 

[스크린샷]

 

<FFmpeg 진행창>

FFmpegCLI_compared_to_AsVideoConverter_transcoding.png

 

<FFmpeg GPU-CPU 사용 내역>

FFmpegCLI_compared_to_AsVideoConverter_CPU_GPU_usage.png

(확실히 GPU 사용율이 무척 높습니다. 인코딩 내내 거의 100% 유지합니다.)

 

<FFmpeg output 동영상 미디어인포>

FFmpegCLI_compared_to_AsVideoConverter_output_video_mediainfo.png

(인코딩 프로그램 정보는 custom build된 FFmpeg의 libavformat 버전 정보를 나타냅니다.)

 

 

 

어쨌든 결론은, "하드웨어 가속 디코딩/인코딩 시 소프트웨어 필터보다 하드웨어 필터를 사용해야 인코딩 속도가 획기적으로 향상된다."는, 무척이나 당연한 내용입니다. 구체적인 자료들이 참고가 되셨길 바랍니다.

 

Facebook Twitter Pinterest Kakao
  • ?
    유토짱 2018.08.24 18:25
    저도 FFMpeg4.0.2소스와 scale_npp를 컴파일 시도 해봤는데, 수많은 시행착오 끝에 포기했습니다.
    마지막으로 media-autobuild_suite-master로 해보고 있는데, 빌드시간이 무지막지 하네요.

    샤나도 ffmpeg를 사용하고 있는것 같은데, libnpp가 라이센스 때문에 공개용으로는컴파일을 못해서, 포함안한것 같습니다.

    혹시 개인적으로 컴파일하신 scale_npp버전 FFMpeg를 받을수 있을까요?
    (32비트용 NPP지원되는 버전을 어디서 구해서 실행해봤는데, scale_npp필터가 작동안하더라구요)
  • ?
    JKyle 2018.08.25 04:49

    Nvidia CUDA SDK(v9.2)를 설치할 때는 반드시 사용자 설정을 선택해서 아래 사항을 주의하면서 설치해야 합니다.

     

    1) media-autobuild_suite이 FFmpeg build 시 path의 space를 escape 처리하지 못하는 문제가 있으니 C:\[공간_없는_path]\Nvidia_CUDA_Toolkit\ 밑에 CUDA\v9.2 와 CUDA_Samples\v9.2 폴더를 만들어 거기에 설치합니다. (그리고 update할 때 update 설치 경로를 이에 맞게 꼭 변경해 주어야 합니다.)

     

    2) Visual Studio Integration 항목이 선택된 상태에서는 설치가 실패합니다. 반드시 선택 해제한 상태에서 설치 후 Visual Studio Intergration이 필요한 경우 수작업으로 설치해야 합니다.

     

    3) 이미 설치된 Nvidia 그래픽 드라이버들은 선택에서 제외합니다.

     

    기타 자세한 사항들은 아래 포스팅을 참고하십시오. 저도 이 포스팅대로 진행해서 문제를 해결했습니다.

     

    https://devtalk.nvidia.com/default/topic/1024458/cuda-setup-and-installation/nvidia-cuda-version-9-0-installer-failed/post/5256326/#5256326

     
     
    그리고 media-autobuild_suite의 경우 시간이 많이 걸리긴 합니다만 설치시 옵션 선택에서 필요한 부분만 선택한다면 시간을 조금 절약할 수 있습니다. 예를 들어 mpv 같은 경우 굳이 바이너리로 빌드하지 않아도 되고, 필요 없다고 판단되는 라이브러리들은 제외하면 되겠죠. mpv만 제외해도 시간과 공간이 상당히 절약됩니다.
     
    죄송한 말씀이지만 제가 빌드한 바이너리는 배포하지 않습니다. 라이센스 등 문제가 될 소지가 있어 아예 빌미를 제공하지 않으려구요. 이해해 주시기 바랍니다.
  • ?

    media-autobuild_suite을 업데이트하시려면 아래와 같이 하시면 됩니다.

     

    media-autobuild_suite_update.gif

     

     

    update_suite.shmintty.lnk 위에 떨구면 되죠.

    (update_suite.sh는 media-autobuild_suite.bat을 처음 실행해서 FFmpeg를 build하실 때 업데이트 관련 옵션으로 업데이트 가능으로 선택하셔야 생성됩니다.)

     

    FFmpeg 업데이트를 위해 media-autobuild_suite.bat를 다시 실행하기 전에 반드시 실행해 주셔야 빌드 오류를 피할 수 있습니다.

  • ?
    유토짱 2018.08.24 18:40
    A's Video Converter프로그램 설치해보니 하드웨가속을 감지못하네요.
    gtx750ti 그래픽카드인데, ffmpeg4 에서 NVENC 가속은 잘 쓰고 있거든요. 단지 scale_npp만 안되더서 그렇지..

    A's Video Converter프로그램에서 컨버팅하니까 fail이 나네요.ㅠㅠ
  • ?
    JKyle 2018.08.27 12:29
    윈도우 10이신가요? A's에서 NVENC는 윈도우 10에서만 된다고 하네요.
  • ?
    유토짱 2018.08.27 14:55
    win7 이라서 안되나 보네요.
  • ?
    유토짱 2018.08.27 23:32
    덕분에 ffmpeg scale_npp는 컴파일하고 테스트 성공했습니다.
    다만 hw 가속과 stereo3d=sbsl:abl 필터 또는 -filter_complex로 3D 좌우 영상을 상하로 바꾸는 필터와 같이 쓰니까 에러가 나네요
    Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'

    이건 좀더 방법을 연구해봐야할거 같고, 아무튼 감사합니다.
  • ?
    JKyle 2018.08.28 03:28

    에러 메시지는 픽셀 포맷 변환이 불가능해서 실패했다고 나오는데 아마 Nvidia 하드웨어 디코딩/인코딩/필터에서 사용하는 픽셀 포맷(bit depth 8비트 영상은 nv12)과 소프트웨어 필터들이 input/output으로 사용하는 픽셀 포맷(bit depth 8비트는 대부분 yuv420p)이 달라서 발생하는 문제일 겁니다. 지금 추측으로는 소프트웨어 필터 사용 앞과 뒤(?)에 format 필터로 픽셀 포맷 변환을 해야 할 것 같습니다.

     

    그런데 이렇게 문제를 해결해도 결국엔 GPU -> CPU -> GPU 간에 왔다갔다 하느라 또 다른 병목 현상이 생겨서 속도가 저하될 겁니다. 그럴 바에야 scale_npp 대신 scale을 다른 소프트웨어 필터들과 같이 사용하는 것과 별 차이가 없을 것 같습니다. 이는 애초에 소프트웨어 필터를 하드웨어 필터로 대체해서 인코딩 속도를 높이자는 본문의 취지와는 반대되는 결과죠. 원하시는 필터들의 하드웨어 버전이 없는 한 그냥 소프트웨어 필터로 통일하는 게 나을지도요.

  • ?
    유토짱 2018.08.28 12:44

    ffmpeg -hwaccel cuvid -c:v h264_cuvid -i test.mp4
    -vf "scale_npp=2880:1440:format=nv12,hwdownload,format=nv12, stereo3d=sbsl:abl, pad=2880:2880:(ow-iw)/2:(oh-ih)/2:0x101010"
    -c:v h264_nvenc out.mp4
    이런식으로 하니까 GPU가속 필터와 SW필터를 함께 쓰니까 속도 증가하네요.(단순 CPU대비 speed가 0.85x--> 1.05x 정도 증가하네요)

    1.5x정도를 기대했는데.. 좀더 연구해봐야 할거 같습니다.
    stereo3d=sbsl:abl, 이부분을 crop으로 대체한다든가.. -resize 옵션이 있던데. 몇가지 테스트를 더 해봐야 알것 같습니다.

    아무튼 관심을 가져주셔서 너무 감사합니다.

  • ?
    JKyle 2018.08.28 13:46
    호오... 어느 정도 속도 향상은 있군요. 흥미로운 결과입니다. 암튼 수고 많으십니다.
  • ?
    유토짱 2018.08.28 14:26
    ffmpeg -hwaccel cuvid -c:v h264_cuvid -resize 2880x1440 -i "test.mp4"
    -vf "hwdownload,format=nv12,stereo3d=sbsl:abl,pad=2880:2880:(ow-iw)/2:(oh-ih)/2:black"
    -c:v h264_nvenc out.mp4

    입력을 GPU가속 -resize를 사용하고, filter쪽을 cpu로 하니까 스피드가 1.3x 정도로 나오네요.
    gtx750, 4 core cpu 에서 이 정도면 만족함니다.

    테스트과정에서 알게되었는데, 여러 필터를 쓸때는 순서도 속도에 영향을 미치네요.
    스케일,streo3d,pad 순서가 streo3d,스케일, pad보다 더 빠르네요(크기를 먼저 줄이고,작은영상을 가지고 나머지 작업을 처리해서 그런가 봅니다)
  • ?
    JKyle 2018.08.28 15:11
    필터 체인에서 필터 순서가 중요하긴 하죠. 필터들 중에 디인터레이싱/crop을 제일 먼저, 해상도 변경을 그 다음에, 나머지를 그 다음에 넣는 식으로 하는 게 올바른 작업 순서가 아닐까 생각합니다.

    h264_cuvid에 resize 옵션이 있었군요. 좋은 정보 감사합니다. 알고리듬 선택은 불가능한 생짜 옵션이지만 퀄리티가 괜찮다면 scale_npp 대신 사용해도 괜찮을 것 같습니다. 단지, 해상도를 큰 폭으로 조정한다면 어쩔 수 없이 scale_npp로 lanczos 같은 알고리듬을 사용하는 게 낫지 않을까 싶네요.
  • ?
    나무테라1 2020.12.27 15:46

    감사합니다 많은 참고가 되는군요


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 소리를 4가지로 분리하는 샤나보컬리무버 프로그램을 소개합니다. Rina 2024.03.22 15453 5
공지 샤나인코더 통합 검색 기능 개선(샤나인코더 우측 상단에 있는 검색창을 사용해 보세요.) Rina 2021.09.30 30133 2
공지 자유게시판에서는 자유롭게 글을 작성할 수 있지만 다음과 같은 내용은 삭제돼요 Rina 2020.03.18 27344 5
공지 일반 [필독] 질문 전에 반드시 읽으세요!!! 3 file JKyle 2019.09.16 47868 7
공지 일반 [알림] 질문 먹튀하지 마시기 바랍니다 => 본문 변경 금지 24 JKyle 2018.10.12 45324 18
24 정보 AV1 기본 가이드 JKyle 2020.09.09 7881 1
23 정보 윈도우에서 ffmpeg 명령을 직접 실행하시는 분들은 3 JKyle 2020.09.05 1670 0
22 정보 AV1 하드웨어 디코딩이 드디어... 5 JKyle 2020.09.02 2571 0
21 정보 GTX1050ti Vs GTX1650 Vs GTX1070 Vs RTX2070super NVENC 인코딩 테스트 2 핀다 2020.08.01 4530 0
20 정보 AV1(libaom), VVC(VTM) 비교 3 JKyle 2020.07.18 2575 0
19 정보 동영상 재생이 안될 때 , 삼성 모니터, 애플 ,셋톱박스,LG 모니터 5 file 엘리시움스 2020.06.07 2318 0
18 정보 AviSynth와 샤나인코더의 궁합 file JKyle 2020.06.01 1697 0
17 정보 HDR to SDR 변환 테스트: 샤나인코더 vs AviSynth+(DGTonemap vs DGHDRtoSDR) 1 file JKyle 2020.04.03 4060 0
16 정보 H264(x264) 인코딩 테스트: 샤나인코더, FFmpeg, StaxRip 3 file JKyle 2020.03.15 2219 0
15 정보 HEVC(x265) 인코딩 테스트: 샤나인코더, FFmpeg, StaxRip 1 file JKyle 2020.03.15 4320 0
14 정보 동영상 시간단위 분할과 영상자르기 위한 간단 bat 파일 (ffmpeg이용) 1 file 감자틔긤 2020.02.25 3373 0
13 정보 44c 88t 머신 RipBot264 사용기 3 file HS 2020.02.11 2300 1
12 정보 튜링 아키텍쳐상의 NVENC의 '화질'에 대하여. 5 HS 2019.09.22 4025 0
11 정보 아키텍쳐별 NVENC performance 1 file HS 2018.12.29 3467 1
10 정보 AV1 코덱의 현재 상황 (인코딩 테스트 - FFmpeg 와 rav1e) 3 file JKyle 2018.10.11 15529 0
9 정보 여러가지 코덱으로 저화질 인코딩 해 보았습니다 (AV1 포함) 8 마소리스 2018.09.26 7172 0
» 정보 해상도 변경 + 하드웨어 가속 인코딩 시 속도 향상 13 file JKyle 2018.08.23 10288 0
7 정보 부드러운 움직임의 60 프레임 인코딩 14 JKyle 2018.07.16 16301 0
6 정보 tonemap, zscale 필터를 이용한 HDR->SDR 변환 (FFmpeg CLI) 7 file JKyle 2018.06.26 4549 0
5 정보 블루레이 (Blu-ray) 폰트 모음 트루폰트로 올립니다. (용량관계로 댓글 부분확인) 3회 연속 업로드함. 2 file 능소화 2017.10.28 5275 0
Board Pagination Prev 1 2 3 Next
/ 3