이전 글(소소한 업그레이드 실시)에서 얘기했듯이 새로운 NAS와 새로운 PC 환경을 구축했다.

지난 포스팅(ffmpeg용 H.264/HEVC 인코더 품질/성능 비교)들에서 진행한 시험의 추가시험을 간단하게 진행했다.

 

1. AMD

 

PC 환경에서의 비디오 하드웨어 인코딩은 사실상 인텔 qsv엔비디아 nvenc 외엔 다른 대안이 없다.

그런데, 이 판에서 왕년에 잘 나가던 AMD[각주:1]는 현재 어떤 상태인지 확인해보기로 했다.

 

그런데, 이번에 지른 라이젠 5 2600에는 그래픽 코어가 포함되어 있지 않다.

마침 주변에 라이젠 5 2400G가 있어 예전 테스트와 유사한[각주:2] 테스트를 해볼 수 있었다.

 

ffmpeg -i sintel.mkv -c:v h264_amf -profile main -quality quality -rc cqp -qp_i -1 -qp_b -1 -qp_p -1 -an sintel_default.mp4

 

일단 HW 인코딩 자체는 동작하는 것 같은데, 몇 번을 해봐도 인코딩 마지막에 오류를 내뿜으며 실패했다.

더군다나, APU를 이용한 인코딩인데, CPU가 통째로 느려지는 건 덤[각주:3]이다.

 

혹시나 드라이버가 구버전인 것이 원인일까 싶어 최신 버전의 드라이버[각주:4]를 설치해서 똑같은 인코딩을 시도해봤다.

그런데… 인코딩은 정상적으로 완료되는데, 속도가 지독하게 느리다.

디코딩 속도 대비 절반 이하의 느린 속도로 인코딩을 하는 것까지 보면 더 이상의 테스트는 무의미하다는 결론.

 

speed=0.454x 라니[…]

 

같은 영상을 라이젠 5 2600에서 libx264로 SW 인코딩을 해보니 2400G HW 인코딩의 6배 정도의 속도가 나온다.

오타가 아니다. SW 인코딩이 HW 인코딩의 6배속이다[…]

 

SW 인코딩인데 speed=2.93x 달성

 

AMD가 CPU에 올인한 이후 APU/GPU에 대한 연구가 뒷전으로 밀렸다는 말이 있었는데, 아무래도 그게 원인인 듯.

 

누나, 뭐예요!!!

 

 

2. 시놀로지 DS-418

 

접니다. DS-418

 

DS-418 등의 모델은 HW 비디오 트랜스코딩 기능을 지원한다.

이를 이용하면 손쉽고 빠르게 영상을 재인코딩 할 수 있다.

 

Video Station에서 오프라인 트랜스코딩 적용 화면

 

그런데, 이 기능은 몇 가지 한계를 가지고 있다.

일단, 프리셋 3가지로만 인코딩이 가능하고, 프리셋을 편집할 수는 없다.

근본적으로 이 프리셋이 어떻게 정의되어있는지도 알 수 없다[각주:5].

 

몇몇 블로그에는 이 프리셋을 수정하는 방법이 올라와있기도 한데, 지금은 그걸 적용해도 제대로 동작하지 않는다.

 

인터넷을 검색해보니 한 귀인께서 이 인코딩을 직접 실행할 수 있는 비급을 공개해놓으셨다.

간략히 정리하면 아래와 같다.

 

1. SSH을 활성화하고 관리자 권한을 사용할 수 있게 해둠
2. DSM은 ffmpeg을 직접 실행하는 게 아니라 syno-gst라는 별도의 실행 프로그램으로 인코딩함
3. 목표 비트레이트만 지정할 수 있음

 

결론적으로, 아래와 같은 명령을 SSH 창에서 입력하면 원하는 비트레이트로 인코딩 할 수 있는 것이다.

 

sudo /var/packages/VideoStation/target/bin/syno-gst -i "/volume1/video/Sintel.mkv" -s 0 -o "/volume1/video/out_1715356a.mp4" -f mp4 --vcodec h264 --acodec none --height 816 --vb 1715356 -rv

 

그리고, 다양한 테스트를 해 보니 대략 아래와 같은 특성들을 파악할 수 있었다.

 

1. 목표 품질값을 지정할 수는 없고, 오로지 목표 비트레이트만 지정할 수 있음
2. 결과물의 비트레이트는 목표 비트레이트보다 좀 낮게 생성되는 결과를 보여줌[각주:6]
3. -s 옵션으로 seek time을 지정하지 않으면 탐색이 불가능하게 인코딩되는 경우가 종종 발생함
4. 앞뒤에서 한 프레임씩 날려버리는 거 같음
5. H.264로만 변환을 지원하고, HEVC는 지원하지 않으며, 입력 포맷 및 영상 크기가 제한적

 

일단 인코딩이 가능하다는 것을 파악했으니, 다음에 단계는 용량 대비 인코딩 품질이 어느 정도인지 확인하는 것.

지난 포스팅들에서 테스트한 결과와 유사한 테스트[각주:7]를 해서 이를 비교해보기로 했다.

 

일단 테스트 결과는 아래와 같다.

 

 

이렇게 확인된 용량 대비 PSNR을 엔비디아의 결과와 비교해보면 이러하다.

즉, 이전 테스트에서 용량 대비 화질이 가잘 떨어졌던 nvenc보다도 동일한 용량 대비 품질이 낮은 것이 확인되었다.

더군다나, 그 때는 nvenc가 심각하게 낮은 게 아니라 그냥 SW 인코딩보다 조금 떨어지는 정도였는데, 여기는 격차가 더 큰 편이다.

물론 PSNR이 극도로 낮은 건 아니기 때문에 감상에 지장이 있는 수준은 아니지만, 기존 비교 대상들에 비하면 떨어지는 건 사실이다.

 

이전 테스트에서 최소 목표 PSNR을 43으로 설정했는데 그렇게 하면 DS418에선 용량이 너무 커짐

 

개인적인 판단으로는, DS418을 이용한 트랜스코딩은 목표 PSNR을 41 정도로 낮게 잡고 H.264로 인코딩 할 때만 쓸만하다는 생각.

 

 

  1. AMD가 Ati를 2006년에 인수함 [본문으로]
  2. 같은 소스이나 인코딩 방식을 완벽하게 똑같이는 하지 못함 [본문으로]
  3. 인텔 qsv는 동일한 인코딩에서 CPU 속도의 저하를 경험하지 못했는데, 테스트 환경이 모두 i7이었기 때문에 1:1 비교는 어려울 듯 [본문으로]
  4. Adrenalin 2019 Edition 19.6.2 Optional [본문으로]
  5. SSH에서 특정 위치를 찾으면 볼 수는 있으나 다양한 HW에 대한 설정이 모여있어 정확한 프리셋을 특정하는 게 어려움 [본문으로]
  6. 경험상 약 1.2배 정도 지정하면 거의 맞는 것 같음 [본문으로]
  7. 전술했듯이, 완전하게 동일한 테스트는 불가능함. 그 때는 윈도우 환경에서 avisynth를 동원해 모든 변수를 통제할 수 있었지만, 이 경우는 리눅스에서 영상 전체를 인코딩하는 수밖에 없음 [본문으로]

+ Recent posts