조회 수 15709 추천 수 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采用了,肯定会成为国际标准,这点放心

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 소리를 4가지로 분리하는 샤나보컬리무버 프로그램을 소개합니다. Rina 2024.03.22 20408 6
공지 샤나인코더 통합 검색 기능 개선(샤나인코더 우측 상단에 있는 검색창을 사용해 보세요.) Rina 2021.09.30 34338 2
공지 자유게시판에서는 자유롭게 글을 작성할 수 있지만 다음과 같은 내용은 삭제돼요 Rina 2020.03.18 30514 5
공지 일반 [필독] 질문 전에 반드시 읽으세요!!! 3 file JKyle 2019.09.16 52646 8
공지 일반 [알림] 질문 먹튀하지 마시기 바랍니다 => 본문 변경 금지 24 JKyle 2018.10.12 50214 18
26 정보 AV1 하드웨어 디코딩에 관한 몇 가지 소식 1 JKyle 2020.10.17 1866 1
25 정보 NVENC 설정에서 프리셋 2.0이 주는 편리함 6 file JKyle 2020.09.23 4414 3
24 정보 AV1 기본 가이드 JKyle 2020.09.09 8025 1
23 정보 윈도우에서 ffmpeg 명령을 직접 실행하시는 분들은 3 JKyle 2020.09.05 1944 0
22 정보 AV1 하드웨어 디코딩이 드디어... 5 JKyle 2020.09.02 2657 0
21 정보 GTX1050ti Vs GTX1650 Vs GTX1070 Vs RTX2070super NVENC 인코딩 테스트 2 핀다 2020.08.01 4589 0
20 정보 AV1(libaom), VVC(VTM) 비교 3 JKyle 2020.07.18 2639 0
19 정보 동영상 재생이 안될 때 , 삼성 모니터, 애플 ,셋톱박스,LG 모니터 5 file 엘리시움스 2020.06.07 2388 0
18 정보 AviSynth와 샤나인코더의 궁합 file JKyle 2020.06.01 2190 0
17 정보 HDR to SDR 변환 테스트: 샤나인코더 vs AviSynth+(DGTonemap vs DGHDRtoSDR) 1 file JKyle 2020.04.03 4315 0
16 정보 H264(x264) 인코딩 테스트: 샤나인코더, FFmpeg, StaxRip 3 file JKyle 2020.03.15 3023 0
15 정보 HEVC(x265) 인코딩 테스트: 샤나인코더, FFmpeg, StaxRip 1 file JKyle 2020.03.15 4610 0
14 정보 동영상 시간단위 분할과 영상자르기 위한 간단 bat 파일 (ffmpeg이용) 1 file 감자틔긤 2020.02.25 3584 0
13 정보 44c 88t 머신 RipBot264 사용기 3 file HS 2020.02.11 2363 1
12 정보 튜링 아키텍쳐상의 NVENC의 '화질'에 대하여. 5 HS 2019.09.22 4073 0
11 정보 아키텍쳐별 NVENC performance 1 file HS 2018.12.29 3546 1
» 정보 AV1 코덱의 현재 상황 (인코딩 테스트 - FFmpeg 와 rav1e) 3 file JKyle 2018.10.11 15709 0
9 정보 여러가지 코덱으로 저화질 인코딩 해 보았습니다 (AV1 포함) 8 마소리스 2018.09.26 7235 0
8 정보 해상도 변경 + 하드웨어 가속 인코딩 시 속도 향상 13 file JKyle 2018.08.23 10393 0
7 정보 부드러운 움직임의 60 프레임 인코딩 14 JKyle 2018.07.16 16454 0
Board Pagination Prev 1 2 3 Next
/ 3