본문 바로가기

IOS Swift

비디오 & 오디오 형식 변환을 위한 사전지식

확장자

확장자란 코덱(encode+decode)을 담는 컨테이너를 가리키는 말입니다.

예를 들어 .mp4는 mp4라는 컨테이너안에 H264(Video Codec)+ AAC(Audio Codec) 을 포함합니다. 꼭 이 두개의 코덱뿐만이 아니라 mp4 컨테이너는 다른 코덱도 지원합니다.

MP4 컨테이너를 지원하는 동영상 코덱으로는 MPEG-1, MPEG-2, MPEG-4[3], H.263, MPEG-4 AVC(H.264), MPEG-H HEVC(H.265), MPEG-I VVC(H.266), AV1이 있고, 오디오 코덱으로는 MPEG-2 part.3의 AAC[4], AC-3, Dolby TrueHD, DTS(DTS-HD 포함), MP1, MP2, MP3, Opus, Apple Lossless, TwinVQ[호환성], CELP[호환성], AMR-NB, AMR-WB가 있습니다.

또한 mp4 컨테이너에 반드시 두개의 코덱만 들어있는 것은 아닙니다. 영상하나 + 음성두개 이렇게 있을 수도 있는데 이렇게 하면 대다수 MP4 플레이어에서 제대로 읽지 못하니 보통은 영상 하나 + 음성 하나로 저장합니다.

 

음악을  전자기기에서 듣기까지 과정

동영상이나 사운드를 전자기기에 넣어서 저장하려면 아날로그 데이터를 이진 신호로 변조해야 합니다.

가장 일반적인 변조 방법중 하나는 PCM(Pulse Code Modulation) 입니다. 다른 변조 방법 (라디오의 FM이나 AM) 등 존재 

PCM 변조 과정

  • 표본화, PAM(Pulse Amplitude Modulation) = Sampling : 아날로그 데이터를 일정간격(Sample Rate)으로 표본화 시키는 작업
  • 양자화, Quantization : 표본화된 실수 데이터들을 반올림하여 정수로 바꾸는 작업
  • 부호화, EnCoding : 양자화된 데이터를 2진 데이터로 바꾸는 작업

표본화샘플링 레이트를 정하기 위해선 나이쿼스트 이론(Nyquist frequency)이 사용됩니다.

나이쿼스트 이론(Nyquist frequency)은 샘플링된 주파수는 원주파수의 2배이상이 되면 원신호의 모든 정보를 포함한다는 이론입니다. 만약 샘플링된 주파수가 2배보다 작으면 신호끼리 겹치는 구간이 생겨 서로 다른 신호를 구별해내지 못하는 에일리어싱(Aliasing) 현상이 발생합니다.

출처 : https://linecard.tistory.com/20

 

표본화의 종류

  • 이상적(순시),임펄스 표본화 : 유한한 펄스폭을 가진 구형 펄스열을 사용하는 표본화, 아래 그림보면 [...!...] 삐죽 솟아있는 신호를 임펄스 라고 합니다.
  • Natural 표본화 : 아날로그 신호의 파형을 따라 변하도록 하는 방식
  • Sample-and Hold 표본화 : 펄스의 진폭이 표본화 순간의 아날로그 신호의 값으로 펄스 구간 동안 일정하게 유지되도록 하는 방식

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ksu1112&logNo=220981862685

 

자 여기까지 왔으면 이제 비디오 및 오디오 파일은 PCM 파일로 변조되어 전자기기에 넣을 수 있고 다시 반대의 과정을 거쳐 음악을 들을 수도 있습니다.

어.. 그런데 저희가 음악을 들을 때는 PCM 파일을 듣진 않습니다. 주로 .mp3파일이나 .AAC파일로 음악을 듣습니다. 

PCM과 확장자는 어떤 관계가 있는 걸까요?

 

PCM과 확장자의 관계

PCM 파일은 용량이 너무 커서 디스크의 용량도 많이 차지하고 다른 사람에게 전송하기 위해 네트워크 하는데에도 시간이 오래걸립니다.

그래서 Codec(encode+decode)를 이용해서 파일을 압축합니다. 음악 파일에 일반적으로 사용하는 컨테이너는 MP3(요즘은 AAC 더 많이 쓰는 듯?)이고 코덱은 (MPEG Audio Layer - 3) 입니다. 코덱이란 쉽게 말하면 오디오 또는 비디오파일을 압축 또는 압축풀기에 사용되는 알고리즘 입니다.

이렇게 코덱을 이용하여 압축하여 관련정보를 담아 감싸놓은 것을 컨테이너 즉 확장자라고 합니다.

