최근 수정 시각 : 2025-12-17 20:23:45

FFmpeg


#!if code = "display: inline; padding: .125rem .25rem; background: #dddddd; border-radius: .25rem; font-size: .875rem; font-family: Cascadia Mono, Menlo, Monaco, Consolas, monospace"
#!if codeds = "display: inline; padding: .125rem .25rem; background: #383b40; border-radius: .25rem; font-size: .875rem; font-family: Cascadia Mono, Menlo, Monaco, Consolas, monospace"
<colbgcolor=#005f00,#1b261b><colcolor=#fff,#fff> FFmpeg
Fast Forward MPEG
파일:FFmpeg 로고.svg
발표 2000년 12월 20일
라이선스 LGPL, GPL[1]
최신 버전 8.0.1 "Huffman" (2025년 11월 20일)
링크 파일:홈페이지 아이콘.svg | 파일:홈페이지 아이콘.svg Windows | 파일:Git-Icon-1788C.svg
1. 개요2. 설치 방법3. 기본 명령어 및 사용법
3.1. 필수 옵션3.2. 비디오 관련 옵션3.3. 오디오 관련 옵션
4. 상세 구성 요소5. 사용 방법
5.1. 포맷 변환5.2. 영상 편집5.3. 복합 설정 예시5.4. 비디오 처리5.5. 오디오 처리5.6. 자막 처리5.7. Streamlink 연계5.8. 메타데이터 수정
6. 기반 프로그램
6.1. 동영상 플레이어6.2. 인코딩 프로그램6.3. 웹 서비스
7. 논란 및 사건사고
7.1. 국산 플레이어의 GPL 위반 의혹7.2. libav
8. 기타
8.1. AAC 인코딩 문제8.2. 프라운호퍼 AAC인코더 libfdk_aac 라이브러리 빌드
9. 관련 문서10. 외부 링크

1. 개요

||<table width=100%><width=10%><table bgcolor=transparent><table bordercolor=transparent><keepall>A complete, cross-platform solution to record, convert and stream audio and video.
(오디오와 비디오를 기록하고, 변환하고, 스트리밍하는 완전한 크로스 플랫폼 솔루션)
FFmpeg 소개 ||


마이클 니더마이어(Michael Niedermayer)의 주도하에 개발되고 있는 모든 동영상, 음악, 사진 포맷들의 디코딩과 인코딩을 목표로 만들어지고 있는 오픈 소스 멀티미디어 프레임워크 프로젝트이다.
관련 프로그램(인코더, 디코더, 플레이어 등)에서 표준이라 불릴 정도로 수많은 소프트웨어의 기반이 되고 있다.

NVIDIAAMD는 자사의 그래픽카드 하드웨어 가속을 지원하기 위해 FFmpeg 프로젝트에 소스 코드를 직접 제공하고 수정하기도 했다. 대부분의 멀티미디어 재생기가 FFmpeg을 기반으로 하기 때문에, FFmpeg에서 지원하면 그 효과를 전 세계 사용자에게 즉시 전달할 수 있기 때문이다.

2025년 8월 공개된 8.0 'Huffman' 버전에서는 인프라 현대화와 함께 Vulkan 기반 컴퓨트 코덱(Vulkan compute-based codecs)이 최초로 도입되었다. 이는 특정 하드웨어 가속기(HW Accel)에 의존하던 기존 방식과 달리, Vulkan 1.3을 지원하는 모든 GPU에서 컴퓨트 셰이더(Compute Shader)를 통해 디코딩/인코딩을 수행하는 기술이다. 또한 APV, ProRes RAW 등의 네이티브 디코더가 추가되었으며, AI 자막 생성 모델인 Whisper 필터가 내장되었다.

참고로 FFmpeg의 로열티 문제는 FFmpeg 자체의 문제가 아닌, FFmpeg가 포함하고 있는 H.265와 같은 유료 코덱들에 의한 것이다. 이미 이런 문제 때문에 삼성을 비롯한 전 세계의 IT 관련 대기업들이 협력해 AV1 프로젝트를 진행 중이며, 2022년 9월 정식 릴리즈 버전에
libaom-av1
muxer가 추가되었다.

2. 설치 방법

FFmpeg는 크로스 플랫폼을 지원하며, 소스 코드를 직접 컴파일하거나 컴파일된 바이너리(실행 파일)를 다운로드하여 사용할 수 있다.
대부분의 사용자는 각 운영체제의 패키지 매니저를 사용하는 것이 가장 간편하다.
<rowcolor=#ffffff,#ffffff> 운영체제 설치 방법 설명
파일:Windows 아이콘.svg
Windows
WinGet:
winget install Gyan.FFmpeg

