FLAC

FLAC(Free Lossless Audio Codec, )은 오디오 데이터 압축을 위한 파일 형식이다. 무손실 압축 포맷이다. 다시 말해서, MP3, AAC, Vorbis와는 달리 오디오 스트림에 손실이 발생하지 않는다.

다른 압축 방법들과 마찬가지로, FLAC의 장점은 전송율·대역폭·저장공간 등을 절약할 수 있다는 점인데, FLAC은 오디오 소스를 온전한 모습으로 보전해준다. 예를 들어, 디지털 레코딩(콤팩트 디스크)을 FLAC으로 인코드하였다가 디코드하면 정확히 똑같은 오디오 데이터를 얻을 수 있다. 보통, FLAC으로 압축하면 원래 크기의 40-50%로 줄어든다. (FLAC 개발자들은 약 47%이라고 주장)

FLAC는 태깅(tagging), 앨범 아트, 빠른 건너뛰기(fast seeking)을 지원하기 때문에, 일상적인 음악 재생과 보관에 알맞다. FLAC은 자유 소프트웨어이자 동시에 오픈 소스 소프트웨어, 로열티 없는 소프트웨어이기 때문에, 많은 응용 소프트웨어가 FLAC을 지원하고 있다. 휴대용 음악 기기나 MP3 플레이어, 고급 오디오 시스템에서의 FLAC 지원은 얼마전까지만 해도 미미했으나 MP3 플레이어 등 휴대용 기기 한정으로 2013년 기준으로 상당수 기종에서 이 포맷을 지원한다. . Apple iOS11에 새로 추가된 '파일'앱의 일부로 flac 재생 기능이 추가되었다.

조시 콜슨(Josh Coalson)이 FLAC의 주요 개발자이다.

2003년 1월 29일, 자이포포러스 (현 Xiph.Org 재단. 자유 코덱, 자유 포맷 등을 개발하는 단체이다.) Vorbis, Theora, Speex 및 기타 등등과 마찬가지로, 그들의 목록에 FLAC도 편입한다고 발표하였다.

FLAC 프로젝트 
FLAC 프로젝트는 다음과 같은 것을 포함한다.
 스트림 포맷.
 스트림을 위한 단순한 콘테이너 포맷. 단순히 FLAC이라고 불린다. (혹은 Native FLAC이라고 불린다.)
 libFLAC, 인코더와 디코더를 위한 레퍼런스 라이브러리. 메타데이터 인터페이스 포함.
 libFLAC++, libFLAC의 "객체 지향" 래퍼(wrapper).
 flac, libFLAC에 대한 명령행(command-line) 래퍼(wrapper). 또한 FLAC 스트림을 디코드할 수 있다.
 metaflac, 명령행(command-line) 메타데이터 편집기. .flac 파일을 편집할 수 있다. 리플레이 게인(Replay Gain)을 적용시킬 수도 있다.
 여러 음악 재생기에 대한 입력 플러그인(input plugins) (AIMP, 윈앰프, XMMS, foobar2000, musikCube 등등 )
 Xiph.org에 편입된 후, Ogg 콘테이너 포맷. 스트리밍에 알맞음. (다른 말로 Ogg FLAC)

"자유"란 말은 스트림 포맷 제작자의 허락 없이 누구나 그 포맷을 구현할 수 있다는 말이자, (Xiph.org가 FLAC 스펙의 권리를 보유하고 있다. 또한 호환성을 인증할 권리를 보유하고 있다.) 어떤 특허도 FLAC 포맷 및 인코드/디코드 방법을 커버하고 있지 않다는 말이다. 또한, 레퍼런스 구현이 자유 소프트웨어이라는 뜻도 된다. libFLAC 및 libFLAC++의 소스는 Xiph.org의 BSD 사용 허가서 하에서 배포된다. flac, metaflac 및 플러그인의 소스는 GNU 일반 공중 사용 허가서 하에서 배포된다.

프로젝트 목적에 대한 글에서 언급되었는 바, FLAC 프로젝트 내에서는 개발자들이 복사 방지 기능을 구현해 넣지 않는 것을 장려하고 있다.

