HDR용 AVIF 제작

5641 단어 hdraviftech

개시하다


이 글은'AVIF에 대한 ImageMagick 구축'의 후속 글이다.
이전 글은 AVIF 파일을 만들기 위해 ImageMagick을 구축해 봤는데 ImageMagick의 AVIF 대응이 제한되어 HDR 출력을 할 수 없다는 결론을 내렸다.
그래서 HDR의 AVIF를 만드는 방법을 찾았어요.
AVIF의 HDR 관련 보도도 참고 가치가 있으니 꼭 읽어 주십시오.
  • AVIF를 사용하여 정지 그림에 HDR 표시를 시도해 보십시오
  • AVIF는


    지난번 기사를 잊어버려서 다시 썼어요.
    AVIF는'HEIF'라는 비디오 코덱의 압축 기술을 정지 이미지로 전용하는 형식이다.HEIF는 대체로 한 프레임의 영상만 있는 MP4 파일과 비슷하며 하드웨어 디코더의 고속화가 장점이다.AVIF는 컨테이너에 HEIF, 코덱에 AV1을 사용합니다.
    그나저나 아이폰 등이 지원하는 HEIC는 HEVC(H.265)를 코덱으로 사용하는 HEIF다.
    AV1은 HDR에 대응하는 형식이기 때문에 이와 같은 형식의 AVIF도 당연히 HDR에 대응한다. 나는 웹용 HDR 정적 이미지 형식의 표준화 버전에 가장 가깝다고 생각한다.현재 Windows용 Chrome은 HDR 디스플레이를 포함한 AVIF 지원을 확인합니다.

    HDR용 AVIF 도구


    HDR 기준
  • 10bit 컬러 이상
  • 색상 공간을 설정할 수 있는 메타데이터(BT.2100 PQ 선택)
  • 반드시 만족해야 한다.ImageMagick에 AVIF 옵션이 지정되어 있지 않으므로 설정할 수 없습니다.
    이러한 조건을 만족시키는 도구로 삼다
  • avifenc - AOMediaCodec / libavif
  • cavif - link-u / cavif
  • 두 개 있어요.
    둘 다 10/12비트, YUV420/4422/444, 색상 공간 지정 지원이 있습니다.
    어떤 말을 하려면, avvifenc는 디코더(avvifdec)와 함께 사용할 수 있다고 생각합니다.
    cavif는내가 테스트할 때.에서matrix-coeffcients에서bt2020을 지정할 수 없습니다.치명적이진 않지만 이상적이진 않아요.

    소스로 준비한 PNG.


    avfenc, cavif에는 소스로 PNG가 필요합니다.말은 그렇지만 어떤 PNG라도 되는 것은 아니다.
    일반적으로 이런 인코더는 색채 공간이 바뀌기 전에 완성된 것이 아니며cavif/avvifenc도 HDR의 메타데이터를 삽입하지만 원본으로서의 영상은 반드시 목적색 공간을 따라야 한다.일반적으로 PNG는 sRGB 색 공간이기 때문에 대부분의 도구는 sRGB 색 공간으로 저장된다.PNG의 규격은 ICC 프로필이 박혀 있기 때문에 다양한 색 공간에 대응할 수 있지만 이번에는 BT.200PQ로 BT.200PQ로 전환할 수 있는 것이 조건이다.
    나는 그곳에서 간단한 변환기 처리를 했다.
  • aosoft / ConvertToHDRPNG
  • EXR를 BT.200PQ의 색 공간으로 변환하여 16비트 PNG에 저장합니다.EXR, 매직만 확인했습니다.NET가 묶은 Image Magick이 읽을 수 있는 소스라면 뭐든지 갈 수 있을 거예요.
    출력된 PNG는 ICC를 포함하지 않기 때문에 엄밀히 말하면 정확하지 않지만cavif/avvifenc는 이미지 데이터 부분만 보기 때문에 중간 원본으로서 문제가 없을 것입니다.
    참고로 간단한 0.0~1.0의 선형 점차적인 변화를 BT.22100PQ로 변환한 sRGB 이미지는 다음과 같다.

    어둡다는 것은 당연한 일이지만, 색이 옅어 보이기 때문에 색역이 적합하지 않다는 것을 잘 알고 있다.

    AVIF로 변환


    여기는 avvifenc를 사용합니다.
  • AOMediaCodec / libavif
  • 구축


    최소한 CMake와 NASM 조합의 디코더가 필요하며, 인코더에 따라 Meson, Ninja, cargo(Rust)가 필요하다."Build Notes"를 확인하고 필요한 물건을 설치하십시오.
    그리고 ext 디렉터리로 이동해서 외부 라이브러리를 만듭니다.
    $ cd ext
    $ ./zlibpng.cmd
    $ ./aom.cmd      
    $ ./dav1d.cmd    
    $ ./rav1e.cmd    
    
    zlibpng은 필수입니다. 기타 조합에 따라 aom은 디코더/인코더이고dav1d는 디코더이며rav1e는 인코더입니다.
    $ cd ..
    $ mkdir build
    $ cd build
    $ cmake .. -DAVIF_CODEC_AOM=ON -DAVIF_LOCAL_AOM=ON -DAVIF_CODEC_DAV1D=ON -DAVIF_LOCAL_DAV1D=ON -DAVIF_CODEC_RAV1E=ON -DAVIF_LOCAL_RAV1E=ON -DBUILD_SHARED_LIBS=OFF -DAVIF_LOCAL_JPEG=1 -DAVIF_LOCAL_ZLIBPNG=1 -DAVIF_BUILD_APPS=ON
    $ make
    
    사용하지 않는 디코더가 닫히면 미리 구축할 필요가 없습니다.

    바꾸다


    HDR용 설정
    $ avifenc src.png -d 10 -y 420 --cicp 9/16/9 --min 0 --max 0 dst.avif
    
  • -d→비트 깊이(10 또는 12)
  • - y→YUV 형식(420 or 422 or 444)
  • -고정cicp→9/16/9
  • --min→계량화 매개 변수(최소)
  • --max→계량화 매개 변수(최대)
  • YUV 형식에 대한 자세한 내용은 여기서 생략합니다.보통 420은 문제가 없을 것 같은데 악화되고 싶지 않으면 444.
    --min,--max값이 클수록 화질이 떨어지고 0은 손상이 없습니다.

    AVIF 표시


    처음에 작성된 Chrome은 이미지 형식으로 AVIF에 대응하고 HDR 디스플레이에도 대응합니다.또한 HTML 태그의 소스를 지정할 수 있으므로 HDR 콘텐츠를 유튜브 이외의 방법으로 온라인에 공개할 수 있습니다.
    테스트 이미지를 준비했습니다.환경에 맞는 Chrome을 HDR 모니터로 출력해 보십시오.
  • AVIF HDR Test (Unity HDRP Scene template)
  • Unity가 HDR 렌더링을 캡처하여 만든 AVIF입니다.SDR화된 톤마핑을 무효화해 HDR 영상으로 구현한 것이다.이걸 SDR로 직접 보면 단순 감소로 변해 예쁠 것 같지 않으니 HDR 환경에서 확인하세요.

    Magick.NET 프로그래밍 사용

  • dlemstra / Magick.NET
  • 본론보다 조금 벗어나다.
    Magick.NET는 ImageMagick의 C# 패키지 라이브러리에서 다양한 정지 이미지 형식을 간단하게 처리할 수 있습니다.샘플 코드를 보면 얼마나 간단한지 알 수 있을 것 같아요.조금만 더 간단하면 이만큼이야.
    약간의 편차가 있는 것은 픽셀 값의 처리다.ImageMagick은 처리 이미지의 픽셀 정밀도에 따라 다릅니다(Q8/Q16/Q16-HDRI).이번 HDR 처리로 Q16-HDI를 선택했습니다.
    MagickImage.GetPixels가 되돌아오는 유형은 IPixelCollection입니다. 즉 flat 정밀도입니다. 그러나 실제 값의 범위는 0.0~1.0이 아니라 0.0~65535.0입니다.원래 ImageMagick의 문서를 봤는데 Q16은 uint16, Magick인 것 같아요.NET는 플랫인 것 같아요.이 점은 정밀도에 문제가 생길 수 있으니 주의해야 한다.

    끝말


    AVIF 인코딩, 디코딩(조금 번거롭지만)도 가능하고 크롬은 HDR을 포함해서도 대응할 수 있기 때문에 이제는 브라우저에서 HDR 정지 이미지를 정상적으로 처리할 수 있는 단계에 들어섰다고 생각합니다.안드로이드 12도 지원되는 것 같아요.
    예전 같으면 RAW로 촬영한 사진과 HDR로 렌더링한 CG 등은 결국 SDR로 전환해야 하지만, HDR을 사용한 AVIF를 통해 온라인에 주인에게 더 가까운 영상을 올릴 수 있다.향후 표준화·보급을 기대한다.

    좋은 웹페이지 즐겨찾기