Chocolatey:
choco install ffmpeg
(추천) 패키지 매니저를 사용하면 PATH 환경 변수가 자동으로 설정되어 편리하다.

수동 설치: Gyan.dev 또는 BtbN에서 빌드된 압축 파일을 받아 bin 폴더를 환경 변수에 등록한다.
macOS Homebrew:
brew install ffmpeg
터미널에서 Homebrew를 통해 설치하는 것이 표준에 가깝다.
특정 옵션이 필요한 경우
ffmpeg-options
등을 찾아봐야 한다.
파일:Linux 로고.svg파일:Linux 로고 화이트.svg
Linux
Debian/Ubuntu:
sudo apt install ffmpeg

Arch Linux:
sudo pacman -S ffmpeg
배포판 공식 저장소의 버전은 최신 릴리즈보다 다소 낮을 수 있다.
정적 빌드(Static Build)
다운로드 링크
설치 없이 실행 파일 하나만 있으면 되는 버전이다.
의존성 라이브러리가 모두 포함되어 있어, 리눅스 환경에 상관없이 바로 실행 가능하다.

3. 기본 명령어 및 사용법

FFmpeg의 기본 명령어 구조는 다음과 같다.
#!syntax sh
ffmpeg [전역 옵션] {[입력 옵션] -i 입력_파일} ... {[출력 옵션] 출력_파일} ...

예:
ffmpeg -i input.mp4 -c:v copy -c:a mp3 output.avi


옵션의 순서가 매우 중요하다. -i 앞에 오는 옵션은 입력 파일에 적용되고, 뒤에 오는 옵션은 출력 파일에 적용된다.

3.1. 필수 옵션

<rowcolor=#ffffff,#ffffff> 옵션 설명 비고
-i 입력 파일(Input)을 지정한다. 가장 먼저 와야 하는 필수 옵션이다.
-y 출력 파일 경로에 이미 파일이 존재할 경우, 묻지 않고 덮어쓰기(Yes)를 수행한다. 스크립트 작성 시 유용하다.
-t 지정된 시간(초)만큼만 작업한다. 예:
-t 60
(60초 분량만 자름)
-ss 지정된 시간부터 작업을 시작한다(Seek Start). 예:
-ss 00:01:30
(1분 30초 지점부터)
-to 지정된 시간까지만 작업을 수행한다. -ss와 함께 사용하여 구간을 자를 때 쓴다.
-re 입력 데이터를 실시간(Real-time) 속도로 읽는다. 스트리밍 송출 시 필수적인 옵션이다.

3.2. 비디오 관련 옵션

<rowcolor=#ffffff,#ffffff> 옵션 설명 비고
-c:v
-vcodec
비디오 코덱을 지정한다. 주요 값:
libx264
(H.264),
libx265
(HEVC),
vp9
,
copy

copy
사용 시 재인코딩 없이 데이터를 그대로 복사하므로 품질 저하가 없고 속도가 매우 빠르다.
-b:v
-b
비디오 비트레이트를 지정한다. 예:
-b:v 2000k
(2Mbps),
-b:v 1M
-crf 고정 품질 계수(Constant Rate Factor). 비트레이트 대신 화질을 기준으로 가변 비트레이트 인코딩을 수행한다. 범위: 0~51 (낮을수록 고화질, 용량 증가)
x264 기본값: 23 / x265 기본값: 28
일반적으로 18~28 사이 값을 사용한다..
-filter:v
-vf
비디오 필터(Video Filter). 리사이즈, 회전, 자막 합성 등을 처리한다.[2] 예(리사이즈):
-vf "scale=1920:1080"
-r 프레임 레이트(FPS)를 강제로 변경한다. 예:
-r 60
-vn 비디오 스트림을 제거한다(Video None). 오디오만 추출할 때 사용한다.
-preset 인코딩 속도와 압축 효율의 균형을 설정한다. (x264/x265 전용)
ultrafast
,
superfast
,
veryfast
,
faster
,
fast
,
medium
(기본),
slow
,
slower
,
veryslow

느릴수록 압축 효율(화질 대비 용량)이 좋아진다.[3]
-tune 영상 종류에 맞춰 인코더 설정을 미세 조정한다.[4] film(영화), animation(애니메이션), grain(노이즈 많은 영상) 등

3.3. 오디오 관련 옵션

<rowcolor=#ffffff,#ffffff> 옵션 설명 비고
-c:a
-acodec
오디오 코덱을 지정한다.[5] 주요 값:
aac
,
libmp3lame
(MP3),
opus
,
copy

