조회 수 15523 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

라이센스에 발목잡힌 HEVC을 대신할 차세대 (무료) 영상 코덱으로 기대를 한몸에 받고 있는 AV1이 현재 어디까지 개발되고 있는지 실제 인코딩을 해봄으로써 테스트했습니다. AV1 코덱에 대해서는 위키피디어의 해당 문서를 참고하십시오.

 

일단 AV1이 금년 3월 비트스트림 스펙 표준안이 확정되고 표준 코덱 개발이 발표된 매우 초기의 코덱이라는 것을 유념하실 필요가 있습니다. 따라서 아직은 많은 부분에서 불완전하고 불안정해서 오류도 잦고 속도도 무척 느립니다.

 

마소리스님의 포스팅에서도 AV1 인코딩에 대해 잠깐 언급하고 있지만, 이 포스팅은 순전히 AV1에 대해서만 초점을 맞추고 실제 윈도우에서 AV1 인코딩을 어떻게 진행하는지에 대한 설명까지 곁들였습니다.

 

우선 현재 개발되고 있는 AV1 코덱을 간략하게 정리하면 다음과 같습니다.

 

인코더 디코더 FFmpeg에 포함 여부 개발 기관
libaomaomenc libaom의 aomdec 둘 다 libaom-av1으로 래핑됨 AOM(Alliance for Open Media)
rav1e dav1d No rav1e: Xiph.Org
dav1d: VideoLAN

 

이 중 dav1d는 VLC의 개발기관이자 x264, x265 등을 지원하고 있는 VideoLAN에서 금년 10월 1일 개발이 발표된 걸음마 단계의 디코더입니다.

libaom은 AV1 코덱을 위해 설립한 AOM에서 주로 구글에 의해 주도되며 개발되고 있고, 그렇기 때문에 vpx 계열과 많은 부분이 유사합니다. 이 libaom 코덱이 AV1의 표준 코덱(reference codec)입니다.

rav1e는 ogg, theora, vorbis, opus 코덱 개발을 주도한 Xiph.org이 daala 코덱의 후속작 성격으로 개발하고 있는 AV1의 인코더입니다. libaom의 느린 속도를 극복하기 위해 개발하고 있는 인코더입니다.

 

현재 FFmpeg 기반 디코더들을 커스텀 빌드해서 내장하고 있는 다음 팟플레이어와 LAV filters는 AV1 디코딩을 지원하므로 팟플레이어와 MPC-HC에서 AV1 영상을 재생해서 보실 수 있습니다.

 

우리가 관심 있는 부분은 인코딩이므로 실제로 사용하게 될 방법은

  • 1) 독자적인(stand-alone) 바이너리로 빌드된 rav1e 실행 파일로 인코딩하거나 (rav1e 인코딩)
  • 2) 역시 독자적인 바이너리로 빌드된 aomenc 실행 파일로 인코딩하는 방법 (aomenc 인코딩), 그리고
  • 3) FFmpeg에서 libaom-av1을 호출해서 aomenc를 사용하는 방법 (aomenc 인코딩),

이 세 가지입니다. 이 중 제가 실제로 진행한 방법은 1)과 3) 두 가지입니다.

 

1. 인코딩 환경 구성

1) rav1e

  • 미리 빌드된 바이너리를 다운로드: 여기
  • media-autobuild_suite으로 FFmpeg를 커스텀 빌드하면서 독자적인 바이너리로 빌드 => 제가 사용한 방법

2) aomenc

  • 미리 빌드된 바이너리를 구함: 현재 윈도우 용으로 따로 배포하는 곳은 없는 것으로 알고 있습니다. (확인 필요)
  • media-autobuild_suite으로 FFmpeg를 커스텀 빌드하면서 독자적인 바이너리로 빌드
  • media-autobuild_suite으로 FFmpeg를 커스텀 빌드하면서 libaom을 래핑(--enable-libaom) => 제가 사용한 방법 1
  • libaom이 래핑된 FFmpeg 바이너리를 구해서 실행: 여기에서 Zeranoe의 FFmpeg 바이너리를 다운로드 => 제가 사용한 방법 2

 

aomenc에서 두 가지 방법을 병행한 이유는, libaom 최신 버전이 libvpx와 충돌해서 빌드 오류가 발생하거나, 빌드가 되더라도 인코딩/디코딩 단계에서 실패하거나 해서입니다. 서로 다른 버전 두 개를 구해서 되는 것으로 진행했습니다.

 

2. 인코딩 원본

마소리스님의 포스팅에서 사용한 심슨 극장판 예고편을 오디오를 없애고 25초부터 30초 길이를 잘라 원본으로 삼았습니다.

 

사용한 명령어:


