멀티미디어
FFmpeg
정의
오픈소스 멀티미디어 프레임워크. 비디오/오디오 디코딩, 인코딩, 트랜스코딩, 스트리밍, 필터링 등 거의 모든 미디어 처리 가능. libavcodec(코덱), libavformat(컨테이너), libavfilter(필터), libswscale(스케일링) 등 라이브러리 제공. 500+ 코덱, 300+ 포맷 지원
상세 설명
기술 스펙
- libavcodec: H.264(x264), H.265(x265), AV1(libaom/SVT-AV1), VP9(libvpx), AAC(libfdk-aac) 등 500+ 코덱
- libavformat: MP4, MKV, WebM, AVI, TS, FLV, MOV 등 300+ 컨테이너 디멀티플렉싱/멀티플렉싱
- libavfilter: 스케일링, 크롭, 색보정, 오버레이, 디인터레이스, 오디오 믹싱 등 450+ 필터
- libavutil: 메모리 관리, 수학 함수, 랜덤, 암호화 유틸리티
- libswscale: 픽셀 포맷 변환, 리사이징, 색공간 변환
- libswresample: 오디오 리샘플링, 채널 믹싱
- Hardware Acceleration: NVENC, QuickSync, VideoToolbox, VAAPI, CUDA, OpenCL
실무 활용
- YouTube, Vimeo: 업로드 트랜스코딩 파이프라인
- VLC, MPV: 플레이어 백엔드 디코딩
- OBS Studio: 실시간 스트리밍 인코딩
- HandBrake: GUI 인코더 백엔드
- Node.js fluent-ffmpeg: 웹 서버 비디오 처리
장점
- 범용성: 거의 모든 코덱/포맷 지원
- 고성능: 멀티스레드, SIMD 최적화, 하드웨어 가속
- 오픈소스: LGPL/GPL 라이선스, 무료 사용
- 커맨드라인 + 라이브러리: CLI 도구 + C API 제공
- 필터 그래프: 복잡한 처리 파이프라인 구성
단점 및 제약
- 가파른 학습 곡선: 수백 개 옵션, 복잡한 필터 문법
- GPL 라이선스: x264/x265 포함 시 GPL 전염 (상용 제품 제약)
- 에러 메시지: 불친절한 디버깅 출력
- GUI 없음: 커맨드라인 필수 (GUI 래퍼 별도)
호환성
Windows, macOS, Linux, Android, iOS. Python(ffmpeg-python), Node.js(fluent-ffmpeg), Java(Jaffree) 바인딩 존재
표준 정보
표준화 기구: FFmpeg 프로젝트 (오픈소스 커뮤니티)
출시 연도: 2000년