오디오 코덱 서열:
libopus
>
libvorbis
libfdk_aac
>
aac
>
libmp3lame
>
eac3/ac3
>
libtwolame
>
vorbis
>
mp2
>
wmav2/wmav1
-b:a
-ab
오디오 비트레이트를 지정한다. 예:
-b:a 192k
,
-b:a 320k
-an 오디오 스트림을 제거한다(Audio None). 영상에서 소리를 없앨 때 사용한다.
-af 오디오 필터(Audio Filter). 볼륨 조절, 믹싱 등을 처리한다. 예(볼륨 2배):
-af "volume=2.0"
-ac 오디오 채널 수를 변경한다. 예(스테레오):
-ac 2
, 예(모노):
-ac 1

4. 상세 구성 요소

FFmpeg 프로젝트는 단순한 변환기뿐만 아니라 다양한 멀티미디어 처리 라이브러리를 포함하고 있다.
  • ffmpeg: 미디어 포맷 변환 도구. 가장 널리 사용되는 CLI 프로그램이다.
  • ffplay: SDL 라이브러리를 기반으로 한 간이 미디어 재생기.
  • ffprobe: 미디어 파일의 메타데이터, 코덱 정보, 스트림 세부 정보를 표시하는 분석 도구.
  • ffserver: 라이브 방송용 스트리밍 서버였으나, 버전 3.4 이후 제거되었다.
  • libavcodec: FFmpeg의 핵심으로, 오디오/비디오 코덱 라이브러리다. 수많은 플레이어가 이 라이브러리를 사용한다.
  • libavformat: 멀티미디어 컨테이너(mp4, mkv 등)의 디먹서(Demuxer)/먹서(Muxer) 라이브러리.
  • libavdevice: 입출력 장치(웹캠, 마이크 등) 제어 라이브러리.
  • libavfilter: 미디어 필터 라이브러리. 영상 효과, 자막 합성, 색보정, 오디오 믹싱 등을 담당한다. 8.0 버전에서 AI 자막 생성 필터(Whisper) 등이 추가되었다.
  • libavutil: 난수 생성, 데이터 구조, 수학 연산 등 공통 유틸리티 함수를 제공한다.
  • libswscale: 영상의 크기 변환(Scaling), 색상 공간 변환(YUV↔RGB 등)을 담당하는 라이브러리.
  • libswresample: 오디오 리샘플링, 포맷 변환, 채널 믹싱 등을 담당하는 라이브러리.

5. 사용 방법

FFmpeg의 여러 명령어를 조합하면 수많은 기능을 매우 유용하게 사용할 수 있다.

5.1. 포맷 변환

가장 기본적인 사용법으로, 영상의 컨테이너나 코덱을 변경한다. 다양한 옵션은 영어가 된다면 FFmpeg 위키 참조.
  • 단순 컨테이너 변경 (고속)
    영상과 음성을 재인코딩하지 않고 그대로 복사하여 컨테이너만 바꾼다. 화질 저하가 없고 매우 빠르다. (단, 대상 컨테이너가 코덱을 지원해야 함)
    {{{#!syntax sh
ffmpeg -i input.mkv -c copy output.mp4
}}}
  • H.264 비디오 + AAC 오디오로 변환
    가장 호환성이 좋은 포맷으로 변환한다.
    {{{#!syntax sh
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
}}}
  • MPEG-4 비디오 변환
    구형 기기에서 재생해야 할 때 사용한다. libxvid는 BVOP 활성시 비디오 싱크가 어긋나는 등의 심각한 버그가 많아 비추천.
    {{{#!syntax sh
ffmpeg -i input.avi -c:v mpeg4 -b:v 1500k -c:a copy output.avi
}}}
  • 고화질 H.265(HEVC) 변환
    용량을 줄이면서 고화질을 유지하고 싶을 때 사용한다. 인코딩 시간이 오래 걸린다.
    {{{#!syntax sh
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a copy output.mp4
}}}
  • VP9 코덱으로 변환
    {{{#!syntax sh
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 25 -c:a copy output.mp4
}}}
  • AV1 코덱으로 변환 (최신 표준)
    {{{#!syntax sh
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -c:a copy output.mp4
}}}

5.2. 영상 편집

