FFmpeg
1. 개요
FFmpeg는 2000년 시작된 오픈 소스 프로젝트로, 다양한 오디오 및 비디오 형식을 변환하고 처리하는 데 사용되는 강력한 명령줄 도구와 라이브러리를 제공한다. 2004년부터 2015년까지 미하엘 니더마이어가 이끌었으며, 3개월마다 새로운 릴리스를 발표한다. FFmpeg은 자체 코덱 외에도 다양한 표준 코덱 및 컨테이너 형식을 지원하며, CPU, 특수 목적 하드웨어, 다양한 미디어 및 인터페이스를 지원한다. 블렌더, 유튜브, 구글 크롬 등 다양한 소프트웨어 및 프로젝트에서 사용되며, NASA의 화성 2020 임무에도 활용되었다.
이미지 준비중입니다.
이미지 준비중입니다.
| 개발자 | FFmpeg 팀 |
|---|---|
| 최초 개발자 | 파브리스 벨라드 |
| 발표일 | 2000년 12월 20일 |
| 최신 안정화 버전 | 6.1 |
| 최신 안정화 버전 출시일 | 2023년 11월 24일 |
| 최신 프리뷰 버전 | 2024년 5월 16일 |
| 최신 프리뷰 버전 출시일 | 2024년 5월 16일 |
| 저장소 | FFmpeg 저장소 |
| 프로그래밍 언어 | C, 어셈블리어 |
| 운영체제 | 윈도우, macOS, 리눅스 |
| 플랫폼 | x86, ARM, PowerPC, MIPS, RISC-V, DEC Alpha, Blackfin, AVR32, SH-4, SPARC (기타 각 데스크톱 PC용으로 컴파일 가능) |
| 종류 | 멀티미디어 프레임워크 |
| 라이선스 | LGPL 2.1+, GPL 2+ |
| 웹사이트 | ffmpeg.org |
| 빈번한 업데이트 | 예 |
|---|
-
오디오 라이브러리 -
ASIO
ASIO는 독일 스타인버그에서 개발한 오디오 입출력 API 규격으로, 낮은 지연 시간과 멀티 채널 I/O를 지원하며 윈도우 운영체제에서 주로 사용된다. -
오디오 라이브러리 -
다이렉트뮤직
-
명령줄 소프트웨어 -
어드밴스트 패키징 툴
어드밴스트 패키징 툴(APT)은 데비안 계열 리눅스 배포판에서 패키지를 관리하는 도구 모음으로, 패키지 설치, 삭제, 업데이트, 업그레이드 기능을 제공하며, 특히 패키지 간 의존성을 자동 관리하는 특징을 가진다. -
명령줄 소프트웨어 -
명령어 인터프리터
명령어 인터프리터는 셸이라고도 불리며 사용자가 입력한 명령어를 해석하고 실행하여 사용자와 운영체제 사이의 인터페이스 역할을 수행하는 프로그램이다. -
멀티미디어 프레임워크 -
퀵타임
퀵타임은 1991년 애플에서 처음 출시된 멀티미디어 프레임워크로, 다양한 기능 업데이트를 거치며 발전했으나 애플의 소극적인 지원으로 쇠퇴하였고, 비디오 및 오디오 트랜스코딩, 코덱 지원 등의 특징을 가지며 퀵타임 플레이어를 통해 다양한 파일 형식을 재생할 수 있도록 지원했으나, 2016년 4월 윈도우 버전 지원이 중단되었다. -
멀티미디어 프레임워크 -
다이렉트쇼
DirectShow는 마이크로소프트에서 개발한 윈도우 기반 멀티미디어 프레임워크이자 API로, 필터 그래프를 통해 비디오 재생, 오디오 녹음, 편집, 인코딩 등 다양한 작업을 처리하며, 뛰어난 코덱 확장성을 가지지만 복잡한 구조와 코덱 충돌 문제가 있다.
2. 역사
FFmpeg 프로젝트는 2000년 파브리스 벨라드에 의해 시작되었으며, 2004년부터 2015년까지는 미하엘 니더마이어가 주도하였다. 일부 FFmpeg 개발자들은 MPlayer 프로젝트 소속 개발자들이기도 했다.
2011년 3월 13일, FFmpeg 개발자 그룹은 Libav라는 이름으로 프로젝트를 포크하기로 결정했다. 이는 프로젝트 관리 문제와 개발자 간의 리더십 불일치 때문이었다. 이 분열로 데비안, 우분투 11.04, 젠투 리눅스는 Libav를 채택했다. 2015년 7월 데비안은 보안 문제 대응으로 Libav를 배제하고 FFmpeg 채용으로 돌아섰으며, 우분투도 FFmpeg를 다시 채택했다.
2014년 1월 10일, 두 명의 구글 직원들이 퍼즈 테스팅을 이용하여 과거 2년 간 1,000개 이상의 버그를 FFmpeg에서 수정하였다고 발표하였다.
2018년 1월, FFmpeg의 일부였던 ffserver 명령 줄 프로그램이 제거되었다. 이는 내부 API 이용으로 인한 높은 유지보수 노력 때문이었다.
프로젝트는 평균 3개월에 한 차례 새로운 릴리스를 출시한다. 릴리스 버전은 웹사이트에서 다운로드할 수 있지만, FFmpeg 개발자들은 사용자가 소스 코드 Git 버전 관리 시스템으로부터 최신 빌드를 이용하여 소스로부터 소프트웨어를 컴파일할 것을 권고한다.
2022년 1월 17일 큰 API 변경과 비권장 API 삭제가 이루어진 FFmpeg 5.0이 출시되었다.
2.1. 코덱 역사
FFmpeg 프로젝트 내에서 FFV1, Snow, NUT 등 세 개의 비디오 코딩 형식 및 컨테이너 형식이 생성되었다. FFV1은 무손실 코덱이며, Snow는 무손실 및 손실 압축을 지원한다. Snow 코덱 개발은 중단되었고 비트스트림 형식도 확정되지 않아 2011년부터 실험적인 상태로 유지되고 있다. NUT 컨테이너 형식은 더 이상 활발히 개발되지는 않지만 유지보수는 진행 중이다.
2010년 여름, FFmpeg 개발자 피오나 글레이저, 로널드 불트예, 데이비드 콘래드는 ffvp8 디코더를 발표했다. 이들은 테스트를 통해 ffvp8이 구글의 libvpx 디코더보다 빠르다는 것을 확인했다. FFmpeg는 0.6 버전부터 WebM과 VP8을 지원했다.
2013년 10월, FFmpeg에 네이티브 VP9 디코더와 오픈 소스 HEVC 디코더인 OpenHEVC가 추가되었다. 2016년에는 네이티브 AAC 인코더가 안정화되면서 VisualOn 및 FAAC 등 외부 AAC 인코더 지원이 제거되었다. FFmpeg 3.0 ("아인슈타인")은 Fraunhofer FDK AAC 인코더에 대한 빌드 지원을 유지했다. FFmpeg는 3.4 ("칸토어") 버전부터 FITS 이미지 형식을 지원했다. 2018년 11월, FFmpeg 4.1 ("알콰리즈미")부터 AV1을 MP4 및 Matroska (WebM 포함)에 멀티플렉싱할 수 있게 되었다.
3. 구성 요소
FFmpeg는 크게 명령줄 도구와 라이브러리로 구성된다.
=== 명령줄 도구 ===
* `ffmpeg`: 오디오 또는 비디오 형식을 변환하는 명령줄 도구이다. TV 캡처 카드와 같은 다양한 하드웨어 및 소프트웨어 소스에서 실시간으로 캡처하고 인코딩할 수 있다.
* `ffplay`: SDL 및 FFmpeg 라이브러리를 활용하는 간단한 미디어 플레이어이다.
* `ffprobe`: 미디어 정보를 표시하는 명령줄 도구이다. MediaInfo도 참조.
=== 라이브러리 ===
* libavcodec: 모든 네이티브 FFmpeg 오디오/비디오 인코더 및 디코더를 담고 있는 라이브러리이다. 대부분의 코덱은 최고의 성능과 높은 코드 재사용성을 보장하기 위해 처음부터 개발되었다.
* libavformat(Lavf): 오디오/비디오 컨테이너 형식에 대한 디멀티플렉서 및 멀티플렉서를 담고 있는 라이브러리이다.
* libavutil: 해시 함수, 암호, LZO 디컴프레서, Base64 인코더/디코더 등 FFmpeg의 여러 부분에 공통적으로 사용되는 루틴을 담고 있는 헬퍼 라이브러리이다.
* libswresample: 오디오 리샘플링 루틴을 담고 있는 라이브러리이다.
* libavresample: Libav 프로젝트의 오디오 리샘플링 루틴을 담고 있는 라이브러리로, ffmpeg의 libswresample과 유사하다.
* libpostproc: 이전 H.263 기반 비디오 후처리 루틴을 담고 있는 라이브러리이다.
* libswscale: 비디오 이미지 스케일링 및 색 공간/픽셀 형식 변환 루틴을 담고 있는 라이브러리이다.
* libavfilter: 디코더와 인코더 사이에서 비디오/오디오를 수정하거나 검사(디버깅용)할 수 있도록 하는 vhook의 대체품이다. 필터는 MPlayer 및 avisynth를 포함한 많은 프로젝트에서 포팅되었다.
* libavdevice: 내부 및 외부 장치를 통해 오디오/비디오 입출력을 담고 있는 라이브러리이다.
3.1. 명령줄 도구
* `ffmpeg`는 오디오 또는 비디오 형식을 변환하는 명령줄 도구이다. TV 캡처 카드와 같은 다양한 하드웨어 및 소프트웨어 소스에서 실시간으로 캡처하고 인코딩할 수도 있다.
* `ffplay`는 SDL 및 FFmpeg 라이브러리를 활용하는 간단한 미디어 플레이어이다.
* `ffprobe`는 미디어 정보(텍스트, CSV, XML, JSON)를 표시하는 명령줄 도구이다. MediaInfo도 참조.
3.2. 라이브러리
* libavcodec: 모든 네이티브 FFmpeg 오디오/비디오 인코더 및 디코더를 담고 있는 라이브러리이다. 대부분의 코덱은 최고의 성능과 높은 코드 재사용성을 보장하기 위해 처음부터 개발되었다.
* libavformat(Lavf): 오디오/비디오 컨테이너 형식에 대한 디멀티플렉서 및 멀티플렉서를 담고 있는 라이브러리이다.
* libavutil: 해시 함수, 암호, LZO 디컴프레서, Base64 인코더/디코더 등 FFmpeg의 여러 부분에 공통적으로 사용되는 루틴을 담고 있는 헬퍼 라이브러리이다.
* libswresample: 오디오 리샘플링 루틴을 담고 있는 라이브러리이다.
* libavresample: Libav 프로젝트의 오디오 리샘플링 루틴을 담고 있는 라이브러리로, ffmpeg의 libswresample과 유사하다.
* libpostproc: 이전 H.263 기반 비디오 후처리 루틴을 담고 있는 라이브러리이다.
* libswscale: 비디오 이미지 스케일링 및 색 공간/픽셀 형식 변환 루틴을 담고 있는 라이브러리이다.
* libavfilter: 디코더와 인코더 사이에서 비디오/오디오를 수정하거나 검사(디버깅용)할 수 있도록 하는 vhook의 대체품이다. 필터는 MPlayer 및 avisynth를 포함한 많은 프로젝트에서 포팅되었다.
* libavdevice: 내부 및 외부 장치를 통해 오디오/비디오 입출력을 담고 있는 라이브러리이다.
4. 지원 하드웨어
FFmpeg는 다양한 주문형 반도체(ASIC)를 통해 오디오/비디오 압축 및 압축 해제 계산 작업을 호스트 CPU에서 부분적으로 또는 완전히 오프로드할 수 있도록 지원한다. 이러한 ASIC를 사용하려면 알고리즘의 전체 구현 대신 API만 필요하다.
| 회사 | ASIC | 목적 | FFmpeg 지원 여부 | 세부 정보 |
|---|---|---|---|---|
| AMD | UVD | 디코딩 | VDPAU API 및 VAAPI를 통해 | |
| VCE | 인코딩 | VAAPI를 통해, 실험적인 것으로 간주됨 | ||
| Amlogic | Amlogic Video Engine | 디코딩 | ? | |
| BlackMagic | DeckLink | 인코딩/디코딩 | 실시간 수집 및 재생 | |
| Broadcom | Crystal HD | 디코딩 | ||
| 퀄컴(Qualcomm) | Hexagon | 인코딩/디코딩 | hwaccel | |
| 인텔(Intel) | Intel Clear Video | 디코딩 | (libmfx, VAAPI) | |
| Intel Quick Sync Video | 인코딩/디코딩 | (libmfx, VAAPI) | ||
| 엔비디아(Nvidia) | PureVideo / NVDEC | 디코딩 | FFmpeg v1.2부터 VDPAU API를 통해 (더 이상 사용되지 않음) FFmpeg v3.1부터 CUVID API를 통해 | |
| NVENC | 인코딩 | FFmpeg v2.6부터 |
다음 API도 지원된다: DirectX 비디오 가속 (DXVA2, 윈도우(Windows)), Direct3D 11 (D3D11VA, 윈도우), Media Foundation (윈도우), Vulkan (VKVA), VideoToolbox (iOS, iPadOS, macOS), RockChip MPP, OpenCL, OpenMAX, MMAL (라즈베리 파이), MediaCodec (안드로이드 OS), V4L2 (리눅스). 환경에 따라, 이러한 API는 특정 ASIC, GPGPU 루틴 또는 SIMD CPU 코드로 이어질 수 있다.
4.2. 특수 목적 하드웨어
다양한 주문형 반도체(ASIC)를 통해 호스트 CPU에서 오디오/비디오 압축 및 압축 해제 계산 작업을 부분적으로 또는 완전히 오프로드할 수 있다. 이러한 ASIC를 사용하려면 알고리즘의 전체 구현 대신 API만 필요하다.
| 회사 | ASIC | 목적 | FFmpeg 지원 여부 | 세부 정보 |
|---|---|---|---|---|
| AMD | UVD | 디코딩 | VDPAU API 및 VAAPI를 통해 | |
| VCE | 인코딩 | VAAPI를 통해, 실험적인 것으로 간주됨 | ||
| Amlogic | Amlogic Video Engine | 디코딩 | ? | |
| BlackMagic | DeckLink | 인코딩/디코딩 | 실시간 수집 및 재생 | |
| Broadcom | Crystal HD | 디코딩 | ||
| 퀄컴(Qualcomm) | Hexagon | 인코딩/디코딩 | hwaccel | |
| 인텔(Intel) | Intel Clear Video | 디코딩 | (libmfx, VAAPI) | |
| Intel Quick Sync Video | 인코딩/디코딩 | (libmfx, VAAPI) | ||
| 엔비디아(Nvidia) | PureVideo / NVDEC | 디코딩 | FFmpeg v1.2부터 VDPAU API를 통해 (더 이상 사용되지 않음) FFmpeg v3.1부터 CUVID API를 통해 | |
| NVENC | 인코딩 | FFmpeg v2.6부터 |
다음 API도 지원된다: DirectX 비디오 가속 (DXVA2, 윈도우(Windows)), Direct3D 11 (D3D11VA, 윈도우), Media Foundation (윈도우), Vulkan (VKVA), VideoToolbox (iOS, iPadOS, macOS), RockChip MPP, OpenCL, OpenMAX, MMAL (라즈베리 파이), MediaCodec (안드로이드 OS), V4L2 (리눅스). 환경에 따라, 이러한 API는 특정 ASIC, GPGPU 루틴 또는 SIMD CPU 코드로 이어질 수 있다.
5. 지원 코덱 및 형식
FFmpeg는 다양한 이미지 형식, 오디오/비디오 코덱, 컨테이너 형식, 프로토콜 등을 지원한다. 2011년 개발 체제 대립으로 ffmpeg.org와 libav.org로 분열되었으나, 2015년 데비안과 우분투는 다시 FFmpeg를 채용했다.
FFmpeg 프로젝트는 FFV1 (무손실 비디오 코덱), Snow 코덱 (무손실 및 손실 압축 지원), NUT (멀티미디어 컨테이너 형식)을 개발했다. Snow 코덱은 2011년부터 실험적인 상태이며, NUT는 유지보수만 되고 있다.
2010년 여름, FFmpeg 개발자들은 ffvp8 디코더가 libvpx 디코더보다 빠르다고 발표했다. FFmpeg는 0.6 버전부터 WebM과 VP8을 지원했고, 2013년 10월에는 네이티브 VP9 디코더와 OpenHEVC (HEVC 디코더)가 추가되었다.
2016년, 네이티브 AAC 인코더가 안정화되어 VisualOn 및 FAAC의 두 외부 AAC 인코더에 대한 지원이 제거되었고, Fraunhofer FDK AAC 인코더는 빌드 지원을 유지했다. FFmpeg 3.4 버전부터 FITS 이미지 형식을, 4.1 버전부터 AV1을 MP4 및 Matroska (WebM 포함)에 멀티플렉싱할 수 있게 되었다. 2022년 1월 17일, 큰 API 변경과 비권장 API 삭제가 이루어진 FFmpeg 5.0이 출시되었다.
지원 코덱에 대한 자세한 내용은 libavcodec 라이브러리에서 확인할 수 있다.
5.1. 이미지 형식
FFmpeg은 많은 일반적인 이미지 형식과 몇몇 특이한 이미지 형식을 지원한다.
PGMYUV 이미지 형식은 바이너리(P5) PGM Netpbm 형식의 자체 제작 변형이다. FFmpeg은 또한 PGM 및 PPM 형식의 16비트 심도, 그리고 `pix_fmts`가 monob, gray, gray16be, rgb24, rgb48be, ya8, rgba, rgb64be인 알파 채널 유무에 관계없이 8비트 또는 16비트 심도의 바이너리(P7) PAM 형식을 지원한다.
| 지원하는 이미지 형식 |
|---|
5.2. 지원 형식
FFmpeg는 자체 개발한 FFV1, Snow 형식을 포함하여 다양한 형식을 지원한다.
| 그룹 | 형식 유형 | 형식 이름 |
|---|---|---|
| ISO/IEC/ITU-T | 영상 | MPEG-1 Part 2, H.261 (Px64), H.262/MPEG-2 Part 2, H.263, MPEG-4 Part 2, H.264/MPEG-4 AVC, HEVC/H.265 (MPEG-H Part 2), MPEG-4 VCB (a.k.a. VP8), 모션 JPEG, IEC DV 영상 및 CD+G |
| 오디오 | MP1, MP2, MP3, AAC, HE-AAC, MPEG-4 ALS, G.711 μ-law, G.711 A-law, G.721 (a.k.a. G.726 32k), G.722, G.722.2 (a.k.a. AMR-WB), G.723 (a.k.a. G.726 24k 및 40k), G.723.1, G.726, G.729, G.729D, IEC DV 오디오 및 직접 스트림 전송 | |
| 자막 | MPEG-4 Timed Text (a.k.a. 3GPP Timed Text) | |
| 이미지 | JPEG, 무손실 JPEG, JPEG-LS, JPEG 2000, JPEG XL, PNG, CCITT G3 및 CCITT G4 | |
| 오픈 미디어 얼라이언스 | 영상 | AV1 |
| 이미지 | AVIF | |
| EIA | 자막 | EIA-608 |
| CEA | 자막 | CEA-708 |
| SMPTE | 영상 | SMPTE 314M (a.k.a. DVCAM 및 DVCPRO), SMPTE 370M (a.k.a. DVCPRO HD), VC-1 (a.k.a. WMV3), VC-2 (a.k.a. Dirac Pro), VC-3 (a.k.a. AVID DNxHD) |
| 오디오 | SMPTE 302M | |
| 이미지 | DPX | |
| ATSC/ETSI/DVB | 오디오 | 전체 속도 (GSM 06.10), AC-3 (돌비 디지털), 향상된 AC-3 (돌비 디지털 플러스) 및 DTS 코히어런트 어쿠스틱스 (a.k.a. DTS 또는 DCA) |
| 자막 | DVB 자막 (ETSI 300 743) | |
| DVD 포럼/돌비 | 오디오 | MLP / 돌비 트루HD |
| 자막 | DVD-Video 자막 | |
| 자이퍼리/DTS, Inc/QDesign | 오디오 | DTS 코히어런트 어쿠스틱스 (a.k.a. DTS 또는 DCA), DTS 확장 서라운드 (a.k.a. DTS-ES), DTS 96/24, DTS-HD 고해상도 오디오, DTS Express (a.k.a. DTS-HD LBR), DTS-HD 마스터 오디오, QDesign Music Codec 1 및 2 |
| 블루레이 디스크 협회 | 자막 | PGS (프레젠테이션 그래픽스 스트림) |
| 3GPP | 오디오 | AMR-NB, AMR-WB (a.k.a. G.722.2) |
| 3GPP2 | 오디오 | QCELP-8 (a.k.a. SmartRate 또는 IS-96C), QCELP-13 (a.k.a. PureVoice 또는 IS-733) 및 향상된 가변 속도 코덱 (EVRC. a.k.a. IS-127) |
| W3C | 영상 | 애니메이션 GIF |
| 자막 | WebVTT | |
| 이미지 | GIF, 및 SVG (librsvg 사용) | |
| IETF | 영상 | FFV1 |
| 오디오 | iLBC (libilbc 사용), 오푸스 및 컴포트 노이즈 | |
| 국제 음성 협회 | 오디오 | DSS-SP |
| SAC | 영상 | AVS 비디오, AVS2 비디오 (libdavs2 사용), AVS3 비디오 (libuavs3d 사용) |
| 마이크로소프트 | 영상 | 마이크로소프트 RLE, 마이크로소프트 비디오 1, 시네팩, 마이크로소프트 MPEG-4 v1, v2 및 v3, 윈도우 미디어 비디오 (WMV1, WMV2, WMV3/VC-1), WMV 스크린 및 Mimic 코덱 |
| 오디오 | 윈도우 미디어 오디오 (WMA1, WMA2, WMA Pro 및 WMA 무손실), XMA (XMA1 및 XMA2), MSN 사이렌, MS-GSM 및 MS-ADPCM | |
| 자막 | SAMI | |
| 이미지 | Windows 비트맵, WMV 이미지 (WMV9 이미지 및 WMV9 이미지 v2), DirectDraw Surface, 및 MSP | |
| 대화형 멀티미디어 협회 | 오디오 | IMA ADPCM |
| 인텔 / 디지털 비디오 인터랙티브 | 영상 | RTV 2.1 (Indeo 2), Indeo 3, 4 및 5, 및 인텔 H.263 |
| 오디오 | DVI4 (a.k.a. IMA DVI ADPCM), 인텔 뮤직 코더 및 Indeo 오디오 코더 | |
| 리얼네트웍스 | 영상 | 리얼비디오 프랙탈 코덱 (a.k.a. Iterated Systems ClearVideo), 1, 2, 3 및 4 |
| 오디오 | 리얼오디오 v1 – v10, 및 리얼오디오 무손실 | |
| 자막 | 리얼텍스트 | |
| 애플 / Spruce Technologies | 영상 | 시네팩 (애플 콤팩트 비디오), ProRes, 소렌슨 3 코덱, 퀵타임 애니메이션 (애플 애니메이션), 퀵타임 그래픽스 (애플 그래픽스), 애플 비디오, 애플 중간 코덱 및 픽슬릿 |
| 오디오 | ALAC | |
| 이미지 | 퀵드로우 PICT | |
| 자막 | Spruce 자막 (STL) | |
| 어도비 플래시 플레이어 (SWF) | 영상 | 화면 비디오, 화면 비디오 2, 소렌슨 스파크 및 VP6 |
| 오디오 | Adobe SWF ADPCM 및 넬리모저 아사오 | |
| 어도비 / 알더스 | 이미지 | TIFF, PSD, 및 DNG |
| 자이프 | 영상 | 테오라 |
| 오디오 | 스피크스, 보르비스, 오푸스 및 FLAC | |
| 자막 | Ogg Writ | |
| 소니 | 오디오 | 적응형 변환 음향 코딩 (ATRAC1, ATRAC3, ATRAC3Plus, 및 ATRAC9) 및 PSX ADPCM |
| NTT | 오디오 | 트윈VQ |
| 구글 / On2 / GIPS | 영상 | Duck TrueMotion 1, Duck TrueMotion 2, Duck TrueMotion 2.0 실시간, VP3, VP4, VP5, VP6, VP7, VP8, VP9 및 애니메이션 WebP |
| 오디오 | DK ADPCM 오디오 3/4, On2 AVC 및 iLBC (libilbc 사용) | |
| 이미지 | WebP | |
| 에픽 게임즈 / RAD 게임 툴 | 영상 | 스매커 비디오 및 빙크 비디오 |
| 오디오 | 빙크 오디오 | |
| CRI 미들웨어 | 오디오 | ADX ADPCM, 및 HCA |
| 닌텐도 / NERD | 영상 | Mobiclip 비디오 |
| 오디오 | GCADPCM (a.k.a. ADPCM THP), FastAudio, 및 ADPCM IMA MOFLEX | |
| 시냅틱스 / DSP 그룹 | 오디오 | 트루스피치 |
| 일렉트로닉 아츠 / 크라이테리온 게임스 / 블랙 박스 게임스 / 웨스트우드 스튜디오스 | 영상 | 렌더웨어 TXD, 매드카우, CMV, TGV, TGQ, TQI, 미디비드 VQ (MVDV), 미디비드 3.0 (MV30), 미디비드 아카이브 (MVHA), 및 벡터 양자화 애니메이션 (VQA) |
| 오디오 | 일렉트로닉 아츠 ADPCM 변형 | |
| 넷비엠 | 이미지 | PBM, PGM, PPM, PNM, PAM, PFM 및 PHM |
| MIT/X 컨소시엄/오픈 그룹 | 이미지 | XBM, XPM 및 xwd |
| HPE / SGI / 실리콘 그래픽스 | 영상 | 실리콘 그래픽스 RLE 8비트 비디오, 실리콘 그래픽스 MVC1/2 |
| 이미지 | 실리콘 그래픽스 이미지 | |
| 오라클/썬 마이크로시스템즈 | 이미지 | 선 래스터 |
| IBM | 영상 | IBM 얼티모션 |
| 아비드 테크놀로지 / 트루비전 | 영상 | 아비드 1:1x, 아비드 메리디안, 아비드 DNxHD, 아비드 DNx444, 및 DNxHR |
| 이미지 | Targa | |
| 오토데스크 / 알리아스 | 영상 | 오토데스크 애니메이터 스튜디오 코덱 및 FLIC |
| 이미지 | Alias PIX | |
| 액티비전 블리자드 / 액티비전 / 인포컴 | 오디오 | ADPCM 조크 |
| 코나미 / 허드슨 소프트 | 영상 | HVQM4 비디오 |
| 오디오 | 코나미 MTAF, 및 ADPCM IMA HVQM4 | |
| 그래스 밸리 / 캐노퍼스 | 영상 | HQ, HQA, HQX 및 무손실 |
| Vizrt / 뉴텍 | 영상 | SpeedHQ |
| 이미지 | Vizrt 바이너리 이미지 | |
| 아카데미 소프트웨어 재단 / ILM | 이미지 | OpenEXR |
| 모질라 | 영상 | APNG |
| 매트록스 | 영상 | Matrox 압축되지 않은 SD (M101) / HD (M102) |
| AMD/ATI | 영상 | ATI VCR1/VCR2 |
| 아수스 | 영상 | ASUS V1/V2 코덱 |
| 코모도어 | 영상 | CDXL 코덱 |
| 코닥 | 이미지 | 포토 CD |
| 블랙매직 디자인 / 신텔 | 이미지 | Cintel RAW |
| 호튼 미플린 하코트 / 더 러닝 컴퍼니 / ZSoft Corporation | 이미지 | PCX |
| 오스트레일리아 국립 대학교 | 이미지 | X-Face |
| 블루투스 특별 관심 그룹 | 오디오 | SBC, 및 mSBC |
| 퀄컴 / CSR | 오디오 | QCELP, aptX, 및 aptX HD |
| 오픈 모바일 얼라이언스 / WAP 포럼 | 이미지 | 무선 비트맵 |
5.3. Muxer
FFmpeg는 출력 형식(컨테이너 형식 및 출력 스트림을 생성하는 기타 방법)을 "muxer"라고 부른다. FFmpeg가 지원하는 Muxer는 다음과 같다.
| 지원 Muxer |
|---|
5.4. 픽셀 형식
FFmpeg는 다양한 픽셀 형식을 지원한다. 흑백, RGB, YUV, XYZ, 바이어 등 다양한 색상 공간 및 비트 심도를 다룬다.
FFmpeg는 IMC1-IMC4, AI44, CYMK, RGBE, 로그 RGB 등은 지원하지 않는다. 또한, 일반적으로 사용되지 않는 ARGB 1:5:5:5, 2:10:10:10, BMP 비트 필드 형식도 지원하지 않는다.
6. 지원 프로토콜
FFmpeg는 TCP, UDP, HTTP, RTP, RTSP, RealMedia RTSP/RDT, RTMP, librtmp를 경유하는 RTMPT, RTMPE, RTMPTE, RTMPS, SDP, 고퍼, MMS over TCP 등 다양한 프로토콜을 지원한다.
6.1. 오픈 표준
6.2. De facto 표준
* RTSP over TLS
* 아이스캐스트 프로토콜
* 어도비 RTMP, RTMPT, RTMPE, RTMPTE 및 RTMPS
* RealMedia RTSP/RDT
* 제로MQ (libzmq를 통해)
* RIST (librist)
* TCP
* UDP
* HTTP
* RTP
* RTSP
* RTMP
* RTMPT, RTMPE, RTMPTE, RTMPS (librtmp 경유)
* SDP
* 고퍼
* MMS over TCP
7.1. 오디오 필터
* 리샘플링 (aresample)
* 패스/스톱 필터
로우패스 필터 (lowpass)
하이패스 필터 (highpass)
올패스 필터 (allpass)
버터워스 밴드패스 필터 (bandpass)
버터워스 밴드스톱 필터 (bandreject)
* 임의 유한 임펄스 응답 필터 (afir)
* 임의 무한 임펄스 응답 필터 (aiir)
* 이퀄라이저
피크 이퀄라이저 (equalizer)
버터워스/체비셰프 I형/II형 멀티밴드 이퀄라이저 (anequalizer)
로우 셸빙 필터 (bass)
하이 셸빙 필터 (treble)
Xbox 360 이퀄라이저
FIR 이퀄라이저 (firequalizer)
바이어드 필터 (biquad)
* DC 오프셋 제거/추가 (dcshift)
* 표현식 평가
시간 도메인 표현식 평가 (aeval)
주파수 도메인 표현식 평가 (afftfilt)
* 다이내믹스
리미터 (alimiter)
컴프레서 (acompressor)
다이내믹 레인지 익스팬더 (crystalizer)
사이드체인 컴프레서 (sidechaincompress)
컴팬더 (compand)
노이즈 게이트 (agate)
사이드체인 노이즈 게이트(sidechaingate)
* 디스토션
비트크러셔 (acrusher)
* 엠퍼시스 (aemphasis)
* 증폭/노멀라이저
볼륨 (volume)
다이내믹 오디오 노멀라이저 (dynaudnorm)
EBU R 128 라우드니스 노멀라이저 (loudnorm)
* 변조
사인파 진폭 변조 (tremolo)
사인파 위상 변조 (vibrato)
페이저 (aphaser)
코러스 (chorus)
플랜저 (flanger)
펄세이터 (apulsator)
* 에코/리버브
에코 (aecho)
* 라우팅/패닝
스테레오 와이드닝 (stereowiden)
채널 차이 증가 (extrastereo)
M/S to L/R (stereotools)
채널 매핑 (channelmap)
채널 분할 (channelsplit)
채널 패닝 (pan)
채널 병합 (amerge)
채널 결합 (join)
헤드폰용
* 스테레오 to 바이노럴 (earwax, SoX에서 포팅)
* 바우어 스테레오 to 바이노럴 (bs2b, libbs2b 경유)
* 크로스피드 (crossfeed)
* 멀티채널 to 바이노럴 (sofalizer, libnetcdf 필요)
* 딜레이
딜레이 (adelay)
거리별 딜레이 (compensationdelay)
* 페이드
페이더 (afade)
크로스페이더 (acrossfade)
* 오디오 시간 늘이기 및 피치 스케일링
시간 늘이기 (atempo)
시간 늘이기 및 피치 시프팅 (rubberband, librubberband 경유)
* 편집
트림 (atrim)
무음 패딩 (apad)
무음 제거 (silenceremove)
* 프레임/채널 정보 표시
프레임 정보 표시 (ashowinfo)
채널 정보 표시 (astats)
무음 범위 표시 (silencedetect)
오디오 볼륨 표시 (volumedetect)
리플레이게인 스캐너 (replaygain)
* 프레임/채널 정보 수정
출력 형식 설정 (aformat)
샘플 수 설정 (asetnsamples)
샘플링 레이트 설정 (asetrate)
* 믹서 (amix)
* 동기화 (asyncts)
* HDCD 데이터 디코더 (hdcd)
* 플러그인
LADSPA (ladspa)
LV2 (lv2)
* 아무것도 안 함 (anull)
7.2. 비디오 필터
* 변환
자르기 (crop, cropdetect)
페이드 (fade)
크기 조절 (scale)
패딩 (pad)
회전 (rotate)
전치 (transpose)
기타:
* 렌즈 보정 (lenscorrection)
* OpenCV 필터링 (ocv)
* 원근 보정 (perspective)
* 시간 편집
프레임 속도 (fps, framerate)
루핑 (loop)
트리밍 (trim)
* 디인터레이싱 (bwdif, idet, kerndeint, nnedi, yadif, w3fdif)
* 역 텔레시네
* 필터링
블러링 (boxblur, gblur, avgblur, sab, smartblur)
컨볼루션 필터
* 컨볼루션 (convolution)
* 가장자리 감지 (edgedetect)
* 소벨 필터 (sobel)
* 프리윗 필터 (prewitt)
* 언샵 마스킹 (unsharp)
* 디노이징 (atadenoise, bitplanenoise, dctdnoiz, owdenoise, removegrain)
* 로고 제거 (delogo, removelogo)
* 자막 (ASS, subtitles)
* 알파 채널 편집 (alphaextract, alphamerge)
* 키잉 (chromakey, colorkey, lumakey)
* 프레임 감지
블랙 프레임 감지 (blackdetect, blackframe)
썸네일 선택 (thumbnail)
* 프레임 블렌딩 (blend, tblend, overlay)
* 비디오 안정화 (vidstabdetect, vidstabtransform)
* 색상 및 레벨 조정
균형 및 레벨 (colorbalance, colorlevels)
채널 믹싱 (colorchannelmixer)
색 공간 (colorspace)
파라메트릭 조정 (curves, eq)
* 히스토그램 및 시각화
CIE 스코프 (ciescope)
벡터스코프 (vectorscope)
파형 모니터 (waveform)
색상 히스토그램 (histogram)
* 드로잉
* OCR
* 품질 측정
SSIM (ssim)
PSNR (psnr)
* 룩업 테이블
** lut, lutrgb, lutyuv, lut2, lut3d, haldclut
8. 지원 미디어 및 인터페이스
FFmpeg은 외부 라이브러리를 통해 여러 장치를 지원한다. 지원하는 장치는 다음과 같다.
| 종류 | 장치 | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 미디어 | 콤팩트 디스크 (libcdio를 통해; 입력만 지원) | |||||||||||||||||||||||
| 물리적 인터페이스 | ||||||||||||||||||||||||
| 오디오 IO | ||||||||||||||||||||||||
| 비디오 IO | ||||||||||||||||||||||||
| 화면 캡처 및 출력 | ||||||||||||||||||||||||
| 운영체제 | 장치 |
|---|---|
| 유닉스 | Simple DirectMedia Layer 2 (출력 전용) |
| OpenGL (출력 전용) | |
| Linux framebuffer (fbdev) | |
| X Window System (X11; XCB를 통해; 입력 전용) | |
| X video extension (XV; Xlib를 통해; 출력 전용) | |
| 커널 모드 설정(libdrm을 통해; 입력 전용) | |
| OSS | |
| 리눅스 | JACK |
| X11 캡처 | |
| dv1394 | |
| bktr 드라이버 | |
| ALSA | |
| 윈도우 | Video4Linux |
| Video4Linux2 | |
| libdc1394 (IEEE 1394) | |
| VfW 캡처 | |
| Graphics Device Interface(GDI; 입력 전용) | |
8.1. 미디어
콤팩트 디스크(libcdio를 통해; 입력만 지원)
8.2. 물리적 인터페이스
FFmpeg은 외부 라이브러리를 통해 다음 장치들을 지원한다.
* IEEE 1394 (일명 FireWire, libdc1394 및 libraw1394 사용, 입력 전용)
* IEC 61883 (libiec61883 사용, 입력 전용)
* 덱스링크
* 브룩트리 비디오 캡처 칩 (bktr 드라이버 사용, 입력 전용)
8.3. 오디오 IO
FFmpeg은 외부 라이브러리를 통해 다음 장치를 지원한다.
* ALSA
* OSS
* PulseAudio
* JACK (입력 전용)
* OpenAL (입력 전용)
* sndio
* Core Audio (macOS용)
8.4. 비디오 IO
FFmpeg은 외부 라이브러리를 통해 다음 장치들을 지원한다.
* Video4Linux2
* 비디오 포 윈도우 (입력 전용)
* DirectShow
* 안드로이드 카메라 (입력 전용)
8.5. 화면 캡처 및 출력
FFmpeg은 외부 라이브러리를 통해 다음 장치를 지원한다.
| 운영체제 | 장치 |
|---|---|
| 유닉스 | Simple DirectMedia Layer 2 (출력 전용) |
| OpenGL (출력 전용) | |
| Linux framebuffer (fbdev) | |
| X Window System (X11; XCB를 통해; 입력 전용) | |
| X video extension (XV; Xlib를 통해; 출력 전용) | |
| 커널 모드 설정(libdrm을 통해; 입력 전용) | |
| OSS | |
| 리눅스 | JACK |
| X11 캡처 | |
| dv1394 | |
| bktr 드라이버 | |
| ALSA | |
| 윈도우 | Video4Linux영어 |
| Video4Linux2 | |
| libdc1394 (IEEE 1394) | |
| VfW 캡처 | |
| Graphics Device Interface(GDI; 입력 전용) | |
9. 응용 분야
FFmpeg는 다양한 종류의 소프트웨어 및 하드웨어에서 널리 사용되고 있다.
FFmpeg를 사용하는 프로젝트는 다음과 같다.
| 분류 | 프로젝트 |
|---|---|
| 인코더 | MEncoder, HandBrake, MediaCoder, 휴대용 동영상 변환군, WinFF |
| 코덱 | ffdshow, GStreamer FFmpeg 플러그인, Perian, Bellagio OpenMAX IL (ST마이크로일렉트로닉스와 노키아가 개발한 오픈 소스 OpenMAX IL영어 구현), FFmpegInterop (마이크로소프트가 개발한 MediaStreamSource 구현) |
| 3D 렌더링 | Blender |
| 멀티미디어 플레이어 | MPlayer, VLC, Xine, Gnash (오픈 소스 플래시 플레이어), swfdec (오픈 소스 플래시 플레이어), Moonlight (마이크로소프트가 지원하고 노벨이 개발하는 오픈 소스 Silverlight 대체 구현) |
| 동영상 편집 | Avidemux, Kdenlive, Jahshaka, B's 동영상 레코더 |
| 음성 편집 | Audacity (1.3.6 이후), 라지록12 Windows판 |
| VoIP | Ekiga |
| 사설 교환기 (PBX) | Asterisk |
| 이미지 처리 | OpenCV (인텔이 개발한 컴퓨터 비전용 라이브러리), ImageMagick (MPEG-2로 출력하는 데 사용) |
| 웹 브라우저 | 구글 크롬 (HTML5의 video 태그에 사용. 또한 크롬을 기반으로 한 미디어 플레이어를 만들 계획이 있음) |
| 동영상 처리 | Ingex (영국 방송 협회(BBC) 리서치 앤드 디벨롭먼트가 개발하고 BBC가 사용) |
| 래퍼 | [https://code.google.com/archive/p/javacv JavaCV] (OpenCV의 Java 래퍼이지만 FFmpeg의 래퍼도 포함) |
FFmpeg에 포함된 라이브러리군은 Palm의 스마트폰 (Palm webOS)이나 소니의 블루레이 플레이어 (BDP-S1, BDP-S1E/BDP-S300/BDP-S280, BDP-S500/BDP-S2000ES) 등의 장치에도 이용되고 있다.
9.1. 법적 측면
FFmpeg은 100개 이상의 코덱을 포함하며, 대부분은 압축 기술을 사용한다. 이러한 압축 기술 중 다수는 소프트웨어 특허와 관련된 법적 문제의 대상이 될 수 있다. 이러한 문제는 소프트웨어 특허를 시행하는 미국과 같은 국가에서는 유효할 수 있지만, 유럽 연합 회원국에서는 무효하거나 시행할 수 없는 것으로 간주된다. AC3 및 모든 MPEG-1 및 MPEG-2 코덱을 포함한 많은 구형 코덱에 대한 특허는 만료되었다.
FFmpeg은 LGPL 라이선스 하에 라이선스가 부여되지만, FFmpeg의 특정 빌드가 GPL 라이브러리 (특히 x264)에 대해 링크된 경우 전체 바이너리는 GPL 하에 라이선스가 부여된다.
9.2. FFmpeg 사용 프로젝트
FFmpeg는 다양한 종류의 소프트웨어 및 하드웨어에서 널리 사용된다.
다음은 FFmpeg를 사용하는 프로젝트들이다.
* 인코더
MEncoder
HandBrake
MediaCoder
휴대용 동영상 변환군
WinFF
* 코덱
ffdshow
GStreamer FFmpeg 플러그인
Perian
Bellagio OpenMAX IL - ST마이크로일렉트로닉스와 노키아가 개발한 오픈 소스 OpenMAX IL영어 구현
FFmpegInterop - 마이크로소프트가 개발한 MediaStreamSource 구현
* 3D 렌더링
Blender
* 멀티미디어 플레이어
MPlayer
VLC
Xine
Gnash - 오픈 소스 플래시 플레이어
swfdec - 오픈 소스 플래시 플레이어
Moonlight - 마이크로소프트가 지원하고 노벨이 개발하는 오픈 소스 Silverlight 대체 구현
* 동영상 편집
Avidemux
Kdenlive
Jahshaka
B's 동영상 레코더
* 음성 편집
Audacity (1.3.6 이후)
라지록12 Windows판
* VoIP
Ekiga
* 사설 교환기 (PBX)
Asterisk
* 이미지 처리
OpenCV - 인텔이 개발한 컴퓨터 비전용 라이브러리.
ImageMagick - MPEG-2로 출력하는 데 사용.
* 웹 브라우저
구글 크롬 - HTML5의 video 태그에 사용. 또한 크롬을 기반으로 한 미디어 플레이어를 만들 계획이 있다.
* 동영상 처리
Ingex - 영국 방송 협회(BBC) 리서치 앤드 디벨롭먼트가 개발하고 BBC가 사용하고 있는 오픈 소스 텔레비전 프로덕션용 종합 소프트웨어
* 래퍼
[https://code.google.com/archive/p/javacv JavaCV] - OpenCV의 Java 래퍼이지만 FFmpeg의 래퍼도 포함
FFmpeg에 포함된 라이브러리군은 Palm의 스마트폰 (Palm webOS)이나 소니의 블루레이 플레이어 (BDP-S1, BDP-S1E/BDP-S300/BDP-S280, BDP-S500/BDP-S2000ES) 등의 장치에도 이용되고 있다.