FLAC
예측 및 잔차 인코딩을 통해 PCM 데이터의 용량을 줄이는 개방형 무손실 오디오 인코딩 및 파일 형식으로, 디코딩 후 원본 샘플을 복원할 수 있다.
상세 설명
FLAC(Free Lossless Audio Codec, 自由无损音频编解码器)는 디지털 오디오를 위한 개방형 무손실 인코딩 형식으로, Josh Coalson이 제안했으며, 2001년에 참조 구현이 처음 공개된 후 Xiph.Org에서 유지 관리하고 있습니다. FLAC의 비트스트림 사양은 현재 RFC 9639에 상세히 기술되어 있습니다. 이는 오디오 인코딩 방식을 의미할 뿐만 아니라, 네이티브 `.flac` 파일이 채택한 비트스트림 및 메타데이터 구조를 의미하기도 합니다.
무손실이란 디코딩된 PCM 샘플이 인코더의 입력과 일치함을 의미하며, 파일이 압축되지 않았음을 의미하지는 않습니다. FLAC은 오디오를 프레임과 서브프레임으로 나누고, 각 채널에 대해 상수, 비트 단위 저장, 고정 예측 또는 선형 예측 등의 방식을 선택한 다음, Rice 코딩을 사용하여 예측 잔차를 저장합니다. 스테레오의 경우 좌우, 중앙-측면 또는 차분 채널 할당을 사용하여 채널 간 중복을 줄일 수도 있습니다. 인코딩 레벨은 주로 예측 검색, 블록 분할 및 압축에 소요되는 시간을 변경하며, 올바르게 디코딩된 오디오 데이터 자체는 변경해서는 안 됩니다.
네이티브 비트스트림은 `fLaC` 식별자로 시작되며, 그 뒤에는 필수 STREAMINFO 블록, 선택적 메타데이터 블록 및 오디오 프레임이 이어집니다. STREAMINFO에는 샘플링 주파수, 채널 수, 유효 비트 수, 총 샘플 수 등의 정보가 저장되며, 비압축 오디오의 MD5 체크섬을 포함할 수도 있습니다. 다른 블록에는 Vorbis Comment 태그, 커버 아트, 인덱스 포인트, CUE 시트 및 패딩 공간이 포함될 수 있습니다. 프레임 자체에는 동기화 및 검증 정보가 포함되어 있어 스트리밍 디코딩과 어느 정도의 오류 위치를 파악하는 데 도움이 됩니다.
FLAC은 WAVE나 ZIP의 별칭이 아닙니다. WAVE는 PCM이나 기타 인코딩을 포함할 수 있는 RIFF 파일인 반면, FLAC은 오디오 샘플에 대한 예측 모델을 구축합니다. 일반적인 압축기는 오디오의 연속적 상관관계를 활용하기 어려운 경우가 많습니다. FLAC은 Ogg 또는 Matroska 컨테이너에 매핑될 수도 있으며, 이 경우 파일 구조는 네이티브 `.flac`과 다르지만 내부 오디오는 여전히 FLAC 규칙에 따라 디코딩됩니다.
무손실 FLAC을 다른 압축 수준으로 재인코딩하면, 샘플링 데이터를 변경하지 않고도 파일 크기와 인코딩 속도를 조절할 수 있습니다. MP3, AAC 등 손실 압축 소스를 FLAC으로 변환하면 이미 디코딩된 결과만 무손실로 보존될 뿐, 원본 스트림에서 생략된 내용을 복원할 수는 없습니다. 파일 크기가 커진다고 해서 원본이 무손실 마스터라는 증거가 되는 것은 아닙니다. 체크섬을 통해 데이터의 변경 여부는 확인할 수 있지만, 녹음, 마스터 또는 이전 처리 과정이 진위인지 판단할 수는 없습니다.