영상의 일부분을 잘라낸다.
  • 특정 구간 추출 (재인코딩 없음)
    00:01:30 지점부터 10초간을 잘라낸다. -ss 옵션을 -i 앞에 두면 탐색 속도가 훨씬 빠르다.
    {{{#!syntax sh
ffmpeg -ss 00:01:30 -i input.mp4 -t 10 -c copy output.mp4
}}}
  • 정확한 구간 자르기 (재인코딩)
    copy를 사용하면 키프레임 단위로 잘리기 때문에 시작 지점이 정확하지 않을 수 있다. 정확한 편집을 위해서는 재인코딩을 해야 한다.
    {{{#!syntax sh
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:00 -c:v libx264 -c:a copy output.mp4
}}}

5.3. 복합 설정 예시

일반 영상을 구형 스마트폰(720p) 등에 맞추어 재인코딩 할 때나 블루레이 원본 영상을 인코딩할 때 사용할 수 있는 종합적인 옵션 설정 예시이다.
#!syntax powershell
ffmpeg -i filename.mp4 -sn -c:v libx264 -preset medium -crf 23 -tune animation -sws_flags lanczos -filter:v "scale=-1:720" -c:a aac -b:a 192k -ac 2 outfile.mkv
  • {{{#!wiki style="@code@" dark-style="@codeds@"
-sn}}}: 내장 자막을 인코딩하지 않는다. 자막을 그대로 가져오려면
-c:s copy
를 쓴다.
  • {{{#!wiki style="@code@" dark-style="@codeds@"
-preset medium}}}: 인코딩 속도와 효율의 균형을 잡는다.
slow
,
veryslow
로 갈수록 화질 대비 용량 효율은 좋아지나 속도가 느려진다.
  • {{{#!wiki style="@code@" dark-style="@codeds@"
-crf 23}}}: 화질 기준 인코딩. 낮을수록 고화질이다. 보통 18~28[6]/25~27[7] 사이를 쓴다.[8]
  • {{{#!wiki style="@code@" dark-style="@codeds@"
-tune animation}}}: 애니메이션 영상에 최적화된 설정을 사용한다. 영화나 실사 영상은
film
을 사용한다.
  • {{{#!wiki style="@code@" dark-style="@codeds@"
-sws_flags lanczos}}}: 리사이즈 알고리즘으로 'Lanczos'를 사용한다. 선명도가 좋다.
  • {{{#!wiki style="@code@" dark-style="@codeds@"
-filter:v "scale=-1:720"}}}: 세로 해상도를 720p로 줄이고, 가로는 비율에 맞춰 자동(-1)으로 조절한다.[9]
  • {{{#!wiki style="@code@" dark-style="@codeds@"
-c:a aac -b:a 192k -ac 2}}}: 오디오를 AAC 192kbps 스테레오(2채널)로 인코딩한다.

5.4. 비디오 처리

  • 해상도 변경 (리사이즈)
    가로 해상도를 1280으로 줄이고, 세로는 비율에 맞춰 자동(-1)으로 설정한다.
    {{{#!syntax sh
ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:v libx264 output.mp4
}}}
  • 영상 회전
    {{{#!wiki style="@code@" dark-style="@codeds@"
transpose}}} 필터를 사용한다. (1: 시계방향 90도, 2: 반시계방향 90도)
{{{#!syntax sh
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4
}}}
  • 영상 속도 변경
    비디오 속도를 2배 빠르게 한다. (setpts 계수 = 1/배수)
    {{{#!syntax sh
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
}}}
  • 프레임 추출 (이미지로 저장)
    매 초마다 한 장씩(fps=1) 이미지를 추출하여 저장한다.
    {{{#!syntax sh
ffmpeg -i input.mp4 -vf "fps=1" img_%03d.jpg
}}}
  • 이미지 시퀀스를 영상으로 변환
    img_001.jpg, img_002.jpg... 순서의 이미지들을 30fps 영상으로 합친다.
    {{{#!syntax sh
ffmpeg -framerate 30 -i img_%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
}}}
  • GIF 만들기
    고화질 팔레트를 생성하여 고품질 GIF를 만든다.
    {{{#!syntax sh
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
}}}

5.5. 오디오 처리

  • 오디오 추출 (MP3)
    영상에서 소리만 뽑아낸다.
    {{{#!syntax sh
ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
}}}
  • 오디오 제거 (음소거)
    {{{#!syntax sh
    ffmpeg -i input.mp4 -an -c:v copy output.mp4
}}}
  • 볼륨 조절
    볼륨을 1.5배 키운다.
    {{{#!syntax sh
ffmpeg -i input.mp3 -af "volume=1.5" output.mp3
}}}
  • 오디오 믹싱 (다운믹스)
    5.1채널 오디오를 스테레오(2채널)로 변환한다.
    {{{#!syntax sh
ffmpeg -i input.mkv -ac 2 -c:a aac output.mp4
}}}