비교 
FLAC은 오디오 데이터의 효율적인 압축을 위해 특수하게 설계되었다. 일반적인 무손실 압축 방식인 ZIP 및 gzip과는 다르다. CD 품질의 오디오에 대하여, ZIP은 10 - 20%의 압축률을 보여주나, FLAC은 대개 30 - 50% 압축률을 보여준다. 보통의 음악에 경우 그러한데, 목소리 녹음의 경우에는 압축률이 더 올라간다. 비트 레이트는 약 700 - 950 kbit/s이다.

손실 압축 코덱(Lossy codecs)은 80% 이상의 압축률을 보여준다. 원본 스트림의 데이터를 까먹기 때문이다. FLAC은 선형 예측 방법을 사용하는데, 오디오 샘플을 작고, 상관 관계가 없는 값들 (나머지라 부른다)의 수열로 변환한다. 이 수열은 골롬-라이스 코딩 (Golomb-Rice coding)을 사용하여 효율적으로 저장될 수 있다. 또한 FLAC은 소리 없는 구간 등 동일한 샘플의 블록들에 대해 반복 길이 부호화를 사용한다. 다른 무손실 압축 코덱과 비교하면, FLAC은 스트림 가능한 것이 특징이다. 또한 FLAC의 디코딩 시간은 비교적 빠른 축에 속하는데, 이것은 압축 레벨과 관계없다.

