이번 시간에는 FFmpeg의 트랜스코딩 아키텍처와 흐름에 대해 알아보겠다.
FFmpeg는 미디어 파일을 변환하고 조작하는 데 매우 강력한 도구이며, 이번 포스팅에서는 그 내부 구조와 흐름에 대해 자세히 살펴보겠다.
FFmpeg의 기본 트랜스코딩 흐름
트랜스코딩 과정은 기본적으로 다음과 같은 흐름을 갖는다
- Source File: 파일(예: MKV) 또는 네트워크 프로토콜(예: HTTP, FTP)로부터 입력이 된다
- Demultiplexing(= Unpacking, Demuxing): 입력된 미디어는 먼저 언팩킹(자주 사용되는 용어인 'demuxing')을 통해 비디오와 오디오가 분리된다
- Decoding(= DeCompress): 언팩된 비디오와 오디오는 각각 압축 해제(디코딩)되어 원시 데이터(비디오 프레임 픽셀과 오디오 샘플)로 변환된다
- Filterling: 필요에 따라 필터를 통해 미디어 데이터를 수정한다(예: 비디오 크기 조정, 오디오 볼륨 조정)
- Encoding(=Compress): 수정된 데이터는 다시 압축(인코딩)된다
- Multplixing(=Packing, Muxing): 마지막으로 다른 형식의 컨테이너로 포장(muxing)되어 출력된다
컨테이너와 관련된 기본 용어 복습
사실 이미 이전 포스팅에서 정리 했지만, 복습 차 한 번 더 진행하려 한다.
비디오 컨테이너 (Video Container)
비디오 컨테이너는 비디오 스트림, 오디오 스트림, 자막 등을 포함할 수 있는 파일 형식이다. 다수의 형식이 존재하며, 각각의 특정 코덱과 조합될 수 있다.
예시:
MKV (Matroska Video): 다양한 코덱을 지원하며 비디오, 오디오, 자막을 동시에 포함할 수 있다. 통상적으로, 비디오 코덱으로는 H.264가 사용되고, 오디오 코덱으로는 AAC가 많이 사용된다.
MP4: 가장 널리 사용되는 포맷 중 하나로, 비디오 코덱으로는 H.265 또는 H.264, 오디오 코덱으로는 AAC를 사용한다.
코덱 (Codec)
코덱은 미디어 데이터를 인코딩하거나 디코딩하는 데 사용되는 소프트웨어 또는 알고리즘이다. 각 컨테이너 형식에 알맞은 코덱을 사용해야 한다.
예시:
H.264: 효율적인 압축 비디오 코덱, 대부분의 비디오 스트리밍과 저장 시 사용됨.
AAC (Advanced Audio Codec): 효율적인 오디오 압축을 지원하며, 주로 MP4 파일에서 쓰임.
* 믹서 (Muxer)
Muxer는 비디오와 오디오(및 기타 데이터)를 하나의 파일로 패키징하는 역할을 한다. 즉, 트랜스코딩 후의 압축된 데이터가 컨테이너 형식으로 결합된다.
FFmpeg의 주요 컴포넌트
FFmpeg는 여러 라이브러리로 구성되어 있다. 이들 라이브러리는 각각 특정한 기능을 제공하며, 주요 라이브러리는 다음과 같다:
libavformat: 미디어 컨테이너를 처리하고 demuxing을 담당한다.
libavcodec: 다양한 코덱을 통한 압축 및 해제 기능을 제공한다.
libavfilter: 비디오 및 오디오에 필터를 적용하여 효과를 줄 수 있는 기능을 제공한다.
요약
이번 포스팅에서는 FFmpeg의 기본 아키텍처와 미디어의 트랜스코딩 흐름을 개요로 살펴보았다. 특히 비디오 컨테이너, 코덱, 믹서와 같은 기본 용어를 설명하고, 이들이 어떻게 함께 작동하는지를 다루었다. FFmpeg의 내부 구성요소와 그 기능을 이해하는 것이 앞으로 작업할 때 매우 중요한 기초가 될 것이다.
'ffmpeg' 카테고리의 다른 글
미디어 Codec & Container 개념 (0) | 2025.01.21 |
---|---|
Image, Audio, Video 기초 개념 (0) | 2025.01.20 |
Inspecting with ffprobe (0) | 2025.01.19 |
Setting up FFmpeg (0) | 2025.01.18 |
FFmpeg 소개 - 미디어 Transcodeing & Streaming (0) | 2025.01.17 |