5.6. 자막 처리

  • 자막 하드코딩 (Burn-in)
    영상 자체에 자막을 입혀버린다. (자막 파일 필요)
    {{{#!syntax sh
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" -c:v libx264 -c:a copy output.mp4
}}}
  • 자막 파일 추출
    영상 컨테이너 안에 포함된 자막 스트림을 srt 파일로 추출한다.
    {{{#!syntax sh
ffmpeg -i input.mkv -map 0:s:0 subtitle.srt
}}}

5.7. Streamlink 연계

Streamlink에서 추출한 스트림을 파이프(
|
)로 받아 FFmpeg로 실시간 처리하거나 저장할 수 있다.
  • 실시간 스트림을 MP4로 저장
    {{{#!syntax sh
streamlink --stdout twitch.tv/channel best | ffmpeg -i - -c copy output.mp4
}}}
  • 스트림을 HLS(m3u8)로 재송출
    나만의 스트리밍 서버를 구축할 때 사용한다.
    {{{#!syntax sh
streamlink --stdout twitch.tv/channel best | \
ffmpeg -i - -c copy -f hls -hls_time 4 -hls_list_size 5 /var/www/html/stream.m3u8
}}}

5.8. 메타데이터 수정

  • 제목/아티스트 정보 추가
    {{{#!syntax sh
ffmpeg -i input.mp4 -metadata title="나의 영상" -metadata artist="홍길동" -c copy output.mp4
}}}
  • 모든 메타데이터 삭제
    {{{#!syntax sh
ffmpeg -i input.mp4 -map_metadata -1 -c copy output.mp4
}}}

6. 기반 프로그램

FFmpeg(특히
libavcodec
)는 멀티미디어 업계의 표준과도 같아서, 수많은 프로그램이 이를 기반으로 작동한다.

6.1. 동영상 플레이어

macOS, 안드로이드, iOS, Microsoft Windows의 유명 코덱 내장형 플레이어들은 대부분 FFmpeg 기반이다.

6.2. 인코딩 프로그램

파일:관련 문서 아이콘.svg   관련 문서: 동영상 인코더
#!if 문서명2 != null
, [[]]
#!if 문서명3 != null
, [[]]
#!if 문서명4 != null
, [[]]
#!if 문서명5 != null
, [[]]
#!if 문서명6 != null
, [[]]

GUI를 제공하는 대다수의 인코더 프로그램은 내부적으로 FFmpeg를 엔진으로 사용하거나, FFmpeg 라이브러리를 링크하여 사용한다.
  • 샤나인코더: 한국에서 널리 쓰이는 FFmpeg 기반 GUI 인코더.
  • 핸드 브레이크: 세계적으로 유명한 오픈 소스 트랜스코더. MPEG-4와 MPEG-2를 인코딩할 때 FFmpeg를 사용하며 H.264, HEVC, Theora도 지원한다.
  • Staxrip, WinFF, XMedia Recode 등
  • 과거의 다음팟인코더, 곰인코더 등 (서비스 종료)
  • OBS Studio: 방송 송출 및 녹화 시 FFmpeg의 인코더를 사용한다.
  • media human 제작 비디오/오디오 컨버터: 자체 빌드해서 사용하는 것으로 추정.

6.3. 웹 서비스

  • 유튜브, 아프리카TV, 치지직, 니코니코 동화 등 대형 스트리밍 플랫폼에서도 서버 측 트랜스코딩 및 처리에 FFmpeg를 광범위하게 사용한다.
  • 영상 파일을 뜯어보면 알겠지만, Lavf({{{#!wiki style="@code@" dark-style="@codeds@"
libavformat}}})를 사용하고 있으며 영상 인코딩에도
libavcodec
를 사용하고 있다.

7. 논란 및 사건사고

7.1. 국산 플레이어의 GPL 위반 의혹

KMPlayer, 곰플레이어, 팟플레이어 3개 플레이어의 경우 GPL 위반 의혹이 있다. FFmpeg의 GPL 부분을 포함해서 사용하기 때문인데, 이 부분이 많이 쓰이는 코덱과 없어선 안 되는 기능이기 때문에 제외하고 LGPL 부분만 사용하기는 힘들다. 이 때문에 3개 플레이어 전부 FFmpeg을 별다른 생각 없이 내장했다가 GPL 위반 의혹을 사게 되었다.

