imageio

1 개의 포스트

discord

디스코드의 현대 (새 탭에서 열림)

Discord는 이미지 파이프라인에 애니메이션 WebP와 AVIF 지원을 추가해 첨부파일·임베드·애니메이션 이모지의 화질과 재생 성능을 개선했다. 특히 GIF보다 높은 색상 표현력과 알파 투명도를 제공하면서도 파일 크기를 크게 줄여 로딩 속도를 높이는 것이 핵심이다. 다만 플랫폼별 호환성과 디코딩 성능 문제 때문에 Discord는 기본 변환 포맷으로 WebP를 선택하고, AVIF는 호환성을 위해 WebP로 변환한다. ## GIF에서 WebP·AVIF로의 전환 - GIF는 오랫동안 짧은 애니메이션의 표준으로 사용됐지만 다음과 같은 한계가 있다. - 256색(8비트) 팔레트만 지원 - 완전 투명/불투명만 가능한 이진 투명도 - 비효율적인 압축으로 인한 큰 파일 크기 - WebP와 AVIF는 현대적인 이미지·동영상 압축 기술을 활용해 Discord의 대규모 미디어 전송에 더 적합하다. - Discord는 수억 명의 일일 활성 사용자가 매일 수십억 개의 이미지를 공유하므로, 이미지 품질뿐 아니라 저장·전송·재생 비용도 중요하게 고려해야 한다. ## 알파 투명도와 색상 표현력 향상 - WebP와 AVIF는 픽셀별로 다양한 투명도 값을 표현하는 알파 채널을 지원한다. - 부드러운 가장자리 표현 가능 - 반투명 스티커와 이모지 제작에 적합 - Discord의 라이트·다크 테마 배경에 자연스럽게 조화 - 색상 깊이도 GIF보다 크게 향상된다. - GIF: 256색 - WebP: 채널당 8비트, 약 1,670만 색상 - AVIF: 최대 채널당 12비트 - 그 결과 다음과 같은 이점이 있다. - 색상 그라데이션의 밴딩 감소 - 더 정확하고 선명한 색상 - 사진 이미지 표현력 향상 - 호환 디스플레이에서 HDR 지원 가능 ## 애니메이션 압축 효율 - WebP와 AVIF는 프레임 간 차이만 저장하는 방식으로 중복 데이터를 줄인다. - 주요 기술적 이점은 다음과 같다. - 프레임 간 압축 - 고급 예측 모드 - 품질과 파일 크기를 조절하는 인코딩 옵션 - 밀리초 단위의 가변 프레임 타이밍 - 예시로 제시된 애니메이션은 GIF가 302KB인 반면 WebP는 43KB로 크게 줄었다. - 특히 모바일 환경에서는 파일 크기 감소가 데이터 사용량과 로딩 시간 개선으로 직접 이어진다. ## 멀티플랫폼 지원의 어려움 - Discord는 웹, Windows·macOS·Linux 데스크톱, iOS, Android를 모두 지원해야 한다. - 모든 첨부 이미지와 임베드에 대해 다음 작업을 수행해야 한다. - 이미지 형식 검사 - 필요 시 포맷 변환 - 크기 조정 - 정지 이미지와 애니메이션 이미지의 일관된 처리 - 플랫폼마다 브라우저·운영체제·이미지 라이브러리의 지원 수준과 성능이 달라, 단순히 포맷을 추가하는 것만으로는 충분하지 않다. ## WebP를 기본 변환 대상으로 선택한 이유 - Discord는 AVIF보다 WebP를 우선적인 변환 포맷으로 선택했다. - 선택 이유: - 플랫폼 전반에서 거의 보편적인 지원 - AVIF보다 빠른 인코딩·디코딩 - 성숙한 도구와 넓은 생태계 - 예측 가능한 성능 - 단점도 존재한다. - AVIF의 10/12비트보다 낮은 8비트 색상 깊이 - 동일한 품질에서 AVIF보다 큰 파일 크기 - 일부 콘텐츠에서 압축 효율이 낮음 - 따라서 AVIF 파일은 최대한 높은 시각적 품질을 유지하면서 WebP로 변환한다. - HDR AVIF는 SDR로 톤 매핑해 원본의 색상 특성을 가능한 한 보존한다. ## iOS에서의 애니메이션 WebP 디코딩 문제 - Discord는 iOS에서 다양한 이미지 형식을 처리하기 위해 SDWebImage 라이브러리를 사용한다. - SDWebImage는 iOS 14 이상에서 Apple의 ImageIO를 이용해 WebP를 렌더링할 수 있어 처음에는 적합한 선택처럼 보였다. - 그러나 성능 테스트에서 ImageIO 기반 애니메이션 WebP 재생 문제가 발견됐다. - 시간이 지날수록 프레임 타이밍이 늦어짐 - 고해상도 또는 프레임 수가 많은 애니메이션에서 문제가 심화 - 10초짜리 480p·30fps 파일 재생 시 실제 재생이 3초 이상 지연 - 반면 libwebp를 사용한 디코딩은 실시간으로 처리되어 약 10초 안에 정상적으로 재생됐다. - 이 사례는 포맷 자체의 지원 여부뿐 아니라 플랫폼별 디코더 구현과 프레임 처리 성능까지 검증해야 한다는 점을 보여준다. Discord의 접근 방식은 새로운 이미지 포맷을 도입할 때 압축률만 비교해서는 안 된다는 점을 보여준다. 실제 서비스에서는 호환성이 넓고 디코딩 성능이 안정적인 WebP를 기본 포맷으로 활용하되, AVIF의 고품질·고효율 특성은 입력 포맷으로 수용하고 적절히 변환하는 전략이 현실적이다.