그런데 PCM파일 용량이 크다면 얼마나 크다고 이럴까요? 한번 알아보겠습니다.

 

PCM파일과 MP3파일의 용량차이

본론인 용량을 계산하기 전에 알아야하는 사전지식부터 보겠습니다.

참고 (https://www.wassada.com/bbs_detail.php?bbs_num=152538&tb=board_free_pds)

실제 음반/ 음원 녹음 시 마스터링 규격 (24 bit 96; 192 kHz) 으로 녹음합니다.

샘플레이트를 96kHz or 192kHz로 하고 Bit Depth를 24 bit로 녹음한다는 뜻입니다.

쉽게 말하자면 1초당 96,000번 or 192,000번 샘플링하고 1개의 샘플에 24bit 데이터가 들어있다는 뜻입니다. 

아래 그림을 보시면 더 잘 이해 되실겁니다.

출처 : https://crystalcube.co.kr/123

위 그림은 스테레오 타입의 오디오 파일입니다. 스테레오 타입이란 채널이 2개라는 뜻 입니다.  사람의 귀는 2개이고 좀 더 리얼리티한 공간감을 느껴지도록 하고 싶을 때 좌우의 소리를 다르게 하여 스테레오 타입을 만듭니다.

마스터링 규격 (24 bit 96; 192 kHz)으로 위의 그림을 바라보면 

  • Sample Rate : 96,000개 or 192,000개
  • Block Align : Sample Frame 의 크기입니다. mono이면 1 byte, stereo이면 2 bytes 입니다.
  • Bit Per Sample : Bit Depth입니다. 24 bit

마스터링 규격으로 녹음과정을 거쳐낸 음반/음원으로 이를 다시 국내 음원 유통사 (멜론, 벅스, 엠넷, 올레뮤직 外) 의  공급용 MP3 포맷으로 작업을 합니다.

그 결과물이 바로 저희가 흔히 앱에서 들을 수 있는 16 bit 44.1 kHz 320 Kbps 규격입니다. 그 밖에 일부 국내 음원 유통사의 경우 무손실 유압축 FLAC 포맷으로 제공하는 경우도 있습니다. 희귀음반은 직접 수급하여 제공하는 경우도 있습니다.

출처 - 멜론 앱

위를 보시면 AAC 128K 이렇게 써져있습니다. 멜론서버에 있는 음원파일을 128kbps 비트율을 가진 AAC 확장자로 가져오겠다는 뜻 입니다. 128kbps는 1초동안 128kbit 데이터를 전송하겠다는 뜻 입니다. 물론 이 숫자가 커질수록 초당 많은 데이터를 전송받으니까 음질이 좋겠죠? ㅎ.. 

드디어 본론입니다!  

마스터링 (24 bit 192 kHz) 규격을 토대로 PCM 파일의 용량을 한번 계산해 보겠습니다. 대략적인 계산입니다. 비트율은 CBR(Constant Bit Rate)만 다루었습니다.

  • bit depth : 24bit,
  • sample rate : 192 kHz,
  • 채널 : stereo 
  • 시간 : 4분 59초(299)

PCM 데이터 처리량 (비트율)

초당 데이터 량 = 샘플레이트 * 채널 수 * 비트

192,000 * 2 * 24 = 9,216,000 (bit)

PCM 파일 크기

PCM 파일 크기 = PCM 데이터 처리량 * 재생시간 / 8 (비트를 바이트로 변경하기 위해 8로 나눔)

9,216,000 bit * 299 / 8 = 344,448,000 (bytes) 

파일 한개에 약 344 MB네요..? 용량이 크긴 크네요 😱 그렇다면 mp3파일로 만들면 얼마나 줄어들게 될까요?

MP3 파일 크기

MP3 데이터 처리량 = 비트율 * 재생시간 / 8

멜론앱 AAC 128K 기준

128,000 * 299 / 8 = 4,784,000 (bytes) 약 5MB 정도 되네요.

구글링이나 출처에서 보면 PCM과 MP3와 용량차이가 대략 10배정도 난다고 하는데 PCM의 Sample Rate가 몇인지에 따라서 많이 다른 것 같습니다. (혹시 아시는분 있으시면 댓글 부탁드립니다.)

출처: https://ospace.tistory.com/101 [JaPa2]

 

가청주파수와 샘플링레이트

사람이 들을 수 있는 주파수는  20㎐ ~ 20,000㎐ 의 소리 입니다. 

아까 샘플링레이트를 정하기위해서는 나이쿼스트 이론이 사용하였는데, 가청주파수에 적용해보면 

최소 40,000 Hz를 Sample Rate로 해야 완벽히 원래 데이터로 바꿀 수 있습니다.

그래서 CD의 규격도 (16bit, 44.1 kHz) 입니다.

왜 40 kHz가 아니라 44.1 kHz인 이유를 알려면 당시 시대상황을 알아야 합니다.

당시에 디지털 오디오를 저장하는 장비로 영상용 테이프를 사용했습니다. 미국표준인 NTSC 테이프에는 1초당 245라인 * 60필드 * 6샘플(모노) = 88,200 샘플을 저장할 수 있었고, 유럽표준인 PAL 테이프에도 1초당 294라인 * 50필드 * 6샘플(모노) = 88,200 샘플을 저장할 수 있었습니다.

그럼 88.2 kHz 아닌가..? 사람 귀는 두 개입니다. 6샘플을 반으로 뚝 잘라 왼쪽 오른쪽 채널에 할당해야 합니다. 수식을 다시 써보겠습니다. NTSC 테이프에는 1초당 245라인 * 60필드 * 3샘플(스테레오) = 44,100 샘플을 저장할 수 있었고, PAL 테이프에도 1초당 294라인 * 50필드 * 3샘플(스테레오) = 44,100 샘플을 저장할 수 있습니다. 게다가 44,100은 2, 3, 5, 7로 나누어 떨어지므로 편리합니다. 그렇게 44.1 kHz가 표준 샘플링 레이트로 지정되었습니다.

출처 : https://blog.koasing.pe.kr/cd-da-cd-rom-iyagi/

 

확장자 변환하는 방법

제가 위의 개념을 공부한 이유입니다. 후.. 예시) mp4 -> .mp3