이 문제가 제기된 이후 대부분의 플레이어가 별다른 대응이 없는 와중에 팟플레이어가 소스를 공개하였다. LGPL 라이선스와 함께 수정된 FFmpeg 소스코드를 다운받을 수 있는 주소를 제공하고(소스코드), 글로벌 버전을 출시하며 기본 설치 패키지에서 FFmpeg를 빼 버렸다. 다만, 설치 완료 화면에서 'Open Codec for PotPlayer'를 체크하면 서버로부터 추가 파일 다운로드 후에 설치가 진행된다.

iOS의 AVPlayer의 경우 소스코드 전체를 공개하고 있다. iOS와 앱스토어 심사의 특성상 LGPL에서 허용하는 라이브러리 다이나믹 링크로 처리할 방법이 없기 때문에 아예 소스코드 전체를 공개한 듯하다.[10] 이 때문에 앱스토어에서 "무인코딩"으로 검색하면 AVPlayer 이외에도 다른 국산 플레이어가 여러 개 튀어나온다. 물론 소스코드 공개 이런 거 없다.

상기 프로그램은 그나마 유명세를 타고 개발자들 사이에서 논란이 한 번 됐기에 회자되고 있을 뿐, Google Play의 한국산 앱들 중에서도 FFmpeg를 사용하면서 라이선스를 위반한 것으로 보이는 앱이 수두룩 빽빽하다. 애플 앱스토어는 라이선스 위반으로 앱을 신고하면 앱이 내려가는 사례도 왕왕 있으나, 라이선스 정책뿐만 아니라 온갖 부분에서 정책이 허술한 구글 플레이 쪽은 사실상 그냥 무법지대로 방치되고 있는 중.

상용이든 무료든 내장 코덱을 이용하는 프로그램치고 오픈소스가 아닌 이상 GPL 위반에서 벗어나는 것은 현실적으로는 불가능하다. GPL 라이선스는 프로그램 코드 전부를 원하기 때문이다.
Hall of Shame에 등재되어 있지 않는 프로그램은 GPL 위반이 아니라서가 아니라 대중에게 비교적 덜 알려진 경우에 불과하다. FFmpeg에 포함된 코덱들도 라이선스 이슈에서 완전히 자유로운 것은 아니다. GPL 라이선스는 상업적 목적이 주가 되는 개발자들한테서 점차 기피되고 있다. 물론 그렇다고 GPL을 부정적으로 볼 일은 아니다. GPL이 싫으면 자신이 직접 같은 기능을 하는 코드를 짜면 된다. 남이 만든 걸 금전적인 대가 없이 가져다 쓰면서 아무 책임도 안 지려는 게 이기적인 것이다.

7.2. libav

FFmpeg 안에서 파벌이 갈리고 싸움이 일어났는데[11], 그 결과 의견이 다른 사람들은 따로 나와서 libav라는 새로운 포크를 만들었다.

이후 libav는 거의 독립적인 오픈 소스 프로젝트처럼 움직였지만 FFmpeg은 libav가 오픈 소스라는 점을 이용해 자신들이 개발하는 것에 더해서 libav에서 추가한 기능들을 자신들의 프로그램에 편입시켰다.[12] 때문에 상황 자체만 보면 FFmpeg이 더 치사하지만 사용자 입장에서는 FFmpeg 쪽이 기능은 더 풍부한 편.

우분투 등 몇몇 리눅스 배포판에는 FFmpeg을 설치하면 FFmpeg 대신 avconv, 즉 libav가 설치되는데, 우분투의 upstream인 데비안 리눅스는 보안 대응이나 커밋수의 차이 등을 근거로 FFmpeg으로 다시 회귀했기 때문에 데비안을 기반으로 하는 우분투 등의 리눅스 배포판들도 이 흐름에 따라갈 것으로 보인다.
2015년 8월 1일, FFmpeg의 리더 개발자가 libav를 직접적으로 명시하진 않았지만 불화로 인해 FFmpeg에서 갈라져나온 포크 프로젝트들에게 화해를 공식적으로 제안했다.

이후 2019년 즈음을 기점으로 화해하거나 libav가 와해된 것으로 보인다. 기존의 libav의 웹사이트였던 www.libav.org도 현재는 FFmpeg의 웹사이트로 연결되며, libav 깃 리포 또한 2019년 4월 16일 마지막 커밋을 기점으로 업데이트되지 않더니 없어졌기 때문.[13]

8. 기타

8.1. AAC 인코딩 문제

