AWS Elemental Media Convert로 AV1을 만들어 보세요. 화질 같은 거.

14300 단어 AV1MediaConvertAWS
본 보도는 DMM 그룹 Adovent Calender 2020의 마지막 투고입니다.
감사합니다.DMM에서 애니메이션 제작 기반 팀의 팀 팀장yanoshi을 맡고 있습니다.
나는 광고 달력이 시작된 줄 알았는데, 마지막 날은 비어 있지 않았느냐!그래서 마지막 날을 먹었어요.메리클리!크리스마스지만 올해도 특별한 계획은 없다.헤헤.
작년이 첫날이었고 올해가 마지막이었다.비어 있는 건 늘 이런 날이야.이해하기 쉬워요. 좋아요.
그럼 어떤 기사를 쓸까요?벌써 12/24인 줄 알았는데.생각보다 바빠서 아무것도 못 하는데...
그래서 작년 보도에 이어 AV1 이야기를 계속하고 싶습니다.
참고 (약속):
본 보도의 내용은 소속 조직과 전혀 관계가 없다.모두 필자 개인의 조사/개인의 견해로 개인이 이용하는 범주에 따라 기술 검증을 한다.
또한 필자는 본고의 내용을 실시하여 초래한 모든 손실에 대해 일체 보증하지 않는다.

AV1이란 무엇입니까?


작년 광고 보도를 참고하세요.많이 썼어요.진짜?
AV1 인코더 속도와 품질 비교 - ffmpeg(libaom) vs SVT-AV1-Qiita
아주 대충 설명하면
"무특허 (여기는 논의할 여지가 있는 것 같다) 사용할 수 있는 애니메이션 코딩기입니다. 압축률은 높지만 인코딩 시간이 매우 필요합니다."
이런 놈이야.

2020년은 AV1이 우리에게 더 가까워지는 해입니다.


드디어 AV1의 하드웨어 디코더가 GPU에 탑재되기 시작했다.
NVIDIA RTX30 시리즈, Radeon RX6000 시리즈, Intel Xe 시리즈 근처에 AV1 하드웨어 디코더가 설치되어 있습니다.
자세한 발굴은 하지 않았지만 4K 비디오도 디코딩 가능이기 때문에 다양한 애니메이션을 활용할 수 있는 분야에 가까워진 것 같다.
그렇다면 그런 클라우드 인코딩 솔루션 주변에서도 AV1 대응이 속속 발표되고 있다.
AWS Elemental MediaConvert에서 AV1 인코딩 가져오기
이거 꼭 해봐야 돼!그렇게 생각하지만 도저히 해본 적이 없어서 이번에는 Media Convert로 AV1 인코딩을 해봤어요.

입력 파일 준비


작년의 인코딩 결과가 아직 곁에 남아 있기 때문에 이번에도 Sintel.BigBuckBunny와 마찬가지로 CC BY3.0.감사합니다.
사이트 제목 1080p의 데이터를 다운로드했습니다.
편집은 Media Convert에서 할 수 있지만 프레임 수준에서 예쁘게 잘릴 자신이 없기 때문에 미리 옆에서 합니다.
ffmpeg -ss 00:00:00 -i input.mkv -c:v copy -c:a copy -t 00:00:30 "sintel_30s.mp4"
이 파일을 S3에 적절히 업로드합니다.

IAM 준비


제가 먼저 Media Convert용 Role을 만들겠습니다.용례로 Media Convert용 설정이 있으니 사용하세요.

미디어 변환


다시 설명할 정도는 아니지만 AWS Elemental Media Convert는 파일 인코딩과 패키지 등을 하는 서비스입니다.

그래서 나는 인코딩 숙제를 만들고 싶다

입력 설정


S3에 미리 업로드된 MP4 파일을 지정합니다.

출력 설정


시간 설정...

인코딩 설정을 계속합니다.
아이고.설정은 QVBR밖에 없는데.그래서 그동안 작성한 파일과 단순 비교는 안 될 것 같습니다.우선 품질 등급7을 설정하고 최대 비트레이트2000kbps를 설정해 보자.

IAM 관련


아까 한 롤이랑 연락해.

실행!


소요 시간은 2:51 입니다.역시 빠르군.

완료된 파일의 비트레이트

1671kbps.

그나저나 지난번에 리바움으로 만든 파일은 649kbps인 것 같습니다.

이것은 분위기의 절반 정도의 비트레이트라도 문제없다.다시 해봐.

1000kbps로 설정하고 인코딩해 보세요.


2분 34초면 인코딩할 수 있습니다.출력 비트레이트는 892kbps 입니다.libaom에 가까운 값입니다.파일 크기는 1.374배 정도입니다.
화질을 비교해서 이 파일의 사이즈 차이와 화질 차이가 어떤지 보세요.