결론부터 말하자면 .mp4 -> pcm -> .mp3 로 만들어야 합니다.

왜냐하면 이미 MP4 컨테이너에 Audio Codec이 포함되어 있는데 그 코덱이 MP3 컨테이너도 지원하면 소리는 나오겠지만,

지원하지 않는다면 소리가 안나오게 되므로 MP4에서 원파일인 PCM으로 만들 필요가 있습니다.

(위의 개념을 학습 후 제 머리에서 나온 것이기 때문에 최종적으로 앱을 만들어보고 다시 수정하겠습니다. 참고만 해주세요.)

 

 

동영상 및 오디오 확장자

동영상과 오디오에 확장자에 대해 집중적으로 알아보겠습니다.

Video
.mp4, .m4v - 정식 명칭 : MPEG-4 Part 14
- MPEG에서 개발한 멀티미디어 표준 포맷으로 가장 일반적으로 사용되는 동영상 컨테이너이다.
- 장점 : 높은 압축률을 보여주는 H.264 코덱을 주로 사용하며 비교적 적은 용량으로 좋은 품질의 영상을 볼 수 있다.
인터넷을 통한 스트리밍을 지원하여 스마트폰에서도 많이 사용한다.

- 단점 : 편집, 출력, 재생 시 높은 사양이 요구될 수 있다.
.mov - 정식 명칭 : QuickTime
- Apple에서 개발한 멀티미디어 컨테이너로 MPEG-4 Part 14(H.264 / AVC) 코덱을 사용한다.
- 장점 : 실시간 스트리밍을 지원하며 VR 기능도 지원
- 단점 : 윈도우 진영에서는 별도의 플러그인을 설치해야될 수 있다.
.avi - 정식 명칭 : Audio Video Interleave
- 마이크로 소프트에서 개발한 윈도우 표준 동영상 파일 포맷
- 장점 : 다양한 종류의 코덱을 지원하여 여러 환경에서 재생할 수 있다.
- 단점 : PC에서 재생되는 것이 목적이라 다른 기기에서는 제한이 있을 수 있고 다양한 코덱을 지원하는 만큼 실행 환경에서 지원하지 않는 코덱을 담고 있을 수 있다.
wmv
(.wmv, .mwa,
.asf)
- 정식 명칭 : Windows Media Video, Advanced Systems Format
- AVI의 단점을 보완하고자 마이크로소프트에서 개발한 컨테이너. DRM, 메타 정보, 스트리밍과 같은 추가 정보를 제공한다.
- 장점 : 높은 압축률로 파일 용량을 작게 만들기 때문에 실시간으로 감상하는 스트리밍에 적합하다.
- 단점 : 리눅스나 맥에서 호환성 문제가 자주 생기는 단점이 있다.
MPEG-PS
(.mpg, mpeg)
MPEG-TS
(.ts)
- 정식 명칭 : MPEG Program stream, MPEG Transport Stream
- MPEG-1/2 영상을 효율적으로 전송하기 위해 설계된 컨테이너이자 통신 프로토콜이다. 디지털 방송에서 많이 사용되는 포맷으로 TS는 전송, PS는 저장에 목적이 있다.
- 장점 : 가장 원본에 가까운 고화질의 영상을 볼 수 있다.
- 단점 : 패킷 단위로 재생되기 때문에 압축이 되지 않아 용량이 큰 편에 속한다.
.mkv - 정식 명칭 : Matroska Multimedia Container
- 오픈 소스로 개발되었으며 갯수 제한없이 비디오, 오디오, 그림, 자막을 한 파일안에 담을 수 있는 형식. 영화/드라마 등의 멀티미디어 콘텐츠를 담기 위한 보편적인 포맷으로 개발되었다.
- 장점 : 코덱 종류에 상관없이 모든 스트림을 담을 수 있다. 더 좋은 화질, 음질의 스트림을 넣을 수 있다.
- 단점 : 지원하지 않는 환경이 꽤 있다.
3GPP, 3GPP2(.3gp, 3g2) - 정식 명칭 : Third Generation Partnership
- 3G 모바일 환경에서 사용하도록 만들어진 컨테이너로 MP4의 단순화 버전이다.
- 장점 : 3G 모바일 환경(느린 네트워크, 저사양)에서 매우 유용하다.
- 단점 : 최대 파일 크기와 해상도가 제한될 수 있다. 모바일 네트워크 환경이 좋아지면서 필요성이 점차 줄고 있다.
webm(.webm) - 정식 명칭 : WebM
- 구글이 개발한 오픈소스 미디어 컨테이너 포맷. Web에 최적화된 미디어 포맷으로 HTML5에서 기본으로 지원하여 태그를 이용해 온라인 재생이 가능하다. 비디오 코덱은 VP8, VP9, AV1을 지원하고 오디오 코덱은 Vorbis, Opus를 지원한다.
- 장점 : H.264를 사용하는 컨테이너와 비교해 스트리밍 환경에서 더 안정적이다.
- 단점 : H.264를 사용하는 컨테이너와 비교해 압축률과 인코딩 효율이 떨어진다.
출처 : https://bradbury.tistory.com/212
Audio
.mp3 - 정식 명칭 : MPEG Audio Layer-3
- 손실 압축 포맷