FFmpeg의 내장 AAC 인코더는 한때 성능이 좋지 않기로 말이 많았다. 때문에 많은 유저들은 고품질의 AAC를 위해 직접 프라운호퍼 인코더(libfdk_aac)를 FFmpeg에 빌드해 쓰던지[14], 아니면 AAC를 포기하고 품질이 그나마 양호한 Opus나 Vorbis[15]로 음성부를 인코딩했다.
2015년 12월 부로 FFmpeg 측에서 내장 AAC 인코더가 대폭 개선되었다고 발표했다. 링크1 링크2 제작자는 libfdk_aac와 비슷하거나 좀 더 우수한 성능을 나타낸다고 했지만 써본 사용자에 의하면 VBR 모드로는 여전히 부족하다고 하지만 CBR 모드로는 썩 괜찮다 카더라 링크. 참고로 FFmpeg 측의 주장대로 내장 aac가 (스테레오 채널) 128kbps 정도에서 음질이 상당한 것은 사실이지만[16] 프라운호퍼 인코더(libfdk_aac)에 비해 인코딩 속도는 다소 느린 편이다. 대신 빌드를 따로 할 필요가 없어 Zeranoe FFmpeg Build 같이 라이선스 문제로 libfdk_aac는 포함되지 않았지만 필요한 것들은 대부분 포함해서 바이너리로 공개하는 것들을 쓰던 사람들의 편리성은 극대화되었다.

8.2. 프라운호퍼 AAC인코더 libfdk_aac 라이브러리 빌드

내장 AAC 인코더가 좋지 않기 때문에 FFmpeg에서 보다 고품질의 AAC 오디오를 사용하려면 파이프라인이라도 쓸 게 아닌 이상 안드로이드 출처의 프라운호퍼 인코더(libfdk_aac)를 사용하는게 최선의 방법이지만 라이선스 문제 때문에 대놓고 FFmpeg에 포함시키지는 못했고, 따라서 사용자가 직접 해당 라이브러리를 FFmpeg에 포함시킨채로 컴파일해야 비로소 프라운호퍼 인코더를 사용할 수 있다.[17] (윈도우용 기준)영문 스크립트이므로 굳이 언어에 제약받지 않아도 된다. 인터넷만 연결되어 있으면 이론상 MSYS2가 지원되는 어떤 윈도우즈 상에서도 사용 가능. 시간만 있으면 공간 넉넉한 외장하드(대략 14기가 정도 먹는다)에 폴더 하나 마련해서 실행시키고 결과물만 시스템에 옮겨버려도 된다. 프라운호퍼 라이브러리 뿐만 아니라 AV1, nvenc 등 가능한 라이브러리는 다 찾아서 컴파일한다. 기본 세팅은 모든 라이브러리를 정적으로 ffmpeg.exe 에 박아넣게 되어 있으니 컴파일된 결과도 간편하게 가지고 다닐 수 있다. 다만 GitHub 소스니 가끔 빌드가 실패하는 경우가 있다.윈도우용깃헙링크/리눅스용깃헙링크[18]
샤나인코더에는 fdk aac가 기본적으로 컴파일되어 있다.
주의사항으로 프라운호퍼 AAC 인코더는 LC의 경우 따로 대역폭 옵션을 지정하지 않으면 고정 비트레이트 옵션에선 아무리 비트레이트를 올려도 17,000Hz 이상의 주파수는 칼같이 날려버린다. 가변 비트레이트 옵션도 역시 대역폭 지정이 없을경우 최고등급인 5는 제한이 없지만 바로 아래 등급인 4에서도 15.5kHz의 제한이 걸린다. 낮은 비트레이트 인코딩에선 이해가 가는 부분이지만 높은 비트레이트에서도 이러는건 아무리 봐도 정신줄을 놓은 것처럼 보인다. 비트레이트를 높여서 인코딩 할 때는 이 부분의 지정이 반드시 필요하다. -cutoff 18000 옵션에서 컷오프 주파수를 지정해주자. 최대값은 20000.[19] 단, 낮은 비트레이트에서 컷오프 주파수를 무리하게 높게 잡으면 잘 들리지도 않는 고주파 부분이 데이터를 다 잡아먹어서 정작 중요한 저주파영역 음질이 골룸해질 수 있으니 잘 판단하자. 자세한 인코딩 옵션은 https://trac.ffmpeg.org/wiki/Encode/AAC에서 확인하자.

9. 관련 문서

10. 외부 링크