다른 무손실 압축 방식과 마찬가지로, FLAC은 콤팩트 디스크 등의 미디어 소유자가 소장하고 있는 오디오 작품을 장기간 보존하는 데 있어서, 매우 널리 쓰이는 포맷이다. 원본 미디어는 세월이 지나, 분실, 손상 등이 될 수 있지만, FLAC으로 복제된 오디오는 언제든 정확히 원본 미디어의 오디오 데이터와 동일하게 복구될 수 있다. MP3과 같은 손실 있는 코덱으로 압축된 데이터는 원본 미디어의 오디오 데이터와 동일하게 복구될 수 없다. CD를 리핑할 때 선택적으로 큐 시트 (음악 소프트웨어(.CUE 파일)을 생성할 수 있다. CD를 FLAC으로 완전히 리핑해두었다가, 훗날 이 CUE 파일의 도움을 받아 정확히 동일한 CD를 구워낼 수 있다. 트랙 순서, 프리갭, CD-Text 등을 정확하게 복원할 수 있다. 하지만 일부 오디오 CD에 들어 있는 가사, CD+G 그래픽스 등은 CUE 파일 및 대부분의 CD 리핑 애플리케이션의 범위 밖이며, 정확히 원본대로 복원시킬 수 없다.

유럽 방송 연합 (EBU)은 유로라디오(Euroradio) 네트웍에서 고품질의 오디오를 배포하는 데 FLAC 포맷을 사용하기로 하였다.

하이드로젠오디오 위키(Hydrogenaudio Wiki)에 무손실 코덱간 비교표 가 있다.

기술적 상세 
FLAC은 부동소수점을 지원하는 것이 아니라 오직 고정 소수점만 지원한다. 4내지 32 비트 샘플 크기를 지닌 PCM을 처리할 수 있으며, 샘플링 레이트는 1 헤르츠 내지 1,048,570 Hz까지 1 Hz 단위로 처리할 수 있으며, 1 내지 8 채널을 처리할 수 있다. 채널은 스테레오나 5.1 채널 서라운드 사운드처럼 묶일 수 있는데, 채널간 상관 관계(correlation)을 이용하여 압축률을 높일 수 있다. 스트리밍 프로토콜에서 사용될 경우, FLAC은 CRC 첵섬을 사용하여, 잘못된 프레임을 골라낸다. 또한 그것의 STREAMINFO 메타데이터 헤더 내에 "본디 PCM"의 완전한 MD5 해시값도 갖고 있다.

FLAC의 라이스 파라미터(Rice parameter)는 0-16이다. 최대 8 채널의 오디오, 최대 192kHz까지의 다양한 샘플링 레이트, 다양한 비트-퍼-샘플 너비를 지원한다. FLAC은 또한 리플레이 게인을 지원한다.

FLAC은 libFLAC 코어 인코더 & 디코더 라이브러리로서 구현되었다. libFLAC API을 사용하는 레퍼런스 프로그램으로서 flac이라는 프로그램이 같이 들어있다. 이 코덱 API는 libFLAC++이라는 이름으로 C++ 버전으로서 존재한다.

FLAC의 레퍼런스 구현은 수많은 플랫폼 상에서 컴파일된다. 대부분의 유닉스 (솔라리스 등), 유닉스 계통 (리눅스, OS X, BSD 포함), 마이크로소프트 윈도우, BeOS, OS/2 운영 체제에서 빌드된다. Autoconf/ Automake, MSVC, Watcom C, Xcode 등을 위한 빌드 시스템이 갖추어져 있다.

태깅(tagging) 기능을 위해, FLAC은 보비스 코멘트와 똑같은 시스템을 사용한다.

API 구성 
libFLAC API는 기본 FLAC 비트스트림(bitstream)을 더 추상화한 것으로서, 스트림(stream), 건너뛰기 가능한 스트림(seekable stream), 파일(file)로 구성된다. 대부분의 FLAC 애플리케이션은 libFLAC을 이용하되 파일 레벨 인터페이스를 이용한다.

FLAC을 지원하는 소프트웨어

인코딩 

 크로스 플랫폼
 카카오인코더
 FFmpeg
 Flake
 Audacity 1.3.3 Beta 네이티브 FLAC 지원 기능이 막 포함되었다.
 VLC 미디어 플레이어 0.8.6a
 Juce
 aTunes
 마이크로소프트 윈도우
 AIMP
 Ease Audio Converter
 Easy Media Creator
 Easy CD-DA Extractor
 Nero Burning ROM. 선택적인 외부 필터 플러그-인 사용.
 dBpoweramp Music Converter. 공식 코덱(official codec) 사용.
 MediaMonkey
 윈앰프. 네이티브 FLAC 지원 기능이 막 포함되었다.
 JetAudio
 foobar2000 - 공식 외부 인코더(official external encoder) 사용.
 Sound Normalizer
 MP3 Stream Editor - 공식 외부 인코더 사용.
 Omni Encoder - 공식 외부 인코더 사용.
 Burrrn
 Flac Frontend
 Total Audio Converter
 Yahoo! Music Jukebox
 macOS
 Toast 타이태니엄. 버전 7부터 지원.
 xACT - 마이크로소프트의 XACT 오디오 프로그래밍 라이브러리와 혼동하지 말 것.
 Max

디코딩 

 크로스 플랫폼
 FFmpeg
 aTunes
 Audacity 1.3.3 Beta Audacity
 JUCE (크로스-플랫폼 C++ 툴킷. FLAC 지원 자체 내장.)
 린 디지털 스트림 플레이어즈
 엠플레이어
 송버드
 Squeezebox
 The Core Pocket Media Player - flac 플러그인 사용.
 VLC 미디어 플레이어
 Total Audio Converter
 macOS
 macOS 내장 기본 Quicktime Player (macOS 10.13 이상)
 Cog: 오픈 소스
 xACT - 마이크로소프트의 XACT 오디오 프로그래밍 라이브러리와 혼동하지 말 것.
 VOX: 무료 앱. 이 밖에 다양한 오디오 데이터 압축 파일 형식도 지원한다.
 마이크로소프트 윈도우
 기본 Windows Media Player (윈도우10 이상)
 이스트소프트 - 알송
 곰앤컴퍼니 - 곰오디오
 AIMP
 Ease Audio Converter
 foobar2000
 Cirlinca DVD-AUDIO Solo - FLAC을 가져와 DVD-오디오 디스크를 구울 수 있다.
 JetAudio
 KSP Sound Player - 일반 설치 내용이 포함하고 있는 플러그인 사용.
 MediaMonkey
 Mixmeister Fusion
 MP3 Stream Editor - 일반 설치 내용이 포함하고 있는 플러그인 사용.
 콕코스 REAPER 멀티트랙 레코더 및 에디터
 Quintessential Player - flac 플러그인 사용.
 The KMPlayer
 TRAKTOR 3
 TRAKTOR Scratch
 윈앰프
 XMPlay
 FairStars Audio Converter
 리눅스
 Audacious
 Banshee (music player)
 Baudline
 cmus
 mpd
 ogg123 (단, flac을 사용하도록 컴파일 되었다면. ogg123은 'vorbis-tools' 패키지의 일부이다.)
 Xine
 XMMS
 그놈
 그놈베이커
 리듬박스
 토템 무비 플레이어
 Serpentine
 KDE
 아마록
 Audiokonverter (콘텍스트 메뉴 팝-업으로부터)

 모바일
 iOS: iOS11 이상, 아이폰7 이상
 안드로이드

리핑 

 크로스 플랫폼
 aTunes
 윈도
 BonkEnc - FLAC.dll API 사용.
 CD to MP3 Maker
 CDex - 외부 인코더 사용 옵션. (flac이 설치되어 있다면, 이제, "flac.dll"을 인코더 옵션으로 나열해줌.)
 DBpoweramp
 Easy CD-DA Extractor
 이그잭트 오디오 카피 - 외부 인코더 사용.
 Foobar2000 - 컨버터 플러그인과 외부 인코더 사용.
 AIMP - 플러그인 및 내장 인코더 사용.
 MediaMonkey
 MP3 스트림 에디터 - 공식 외부 인코더 사용 (싱글 모드/앨범 모드/풀 앨범 아트 지원)
 젯오디오
 윈앰프
 PlexTools
 Yahoo! Music Jukebox
 OS X
 Max (맥 오에스 10.4 혹은 그 이상)
 리눅스
 ABCDE
 Banshee (music player)
 Cdda2wav
 Cdparanoia
 Mencoder
 RipIt (명령줄 툴)
 GNOME
 Grip
 RipOff
 Sound Juicer
 KDE
 K3b
 KAudioCreator
 Konqueror

하드웨어 
 마이크로소프트 엑스박스 - 단, 서드 파티 Xbox Media Center를 구동해야 함.
 아이팟 - 비디오, 나노, 포토, 컬러, 미니 (2세대). 단, 서드 파티 락박스 펌웨어를 사용해야 함.
 (거의 대부분의) 락박스-호환 디지털 오디오 플레이어 - 아이리버, 기가비트 (도시바), 앞에서 얘기한 아이팟 포함.
 Escient
 iAudio - 코원시스템의 디지털 오디오 플레이어. 4, 5, 6, 7, F2, M3, M5, X5, U2, U3, A2, A3, D2, O2, S9. 새 버전의 펌웨어는 자체 지원.
 올리브 미디어 프로덕츠 (Symphony, Musica, Opus)
 PhatBox 하드 드라이브 내장 자동차 디지털 미디어 플레이어, 팻노이즈(PhatNoise) 사 판매.
 Rio Karma
 Squeezebox network music player (v1 버전에서는 서버 측에서 PCM으로 트랜스코드한다. v2 및 그 이상의 버전에서는Squeezebox에서 자체 지원한다.)
 Sonos
 Meizu M6 Mini Player, M3 Music Card
 Pixel Magic Systems' HD Mediabox (펌웨어 버전 1.3.4 이상)
 Embedded Waveplayer- Module with FLAC level 0-2 support, MIDI and serial interface
 텍라스트 T29, T39, C260, C280, C290
 Trekstor Vibez
 모든 UPnP A/V / DLNA 장치 - e.g. 넷기어 EVA700, 넷기어 MP101, Roku Soundbridge 혹은 Xbox 360 (TVersity와 같은 애플리케이션을 통해 트랜스코드되어 스트림될 때. 단, 이 애플리케이션은 ffdshow를 사용.)
 Sound Devices 7-Series Professional Audio Recorders - 단, 뱃저(badger) 펌웨어 업데이트가 되었을 때(v.2.24)
 Denon AVR-4308 & AVR-3808 AV 리시버
 T+A Music Player
 린 클라이막스 DS 디지털 뮤직 플레이어

같이 보기 

 멍키 오디오
 TTA
 WavPack

각주

외부 링크 
 공식 웹사이트
 무손실 포맷 비교 -  작성. (약간 오래된 정보)
  - Convert Youtube to MP3 using Flac.

오디오 코덱
자유 멀티미디어 코덱
무손실 압축 알고리즘
무손실 오디오 코덱
오디오 파일 포맷
2001년 소프트웨어
오픈 포맷