- MPEG - 3 규격에 의해 압축된 음성 파일
- 비중이 낮은 음역대 제거(주로 고음역대)
- 특정 주파수 옆에 낮은 주파수 있으면 낮은 주파수는 잘 안들리므로    masking을 이용해서 제거함
- (매킨토시, 휴대용 게임기, 디지털 카메라 등 대응)
.wav - 정식 명칭 : Waveform audio format
- Windows PC에서 사용되는 표준 오디오 파일 포맷

- 무손실 무압축 포맷 (PCM)
- 분당 10MB 크기
- 크기를 줄이기 위해 다양한 코덱으로 인코딩 가능
- (CD-품질의 사운드 파일을 저장하는데 사용)
- CD 규격(16bit, 44.1 kbps)
.flac - 정식 명칭 - Free Lossless Audio Codec
- 무손실 압축 포맷

- zip 파일의 오디오 버전과 같은 것
- PCM 파일을 flac로 압축하고 다시 저장하면, 원본 파일을 완벽하게 복사 가능
- 단점은 압축률이 좋지 않습니다.
- 품질이 중요한 PCM 파일을 보존하려면 flac을 권장
(방송 및 음악 등에 사용하는 경우)
.AAC - 정식 명칭 : Advanced Audio Coding
- 손실 압축 포맷
- MP3 코덱을 개선하기 위해 MPEG(위원회)와 AT&T 벨 연구소, 프라운호퍼, 돌비 연구소, 소니 등 기업에서 공동으로 개발한 오디오 코덱
- 최대 비트레이트도 MP3보다 늘어났는데 MP3는 320k까지인 반면 AAC는 512k까지 늘어남. 다른 개선점도 많이 있습니다. -링크-

 

 

참고영상 : https://www.youtube.com/watch?v=87Ls_L7dtaY

반응형

'IOS Swift' 카테고리의 다른 글

아스키코드와 유니코드  (0) 2021.11.20
앱 실행 흐름  (1) 2021.10.07
멀티윈도우 지원하는 앱 만들기 - iOS  (8) 2021.09.28
앱이 In - active 상태가 되는 시나리오 - Swift  (0) 2021.09.23
SceneDelegate 란?  (2) 2021.09.16