ffmpeg -hide_banner -ss 00:00:25 -i "The Simpsons Movie - 1080p Trailer.mp4" -t 30 -an -c copy -y "The Simpsons Movie - 1080p Trailer clip.mp4"


 

생성된 원본 영상 특징:

비트레이트 6,008 kbps (21.9 MB), 길이: 30.57 초, 코덱: H264,  프레임수: 733 frames

 

유튜브 링크: https://youtu.be/7mUNKm8vdyk

원본 다운로드 링크: https://drive.google.com/open?id=1LSqiwal5kuL-WJSwrvtKzH6SgsZudP2A

 

3. rav1e 인코딩

참조 사이트: https://github.com/xiph/rav1e

 

rav1e는 input으로는 raw video format인 Y4M을, output으로는 간략한 vpx 계열 컨테이너 형식인 IVF만을 만들어 내므로 rav1e 인코딩 앞뒤로 FFmpeg를 통해 파일을 변환해야 합니다. 그냥 IVF 생성만으로 AV1 인코딩은 끝난 셈이지만 그것을 우리에게 익숙한 형식인 mkv나 webm으로 변환하기 위해서는 AV1 디코더(aomdec)가 libaom-av1으로 래핑된 FFmpeg의 도움이 꼭 필요합니다.

 

인코딩에 사용된 rav1e의 버전은 0.1.0입니다.

 

1) Y4M 파일 생성

사용한 명령어:


ffmpeg -hide_banner -i "The Simpsons Movie - 1080p Trailer clip.mp4" -y output1.y4m


 

실행 속도:

346 fps

 

생성된 영상 특징:

1.54 GB, 30.03 초, 720 프레임

 

2) IVF 파일 생성

사용한 명령어:


rav1e output1.y4m -o "The Simpsons Movie - 1080p Trailer clip.rav1e.q170.s3.ivf" --quantizer 170 --speed 3


quantizer 값이 작을수록 고화질

speed 값이 작을수록 고화질

눈에 띄게 뭉개지는 부분이 없도록 두 값을 조정함.

 

실행 속도:

약 0.14 fps (5,159 초 소요)

 

실제 진행 상황 및 CPU 점유 상황 스크린샷:

 

rav1e q200 s3 encoding progress speed.gif

<rav1e 인코딩 실제 진행 상황. 고정된 이미지가 아니라 움짤입니다.>

 

rav1e q170 s3 CPU usage status.png

<rav1e 인코딩 시 CPU 점유 상황>

 

생성된 영상 특징:

비트레이트 1,112 kbps (4.06 MB), 30.03 초

 

다운로드 링크: https://drive.google.com/open?id=1grAr_WdemxEpIC0lST7qyZGAcWtr-2ey (팟플레이어나 MPC-HC로 재생 가능)

 

3) MKV 파일로 변환

사용한 명령어:


ffmpeg -hide_banner -i "The Simpsons Movie - 1080p Trailer clip.rav1e.q170.s3.ivf" -c:v copy "The Simpsons Movie - 1080p Trailer clip.rav1e.q170.s3.mkv"


 

실행 속도:

959x, 즉 30.03/959 = 약 0.031 초

 

생성된 영상 특징:

비트레이트 1,135 kbps (4.06 MB), 30.03 초

 

유튜브 링크: https://youtu.be/pPJqZvvSUz0

 

4. aomenc 인코딩 (FFmpeg의 libaom-av1)

참조 사이트: https://trac.ffmpeg.org/wiki/Encode/AV1

 

FFmpeg의 AV1 인코딩은 비교적 간략합니다. FFmpeg 내에서 libaom-av1을 코덱으로 호출하여 mkv 포맷으로 인코딩하면 됩니다.

이때 퀄리티 모드, 2-패스 인코딩, 1-패스 인코딩 등 세 가지 방법이 가능한데 지나치게 긴 인코딩 시간 때문에 1-패스 인코딩만 실행했습니다.

 

인코딩에 사용된 libaom의 버전은 1.0.0-691-gbb8157b89입니다.

 

사용한 명령어:


ffmpeg -hide_banner -i "The Simpsons Movie - 1080p Trailer clip.mp4" -strict experimental -c:v libaom-av1 -b:v 1M -cpu-used 2 -y "The Simpsons Movie - 1080p Trailer clip.aom.1M.cpu2.1pass.mkv"


-strict experimental 옵션은 반드시 들어가야 함.

rav1e 인코딩 버전과 비교하기 위해 비슷한 비트레이트인 1 Mbps = 1,000 kbps를 선택함.

-cpu-used 값이 높을수록 인코딩 속도는 개선되나 화질은 저하됨. 기본값 1에서 약간 높은 값을 선택함.

 

실행 속도:

0.1 fps, 0.00302x => 30.03/0.00302 = 약 9,944초 소요

 

