-
FFmpege) FFmpeg란 무엇인가요?Programing Study/E.T.C 2021. 10. 15. 15:38728x90반응형
FFmpeg 이란?
FFmpeg (www.ffmpeg.org) 은 비디오, 오디오, 이미지를 쉽게 인코딩 (Encoding), 디코딩 (Decoding), 먹싱 (Muxing), 디먹싱 (Demuxing) 할 수 있도록 도움을 주는 멀티미디어 프레임워크입니다. 참고로 FFmpeg 홈페이지에도 다음과 같이 FFmpeg을 소개하고 있습니다.
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation.
여기서 인코딩이란 우리가 문서의 용량을 줄이기 위하여 zip 프로그램 (예: 알집, 반디집, 빵집)을 사용해서 문서를 압축하는 것처럼 동영상이나 이미지의 용량을 줄이기 위해서 압축하는 과정을 의미합니다. 동영상도 그냥 알집으로 압축하면 되는 것 아닌가? 하시는 분들도 계시겠지만, 동영상은 일반 문서와 특성이 달라서 전용의 압축 알고리즘을 사용하고 있습니다. 국내에서 동영상 재생에 많이 사용하는 곰플레이어의 개발사에서 만든 곰인코더 등이 바로 동영상을 인코딩하는 프로그램입니다.
디코딩이란 zip으로 압축된 워드 문서를 보기 위해서 먼저 zip 프로그램을 압축을 해제해야 하는 것처럼, 압축된 동영상을 재생하기 위하여 압축을 해제하는 과정을 디코딩이라고 부릅니다. 그러나 우리가 압축 된 문서는 zip 프로그램을 압축을 해제한 후 워드 프로그램을 통해서 문서를 여는 것과 달리 일반적으로 동영상 재생 프로그램 (예: 곰플레이어)들은 모두 내부적으로 압축을 해제하고 압축이 해제된 영상 및 오디오 데이터를 재생 프로그램에서 직접 재생하는 것이 차이가 있습니다. 그래서 우리는 일상 생활에서 동영상 디코딩이라는 단어를 듣지 못했지만 동영상을 시청하는데는 큰 문제가 없었습니다. 참고로 국내에서 많이 사용하는 대표적인 동영상 재생 프로그램인 곰플레이어, KMP 플레이어, 다음과 네이버의 동영상 플레이어들이 내부적으로 FFmpeg을 사용하여 압축 된 동영상의 압축을 해제한 후 압축이 해제된 데이터를 적절한 UI를 통해서 출력하고 있습니다. 최근에는 PC 환경 뿐만 아니라 아이폰과 안드로이드 폰의 거의 대부분의 동영상 재생 프로그램들이 본 도서에서 다룰 FFmpeg을 사용하고 있습니다. 이쯤되면 정말로 FFmpeg이 대단하지 않습니까? 외부 UI는 다르지만 내부 코어는 모두 FFmpeg 인 것이죠.
엔지니어링 분야에서 먹싱 (Muxing)이라는 단어는 여러 입력을 하나로 합치는 과정을 의미하고 디먹싱 (Demuxing)이라는 과정은 하나로 합쳐진 입력을 다시 여러 출력으로 만드는 것을 의미합니다. 예를 들어 여러분들이 PC에서 다운로드를 받아서 보시는 동영상은 사실 여러 장의 정지 영상과 오디오가 하나의 파일로 (예: .avi, .mkv, *.mov) 먹싱되어 있는 것입니다. 물론 먹싱되기 전에 정지 영상과 오디오는 아래의 그림과 같이 각각 인코딩 과정을 통해서 압축이 되어 있는 상태입니다.
먹싱된 동영상을 재생하기 위해서는 인코딩, 먹싱 과정과 반대로 먼저 디먹싱을 통해서 압축된 정지 영상과 압축된 오디오로 분리한 후 각각의 데이터를 디코딩해야 합니다.
왜 FFmpeg 인가?
문서 압축 프로그램 분야에서는 zip이라는 압축 알고리즘이 많이 사용되는 것과 달리 영상 및 오디오를 압축하는 알고리즘에서는 수 많은 종류가 존재합니다. 따라서 영상 및 오디오를 정상적으로 재생하라면 수 많은 압축 알고리즘 (디코딩 부분)을 모두 직접 구현해야만 합니다. 그러나 영상 및 오디오를 압축하는 프로그램 들이 매우 복잡하며 앞에서 말한 것처럼 그 종류도 매우 많기 때문에 이를 몇몇 사람들이 짧은 시간안에 개발하는 것은 불가능에 가깝습니다. 그러나 FFmpeg은 오픈소스로 전 세계의 개발자들이 개발을 하기 때문에 이러한 수 많은 종류의 영상 및 오디오 코덱 및 파일 포맷등을 지원하고 있습니다. 저보고 FFmpeg을 쉽게 정의해보라고 한다면 한마디로 멀티미디어 계의 리눅스라고 부르고 싶습니다. 리눅스가 더이상 선택이 아닌 필수인 것처럼 FFmpeg 역시 멀티미디어 파일을 다루는데 있어서 더이상 선택이 아니며 필수인 시대가 되고 있습니다. 멀티미디어 관련 프로그램을 개발하는데 있어서 어줍잖은 실력으로 직접 개발하기 보다는 기존에 잘 개발되어 있는 FFmpeg을 잘 사용하는 것만으로도 충분한 경쟁력을 갖출 수 있습니다.
도움되셨다면 하단에 광고 클릭 부탁드립니다 :)
728x90반응형'Programing Study > E.T.C' 카테고리의 다른 글
Docker) 도커에서 컨테이너 이미지의 차이 알아보기 (0) 2021.11.20 개발 트렌드) MSA란 무엇인가? 개념 알아보기 (0) 2021.11.13 Github) Permission denied (publickey) 해결하기 (0) 2021.08.31 GraphQL & Apollo(with Node.js) 간단 정리 (0) 2021.03.24 개인정보 처리방침 (0) 2021.03.21