화질 한번 볼게요.


이런 느낌으로 수치를 뽑아 보세요.
ffmpeg -i sintel_30s_av1.mp4 -t 00:00:30 -r 24 -i sintel_30s.mp4 -t 00:00:30 -r 24 -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=vmaf_v0.6.1.pkl" -repor t -f null -
결과는95.264100.괜찮네.
지난해 ffmpeg(libaom)-cpu-used 1이 얻은 값97.248482이기 때문에 이에 비해 화질이 낮다.
$ ./ffmpeg.exe -i sintel_30s_av1.mp4 -t 00:00:30 -r 24 -i sintel_30s.mp4 -t 00:00:30 -r 24 -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=vmaf_v0.6.1.pkl" -repor t -f null -
ffmpeg started on 2020-12-24 at 23:53:20
Report written to "ffmpeg-20201224-235320.log"
Log level: 48
ffmpeg version N-95652-gd1d627fafd-gc54268ce02+1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.0 (Rev2, Built by MSYS2 project)
  configuration: --prefix=/local32 --bindir=/local32/bin-video --pkg-config-flags=--static --disable-autodetect --enable-amf --enable-bzlib --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-iconv --enable-lzma --enable-nvenc --enable-zlib --enable-sdl2 --enable-ffnvcodec --enable-nvdec --enable-cuda-llvm --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libdav1d --disable-debug --enable-fontconfig --enable-libass --enable-libbluray --enable-libfreetype --enable-libmfx --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libwavpack --enable-libwebp --enable-libxml2 --enable-libzimg --enable-libshine --enable-gpl --enable-avisynth --enable-libxvid --enable-libaom --enable-libopenmpt --enable-version3 --enable-chromaprint --enable-frei0r --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmodplug --enable-librtmp --enable-librubberband --enable-libssh --enable-libtesseract --enable-libxavs --enable-libzmq --enable-libzvbi --enable-openal --enable-libvmaf --enable-libcodec2 --enable-libsrt --enable-ladspa --enable-opencl --enable-opengl --enable-libopenh264 --enable-mbedtls --extra-cflags=-fopenmp --extra-libs=-lgomp --extra-cflags=-DLIBTWOLAME_STATIC --extra-libs=-lstdc++ --extra-cflags=-DLIBSSH_STATIC --extra-ldflags='-Wl,--allow-multiple-definition' --extra-cflags=-DCACA_STATIC --extra-cflags=-DMODPLUG_STATIC --extra-cflags=-DCHROMAPRINT_NODLL --extra-libs=-lstdc++ --extra-cflags=-DZMQ_STATIC --extra-libs=-lpsapi --extra-cflags=-DLIBXML_STATIC --extra-libs=-liconv --disable-w32threads --extra-cflags=-DKVZ_STATIC_LIB --extra-version=gc54268ce02+1
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 60.100 / 58. 60.100
  libavformat    58. 34.101 / 58. 34.101
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
[libdav1d @ 08e117c0] libdav1d 0.5.1
[libdav1d @ 08e117c0] Frame size limit reduced from 2147483647 to 67108864.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sintel_30s_av1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomav01
    creation_time   : 2020-12-24T14:19:18.000000Z
  Duration: 00:00:30.04, start: -0.041667, bitrate: 994 kb/s
    Stream #0:0(und): Video: av1 (Main) (av01 / 0x31307661), yuv420p(tv, bt709/unknown/unknown), 1920x818, 891 kb/s, 24 fps, 24 tbr, 24k tbn, 24k tbc (default)
    Metadata:
      creation_time   : 2020-12-24T14:19:18.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         :
                      : AOM Coding
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2020-12-24T14:19:18.000000Z
      handler_name    : ETI ISO Audio Media Handler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'sintel_30s.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:30.08, start: 0.000000, bitrate: 16240 kb/s
    Chapter #1:0: start 0.000000, end 30.000000
    Metadata:
      title           : Chapter 01
    Stream #1:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709/unknown/unknown), 1920x818, 15595 kb/s, SAR 1:1 DAR 960:409, 24 fps, 24 tbr, 16k tbn, 48 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #1:1(eng): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
    Side data:
      audio service type: main
    Stream #1:2(eng): Data: bin_data (text / 0x74786574), 0 kb/s
    Metadata:
      handler_name    : SubtitleHandler
