HDR용 AVIF 제작
개시하다
이 글은'AVIF에 대한 ImageMagick 구축'의 후속 글이다.
이전 글은 AVIF 파일을 만들기 위해 ImageMagick을 구축해 봤는데 ImageMagick의 AVIF 대응이 제한되어 HDR 출력을 할 수 없다는 결론을 내렸다.
그래서 HDR의 AVIF를 만드는 방법을 찾았어요.
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 기준
이러한 조건을 만족시키는 도구로 삼다
둘 다 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로 전환할 수 있는 것이 조건이다.
나는 그곳에서 간단한 변환기 처리를 했다.
출력된 PNG는 ICC를 포함하지 않기 때문에 엄밀히 말하면 정확하지 않지만cavif/avvifenc는 이미지 데이터 부분만 보기 때문에 중간 원본으로서 문제가 없을 것입니다.
참고로 간단한 0.0~1.0의 선형 점차적인 변화를 BT.22100PQ로 변환한 sRGB 이미지는 다음과 같다.
어둡다는 것은 당연한 일이지만, 색이 옅어 보이기 때문에 색역이 적합하지 않다는 것을 잘 알고 있다.
AVIF로 변환
여기는 avvifenc를 사용합니다.
구축
최소한 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
--min,--max값이 클수록 화질이 떨어지고 0은 손상이 없습니다.
AVIF 표시
처음에 작성된 Chrome은 이미지 형식으로 AVIF에 대응하고 HDR 디스플레이에도 대응합니다.또한 HTML 태그의 소스를 지정할 수 있으므로 HDR 콘텐츠를 유튜브 이외의 방법으로 온라인에 공개할 수 있습니다.
테스트 이미지를 준비했습니다.환경에 맞는 Chrome을 HDR 모니터로 출력해 보십시오.
Magick.NET 프로그래밍 사용
Magick.NET는 ImageMagick의 C# 패키지 라이브러리에서 다양한 정지 이미지 형식을 간단하게 처리할 수 있습니다.샘플 코드를 보면 얼마나 간단한지 알 수 있을 것 같아요.조금만 더 간단하면 이만큼이야.
약간의 편차가 있는 것은 픽셀 값의 처리다.ImageMagick은 처리 이미지의 픽셀 정밀도에 따라 다릅니다(Q8/Q16/Q16-HDRI).이번 HDR 처리로 Q16-HDI를 선택했습니다.
MagickImage.GetPixels가 되돌아오는 유형은 IPixelCollection
끝말
AVIF 인코딩, 디코딩(조금 번거롭지만)도 가능하고 크롬은 HDR을 포함해서도 대응할 수 있기 때문에 이제는 브라우저에서 HDR 정지 이미지를 정상적으로 처리할 수 있는 단계에 들어섰다고 생각합니다.안드로이드 12도 지원되는 것 같아요.
예전 같으면 RAW로 촬영한 사진과 HDR로 렌더링한 CG 등은 결국 SDR로 전환해야 하지만, HDR을 사용한 AVIF를 통해 온라인에 주인에게 더 가까운 영상을 올릴 수 있다.향후 표준화·보급을 기대한다.
Reference
이 문제에 관하여(HDR용 AVIF 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tan_y/articles/377da3fa64f3a0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)