디지털·가전제품
색다른콜리160
코덱이라는 분야를 공부하기 위해서는 어떤 지식들이 잇으면 조을까여?
mp4에 관심이 생기는데여 실시간으로 영상 전송하는 것도 mp4여서 가능하다고 하고,
이에 대한 분야를 공부하기 위해서는 어떤 지식들이 잇으면 조은지에 대해서 알고 시퍼여?
2개의 답변이 있어요!
먼저 전제 하나만 바로잡고 시작하겠습니다. 실시간 영상 전송이 MP4라서 가능한 것은 아닙니다. 오히려 일반적인 MP4는 실시간에 잘 맞지 않습니다.
이유는 구조에 있습니다. 보통 MP4는 어디에 무엇이 들어 있는지 적힌 목차가 파일이 다 만들어진 뒤에야 완성됩니다. 그런데 실시간 방송은 언제 끝날지 정해져 있지 않으니 그 목차를 미리 만들 수가 없습니다. 그래서 실시간에서는 조각 MP4라는 변형을 씁니다. 영상을 몇 초짜리 조각으로 잘라 계속 내보내는 방식이고, 이 조각들을 HLS나 DASH 같은 규칙에 따라 전달합니다. 화상통화처럼 지연이 아주 짧아야 하는 곳은 아예 다른 방식인 WebRTC를 씁니다.
이걸 짚어드린 이유는 공부하실 분야가 여기서 두 갈래로 나뉘기 때문입니다. 하나는 영상을 압축하는 코덱 쪽이고, 다른 하나는 압축된 것을 실어 나르는 전송 쪽입니다. 관심이 실시간 전송에 있으시다면 후자가 더 가깝습니다.
코덱 쪽 공부에 필요한 기초부터 말씀드리겠습니다. 프로그래밍은 C와 C++가 사실상 필수입니다. 실제 코덱 구현체가 거의 다 이 언어로 되어 있어서 코드를 읽으려면 피할 수 없습니다. 실험이나 도구를 만드는 용도로는 파이썬이면 충분합니다.
수학은 겁먹으실 필요 없이 세 가지만 보시면 됩니다. 첫째는 주파수 변환입니다. 푸리에 변환과 그 사촌뻘인 이산 코사인 변환인데, 영상 압축의 핵심 원리가 여기에 있습니다. 둘째는 확률과 정보이론입니다. 자주 나오는 값에 짧은 코드를 붙이는 원리라 압축률을 좌우합니다. 셋째는 선형대수 기초입니다. 이 세 가지면 입문 단계는 충분합니다.
개념은 이 순서로 익히시면 자연스럽게 이어집니다. 색을 밝기와 색차로 나누는 것, 사람 눈이 색 정보에 둔감한 성질을 이용해 색 데이터를 줄이는 것, 한 화면 안의 비슷한 부분을 없애는 공간 압축, 앞뒤 프레임의 차이만 저장하는 시간 압축, 마지막으로 남은 데이터를 더 줄이는 엔트로피 부호화입니다. 이 다섯 단계가 사실상 모든 영상 코덱의 뼈대입니다.
머리로만 보시는 것보다 손으로 만져보시는 게 훨씬 빠릅니다. FFmpeg를 설치하시고 명령줄로 직접 인코딩해 보세요. 같은 영상을 화질 설정만 바꿔가며 뽑아서 용량과 화질을 비교해 보시고, 코덱만 바꿔서 H.264와 H.265와 AV1을 견줘보세요. 이 실습만 해도 앞에서 말씀드린 개념들이 몸으로 이해됩니다.
무료 입문 자료로는 Digital Video Introduction이라는 깃허브 문서를 권해드립니다. 그림이 많고 한국어 번역도 있어서 처음 보시기에 딱 좋습니다. 그다음 단계로 넘어가실 때는 이안 리처드슨이 쓴 H.264 관련 책이 표준서에 가깝습니다.
표준 자체를 파고드실 거라면 H.264부터 시작하세요. 최신은 아니지만 해설 자료가 가장 많고, 이걸 이해하시면 H.265나 AV1은 확장으로 읽힙니다. 코드를 보고 싶으시면 FFmpeg 안의 디코더 소스나 x264 프로젝트를 보시면 됩니다.
전송 쪽에 관심이 더 크시다면 HLS와 DASH의 동작 방식, 조각 MP4의 구조, 그리고 WebRTC를 보시면 됩니다. 이쪽은 네트워크 지식이 함께 필요해서 TCP와 UDP의 차이, 지연과 버퍼링의 관계를 같이 보시면 좋습니다. 정리하면 FFmpeg로 손부터 익히시고 Digital Video Introduction으로 개념을 잡으신 뒤, 관심이 코덱이냐 전송이냐에 따라 H.264 표준이나 HLS 쪽으로 들어가시면 됩니다.
채택된 답변영상 포맷에 대해서 공부가 필요합니다.
각 포맷마다 특징이 다양한데다 코덱이라는 것은 영상과 소리를 압축하고 그걸 재생할 수 있도록 해주는 일종의 열쇠 입니다. 코덱도 매우 여러 종류가 존재하며 유료로 제공되는 코덱도 있지만 무료로 풀려있는 코덱도 많습니다.
이러한 영상 포맷이나 코덱에 대해 어느정도 알아두면 영상을 만든 뒤 랜더링 할 때 많은 도움이 됩니다.
인터넷 찾아보시면 각 코덱에 대한 정보가 있을겁니다.
그리고 이 코덱이라는 것도 영상을 만들기 위해 저장하는 인코딩 그리고 그 영상을 재생하기 위해(풀기 위해)쓰이는 디코딩)의 개념도 이해해야 합니다.
인코딩과 디코딩을 설명하자면
인코딩은 컴퓨터가 이해할 수 있는 이진법으로 데이터를 저장하는 것이고 디코딩은 이렇게 저장된 데이터를 사람이 볼 수 있는 영상물로 변환하는 과정입니다.