CPU 점유 상황 스크린샷:

 

FFmpeg libaom-av1 1M cpu2 1pass CPU usage status.png

<FFmpeg(aomenc) 인코딩 시 CPU 점유 상황>

 

생성된 영상 특징:

비트레이트 1,079 kbps (3.86 MB), 30.03 초

 

유튜브 링크: https://youtu.be/W7_QSw1qSQE

 

5. 결론

  • 아직은 인코딩 속도가 한심할 정도로 느립니다. 그나마 rav1e가 낫지만 두 배 가까운 속도 향상에도 불구하고 (또는, 그렇기 때문에) 화질은 aomenc보다 떨어집니다. 심지어 비트레이트가 더 높은데도 그렇습니다.
  • rav1e와 aomenc 둘 다 CPU를 충분히 활용하지 못합니다. 코어는 모두 사용하는 것으로 보이지만 CPU 점유율은 인코딩 내내 40% 대를 유지합니다.
  • 당연한 얘기지만, 아직 개발 초기이기에 호환성은 무척 낮습니다. 팟플레이어나 MPC-HC, mpv 같은 데스크탑 재생기에서는 재생이 가능하지만 재생 중 탐색이 무척이나 느리거나 아예 불가능합니다. 웹브라우저 내에 video 태그를 붙여서 재생하는 옵션은, 크롬 같은 경우 버전 70 이후부터 AV1 디코더가 지원되므로 아직은 불가능합니다. (관련 문서Firefox나 Opera 같은 경우에는 최근에 AV1 디코더를 지원하기 시작했고, Safari는 아직 지원이 되지 않고 있습니다. Edge에 대해서는 잘 모르겠군요.
  • 현재로서는 버그가 없으며 안정적이면서도 실용적인 속도를 낼 수 있는 수준까지는 갈 길이 멉니다.

 

이상입니다. 관심 있는 분은 코멘트 해주시기 바랍니다.

 

Facebook Twitter Pinterest Kakao
  • ?
    유토짱 2018.10.25 21:31
    새로운 기술들을 알게해줘서 감사합니다.
    HEVC.... 좋은기술인데.
  • ?
    JKyle 2018.10.27 18:26

    기술의 수명을 결정하는 것은 기술 자체의 유용성보다는 기술 외적인 요인, 특히 시장에서의 선택인 것 같습니다. VHS vs 베타도 그랬고, Dvorak vs Qwerty도 그랬고, 두벌식 vs 세벌식도 그랬듯이요.

     

    하지만 이 경우는 좀 다른 것이, HEVC이 현재 대중적으로 많이 이용되고 있어서 아직은 HEVC vs AV1 구도가 형성되고 있지는 않다는 거죠. 단지 업체들이 자신들의 필요(=라이센스 비용 절감)에 따라 그런 구도를 형성하려고 하고 있을 뿐입니다.

     

    그나마 엔드 유저 입장에서 볼 때 AV1이 HEVC보다 나은 점이라면, 설계 단계에서부터 그래픽 카드 제조업체들이 참여해서 코덱의 하드웨어 구현을 용이하게 만들도록 했다는 점이랄까요? HEVC보다 높은 복잡도를 갖고 있지만 어쩌면 HEVC보다 하드웨어 재생과 인코딩이 더 개선될지도 모른다는 희망(?)을 갖게 하는데, 물론 결과는 나와봐야 알 것 같습니다. 현재 예상으로는 내년 말이나 내후년 초쯤 돼야 AV1의 하드웨어 가속 디코딩/인코딩이 지원되는 그래픽 카드가 나올 거라고 하니 아직은 시간이 필요한 것 같습니다.

     

    재미있는 것은 HEVC을 만들었던 팀(MPEG & VCEG)이 다시 뭉쳐서 또 새로운 코덱을 만들고 있다는 겁니다. VVC(Versatile Video Coding)라는 이름으로 진행되고 있는데, 흥미로운 특징 중 하나가 동적으로 변화하는 영상의 특성들을 수용할 수 있게 한다(scalable video coding for temporal (frame rate), spatial (resolution), SNR, color gamut and dynamic range differences)는 겁니다. 그리고 이것 역시 AV1처럼 복잡도가 높아서 HEVC보다 10배 이상이라고 하는군요. 최종 표준안은 2020년 말까지 확정 예정이라니, 이건 AV1보다 갈 길이 더 먼 것 같습니다. 자세한 내용은 위키피디어의 해당 문서 부분을 참고하시길...

  • ?
    小樱 2018.12.10 21:28
    对的,现在单线程,但是google youtube采用了,肯定会成为国际标准,这点放心

  1. 소리를 4가지로 분리하는 샤나보컬리무버 프로그램을 소개합니다.

    Date2024.03.22 ByRina Reply0 Views15372 Votes5
    read more
  2. 샤나인코더 통합 검색 기능 개선(샤나인코더 우측 상단에 있는 검색창을 사용해 보세요.)

    Date2021.09.30 ByRina Reply0 Views30047 Votes2
    read more
  3. 자유게시판에서는 자유롭게 글을 작성할 수 있지만 다음과 같은 내용은 삭제돼요

    Date2020.03.18 ByRina Reply0 Views27293 Votes5
    read more
  4. [필독] 질문 전에 반드시 읽으세요!!!

    Date2019.09.16 Category일반 ByJKyle Reply3 Views47718 Votes7
    read more
  5. [알림] 질문 먹튀하지 마시기 바랍니다 => 본문 변경 금지

    Date2018.10.12 Category일반 ByJKyle Reply24 Views45110 Votes18
    read more
  6. AV1 기본 가이드

    Date2020.09.09 Category정보 ByJKyle Reply0 Views7881 Votes1
    Read More
  7. 윈도우에서 ffmpeg 명령을 직접 실행하시는 분들은

    Date2020.09.05 Category정보 ByJKyle Reply3 Views1668 Votes0
    Read More
  8. AV1 하드웨어 디코딩이 드디어...

    Date2020.09.02 Category정보 ByJKyle Reply5 Views2571 Votes0
    Read More
  9. GTX1050ti Vs GTX1650 Vs GTX1070 Vs RTX2070super NVENC 인코딩 테스트

    Date2020.08.01 Category정보 By핀다 Reply2 Views4530 Votes0
    Read More
  10. AV1(libaom), VVC(VTM) 비교

    Date2020.07.18 Category정보 ByJKyle Reply3 Views2575 Votes0
    Read More
  11. 동영상 재생이 안될 때 , 삼성 모니터, 애플 ,셋톱박스,LG 모니터

    Date2020.06.07 Category정보 By엘리시움스 Reply5 Views2318 Votes0
    Read More
  12. AviSynth와 샤나인코더의 궁합

    Date2020.06.01 Category정보 ByJKyle Reply0 Views1697 Votes0
    Read More
  13. HDR to SDR 변환 테스트: 샤나인코더 vs AviSynth+(DGTonemap vs DGHDRtoSDR)

    Date2020.04.03 Category정보 ByJKyle Reply1 Views4060 Votes0
    Read More
  14. H264(x264) 인코딩 테스트: 샤나인코더, FFmpeg, StaxRip

    Date2020.03.15 Category정보 ByJKyle Reply3 Views2216 Votes0
    Read More
  15. HEVC(x265) 인코딩 테스트: 샤나인코더, FFmpeg, StaxRip

    Date2020.03.15 Category정보 ByJKyle Reply1 Views4318 Votes0
    Read More
  16. 동영상 시간단위 분할과 영상자르기 위한 간단 bat 파일 (ffmpeg이용)

    Date2020.02.25 Category정보 By감자틔긤 Reply1 Views3373 Votes0
    Read More
  17. 44c 88t 머신 RipBot264 사용기

    Date2020.02.11 Category정보 ByHS Reply3 Views2300 Votes1
    Read More
  18. 튜링 아키텍쳐상의 NVENC의 '화질'에 대하여.

    Date2019.09.22 Category정보 ByHS Reply5 Views4024 Votes0
    Read More
  19. 아키텍쳐별 NVENC performance

    Date2018.12.29 Category정보 ByHS Reply1 Views3467 Votes1
    Read More
  20. AV1 코덱의 현재 상황 (인코딩 테스트 - FFmpeg 와 rav1e)

    Date2018.10.11 Category정보 ByJKyle Reply3 Views15523 Votes0
    Read More
  21. 여러가지 코덱으로 저화질 인코딩 해 보았습니다 (AV1 포함)

    Date2018.09.26 Category정보 By마소리스 Reply8 Views7171 Votes0
    Read More
  22. 해상도 변경 + 하드웨어 가속 인코딩 시 속도 향상

    Date2018.08.23 Category정보 ByJKyle Reply13 Views10288 Votes0
    Read More
  23. 부드러운 움직임의 60 프레임 인코딩

    Date2018.07.16 Category정보 ByJKyle Reply14 Views16295 Votes0
    Read More
  24. tonemap, zscale 필터를 이용한 HDR->SDR 변환 (FFmpeg CLI)

    Date2018.06.26 Category정보 ByJKyle Reply7 Views4548 Votes0
    Read More
  25. 블루레이 (Blu-ray) 폰트 모음 트루폰트로 올립니다. (용량관계로 댓글 부분확인) 3회 연속 업로드함.

    Date2017.10.28 Category정보 By능소화 Reply2 Views5275 Votes0
    Read More
Board Pagination Prev 1 2 3 Next
/ 3