[libdav1d @ 08e28a40] libdav1d 0.5.1
[libdav1d @ 08e28a40] Frame size limit reduced from 2147483647 to 67108864.
Stream mapping:
  Stream #0:0 (libdav1d) -> settb (graph 0)
  Stream #1:0 (h264) -> settb (graph 0)
  libvmaf (graph 0) -> Stream #0:0 (wrapped_avframe)
  Stream #1:1 -> #0:1 (ac3 (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomav01
    encoder         : Lavf58.34.101
    Chapter #0:0: start 0.000000, end 30.000000
    Metadata:
      title           : Chapter 01
    Stream #0:0: Video: wrapped_avframe, yuv420p, 1920x818, q=2-31, 200 kb/s, 24 fps, 24 tbn, 24 tbc (default)
    Metadata:
      encoder         : Lavc58.60.100 wrapped_avframe
    Stream #0:1(eng): Audio: pcm_s16le, 48000 Hz, 5.1(side), s16, 4608 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc58.60.100 pcm_s16le
    Side data:
      audio service type: main
frame=  721 fps= 46 q=-0.0 Lsize=N/A time=00:00:30.00 bitrate=N/A speed=1.92x
video:287kB audio:16875kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[libvmaf @ 09c58780] VMAF score: 95.264100

과거 인코딩 결과와 비교


아마도 그렇습니다. 미디어컨버터는 인코딩을 잘라낸 것이라고 생각하기 때문에 이렇게 짧은 파일로 비교하는 것은 매우 잔혹합니다.
비록 이렇게 말하지만 그래도 비교하였다.속도도 그렇지만 압축 효율이 좋지 않은 것 같아요.VP9만 보면 안 돼요?이런 느낌은 좀
인코더
인코딩 시간(초)
VMAAF(소스와 비교)
비트레이트
AWS Elemental MediaConvert
154
95.264100
892 kbps
x264: ffmpeg(libx264)
5.719
87.969659
790 kbps
VP9: ffmpeg(libvpx)
75.16
96.28681
894 kbps
AV1: ffmpeg(libaom) -cpu-used 12,834.16
97.248482
649 kbps
AV1: ffmpeg(libaom) -cpu-used 5795.297
96.868897
696 kbps
AV1: SVT-AV1 -enc-mode 1501.466
96.962693
721 kbps
AV1: SVT-AV1 -enc-mode 554.261
95.945126
741 kbps

총평


시간이 없어서 상당히 대충 검증했다.
하지만 왠지 분위기가 느껴져서 좋아요.
아마도 AWS Elemental은 VP9에 대응하는 대신 AV1에 대응하는 것일 것이다.
VP9 씨, 아직 버전 1.0이 안 왔는데... 아, VP9에 대응하는 것보다 AV1에 대응하는 게 더 장래성이 있다고 생각해요...
2020년에도 AV1이 안정적으로 보급될 것 같지만 특허 주위에 먹구름이 드리운 한 해로 느껴진다.
가능한 한 빨리 각종 문제를 해결할 수 있기를 바란다.
다만, 비즈니스 측면에서 고려하면 특허 탱크가 x265 수준의 혼돈이 되지 않으면 특허료를 따로 지불해도 됩니까?의외로 VVC 최종적으로 침착한 곳이 되고 싶어서??이렇게 생각하니 오늘이 이맘때다.

선전하다


이번 게임도 우리 회사의 엔지니어 지원 제도 덕분에 내 지갑은 다치지 않았다.감사합니다.
DMM Tech Empowerment-엔지니어 디자이너를 위한 지원 패키지 발표! -DMM inside
AWS 트레이닝 활용 사례: DMM.com
2020년의 개인적인 회고로 올해 회사의 오드 매체에서 팀에서 많은 기사를 썼다.
당사 내에서 제작된 커팅 인코더 시스템도 살짝 접했으니 관심 있으신 분들은 꼭.
연재, 시작~진화된 애니메이션 배신기초~DMM inside
그러면 상술한 인코더 노력의 성과로 4K 배신이 시작되었다.화제의 게임기 PS5도 볼 수 있어요.다들 봐요.시끌벅적하다!
DMM 최초 4K 대응 애니메이션 기간 한정 무료 공개!
그리고 AWS 씨의 목소리가 인터비에도 등장했습니다.
"인터뷰에서 말을 하다니...!"이런 느낌.실황 녹음과 편지 배달 사건 소개도 상당히 많이 했으니까 관심 있으신 분들은 꼭 보셔야 돼요. (볼 수 있을까요?)
AWS를 이용한 메시징 사례 및 아마존 CloudFront의 최신 업데이트
[보고서] AWS를 활용한 배신 사례와 아마존 CloudFront의 최신 업데이트 #interbee2020|Developers.IO
많은 일이 있었던 한 해였어요.그런데 그중에서도 열심히 했나요?개인적으로는내년에도 열심히 하고 싶어요.좋은 한 해였으면 좋겠다.
파이팅!
내년에도 저희 회사 DMM을 잘 부탁드립니다!(마지막 날 엔딩인 듯)
DMM.com 2020 HIGHLIGHTS - YouTube

좋은 웹페이지 즐겨찾기