[1] 포함해서 빌드할지 여부를 선택할 수 있는 일부 기능과 최적화 코드가 GPL을 따르고 나머지는 LGPL을 따른다.[2] 여러 가지 필터를 넣을 수 있다. libass를 사용해서 자막을 하드코딩할 수도 있고 yadif로 디인터레이싱도 가능하다. ivtc도 가능하다. 자세한 내용은 FFmpeg 필터 문서를 참조.[3] ultrafast나 placebo (이렇게 느려지면 화질 개선이 플라시보 효과 이상의 무언가는 없다라는 수준) 등 극단적인 수준의 옵션은 보통의 상황에서는 쓸 일이 없을 것이며 보통은 medium을 선택하게 된다. preset 옵션은 CRF(퀄리티)나 CQ(퀀타이저) 방식으로 인코딩을 할 때는 용량에 관여를 하며, 비트레이트 지정으로 인코딩을 할 때는 화질에 관여한다. CRF 인코딩 기준 slow의 경우 medium에 비해 인코딩 시간이 50~66% 늘어나지만 용량은 0~4% 정도 줄어든다. veryslow의 경우는 약 4.5배 정도 인코딩 시간이 늘어나며 용량 이득은 12% 정도다. 자세한 비교는 이곳을 참조.[4] 색감과는 관계가 없고 deblock 위주로 옵션을 조정한다. animation 옵션의 경우 deblock 값을 높여서 화면을 좀 더 뭉게준다.[5] 더 다양한 옵션은 FFmpeg 공식 오디오 인코딩 가이드를 참조.[6] 영화, 드라마[7] 애니메이션[8] 화질이 나쁜(깍두기 크리를 맞은) H.262 방식의 HDTV 원본을 재인코딩할 때는 CRF 방식으로 인코딩하면 원본보다 더 크게 인코딩되는 경우가 있으므로 고정 비트레이트 방식으로 인코딩을 하는 게 낫다. 고정 비트레이트 방식으로 인코딩을 하고 싶다면 -crf 23 대신에 -b:v(-vb를 쓸 수도 있음) 2000k 이렇게 지정하면 된다. 참고로 MPEG2(H.262)를 H.264로 재인코딩한다면 비트레이트는 MPEG2(H.262) 원본의 절반 정도가 적절하다.[9] 자동으로 리사이즈하는 경우에는 1280:718 이런 식으로 이상한 사이즈가 나올 수 있으니 꼭 수동으로 지정해주는 것이 좋다.[10] 사실 이것도 KLDP에서 한차례 논란이 된 끝에 이렇게 된 것.[11] 관련한 내용은 해당 레딧 게시글 참조.[12] 무조건 FFmpeg를 욕할 수만은 없는 것이, 애초에 오픈 소스라는 것이 코드와 기능의 공유를 권장하기 위해 만들어진 개념이기 때문이다.[13] 깃헙 미러, 깃랩 미러[14] macOS를 쓰는 경우도 종종 있었다. macOS는 CoreAudio를 통해 기본적으로 Apple AAC 인코더(aac_at)를 사용할 수 있다보니 FFmpeg 맥 버전 역시 이걸 사용 가능하도록 만들어져 최고 품질의 AAC 오디오를 얻을 수 있기 때문이다. 다만 FFmpeg는 라이센스 문제를 신경쓰는 편이라 윈도우 버전에서는 기능을 비활성화시켜놨다.[15] -c:a libvorbis -ac 2 -aq 4(128kbps) 이런 식으로 인코딩할 수 있다. 다만 Vorbis를 사용하는 유저들은 일반적인 기기에서 떨어지는 호환성때문에 고통받는 경우가 많았다. 실제로 상업용 장비에서 이런 일이 좀 있었는데, 올레 스카이라이프 TV의 USB 파일 재생에서 Vorbis 지원을 안 한다. 덤으로 이런 장비의 경우 smi 자막을 지원 안해서 srt로 변환해야 하는 경우가 상당히 많다.[16] 다만 여전히 동일 비트레이트 대비 치찰음(노이즈)이 여전히 FAAC보다 심하다는 보고도 있다.[17] DLL도 제공하는 건지 일부 FFmpeg 계열 인코더에 이걸 DLL로 포함한 경우가 있다.[18] 데비안/우분투에서는 잘 작동하는데 다른 배포판에서는 살짝 마사지를 해 줘야 한다.[19] Lame MP3 encoder의 경우 최신버전에선 320kbps에서 주파수 컷오프가 거의 없다. 20,000Hz 까지 포함된다.[20] 오픈소스 미디어 시스템인 Jellyfin의 하위 프로젝트로, 실질적으로 많이 활용되는 하드웨어 가속이나 libfdk 등을 포함하고 수정사항을 안정적이라고 알려진 버전에 백포트하여 빌드한 것이다. 이것저것 알아보면서 빌드하는게 아무래도 귀찮거나 어려운 경우 적당히 쓸 수 있다.