작성일 댓글 남기기

FFmpeg 명령어 실전 가이드 – 동영상 변환·압축·편집 무료 해결법

FFmpeg 동영상 처리 명령줄 도구 일러스트

동영상 편집, 꼭 비싼 프로그램이 필요할까?

스마트폰으로 찍은 4K 영상이 5GB를 넘기거나, 유튜브에 올리려는데 포맷이 안 맞거나, 회의 녹화 파일에서 특정 구간만 잘라내고 싶을 때가 있습니다. 이럴 때 어도비 프리미어를 설치하자니 월 구독료가 부담스럽고, 무료 편집기는 기능이 아쉽습니다.

그런데 전 세계 영상 업계에서 가장 많이 쓰이면서도 완전히 무료인 도구가 있습니다. 바로 FFmpeg입니다. 유튜브, 넷플릭스, VLC 미디어 플레이어 등 우리가 매일 쓰는 서비스의 내부에서 FFmpeg가 묵묵히 동영상을 처리하고 있습니다. 명령어 한 줄이면 동영상 포맷 변환, 용량 압축, 구간 자르기, 자막 합치기, GIF 생성까지 해결됩니다.

이 글에서는 FFmpeg를 처음 접하는 분도 바로 따라 할 수 있도록, 설치부터 실무에서 가장 많이 쓰는 명령어 패턴까지 단계별로 정리합니다. 한 번 익혀두면 앞으로 동영상 관련 작업에서 유료 소프트웨어가 거의 필요 없어집니다.

FFmpeg 핵심 기능 5가지 요약 인포그래픽

FFmpeg란 무엇이고 왜 알아야 하는가

FFmpeg는 2000년에 처음 공개된 오픈소스 멀티미디어 프레임워크입니다. 거의 모든 동영상·오디오 포맷을 읽고, 변환하고, 편집할 수 있는 명령줄(CLI) 도구입니다. GUI가 없어서 처음엔 낯설 수 있지만, 오히려 그 덕분에 자동화가 쉽고 처리 속도가 빠릅니다.

FFmpeg를 알아야 하는 이유

  • 완전 무료·오픈소스: 개인·상업 용도 모두 무료입니다. 워터마크나 기능 제한이 없습니다.
  • 거의 모든 포맷 지원: MP4, MKV, AVI, MOV, WebM, MP3, AAC, FLAC 등 수백 가지 포맷을 하나의 도구로 처리합니다.
  • 배치 자동화 가능: 폴더 안의 영상 100개를 한 번에 변환하는 스크립트를 10줄 이내로 작성할 수 있습니다.
  • 업계 표준: 유튜브, 넷플릭스, 카카오, 네이버 등 대형 서비스의 영상 파이프라인에서 FFmpeg가 핵심 엔진으로 동작합니다.
  • 크로스 플랫폼: Windows, macOS, Linux 모두 지원합니다.

정리하면, FFmpeg는 “동영상 세계의 스위스 아미 나이프”입니다. 개발자뿐 아니라 영상을 다루는 모든 사람에게 필수 도구라 할 수 있습니다.

운영체제별 FFmpeg 설치 방법

FFmpeg 설치는 생각보다 간단합니다. 각 운영체제별 가장 빠른 방법을 소개합니다.

Windows 설치

Windows에서는 두 가지 방법이 있습니다. 패키지 관리자를 이미 쓰고 있다면 첫 번째, 아니라면 두 번째 방법을 추천합니다.

방법 1: winget 사용 (권장)

Windows 터미널(또는 PowerShell)을 열고 아래 명령어를 입력합니다.

winget install Gyan.FFmpeg

설치가 끝나면 새 터미널 창을 열어서 ffmpeg -version을 입력해 버전이 출력되면 성공입니다.

방법 2: 수동 설치

gyan.dev 공식 빌드 페이지에서 “release full” ZIP 파일을 다운로드한 뒤, 원하는 폴더(예: C:\ffmpeg)에 압축을 풀고, 시스템 환경변수 PATH에 C:\ffmpeg\bin을 추가합니다.

macOS 설치

Homebrew가 설치되어 있다면 한 줄이면 끝납니다.

brew install ffmpeg

Linux (Ubuntu/Debian) 설치

sudo apt update && sudo apt install ffmpeg -y

설치 확인

어느 운영체제든 설치 후 아래 명령어로 정상 작동을 확인합니다.

ffmpeg -version

버전 정보와 함께 지원 코덱 목록이 출력되면 준비 완료입니다.

FFmpeg 명령어 처리 흐름 다이어그램

FFmpeg 기본 문법 이해하기

FFmpeg 명령어의 기본 구조를 먼저 이해하면, 이후 어떤 작업이든 응용이 쉬워집니다.

명령어 기본 구조

ffmpeg -i 입력파일 [옵션] 출력파일

이것이 FFmpeg의 핵심 뼈대입니다. -i는 “input”의 약자로 입력 파일을 지정합니다. 옵션으로 코덱, 해상도, 비트레이트 등을 조절하고, 마지막에 출력 파일명을 적으면 됩니다.

자주 쓰는 핵심 옵션 정리

  • -i : 입력 파일 경로
  • -c:v : 비디오 코덱 지정 (예: libx264, libx265, copy)
  • -c:a : 오디오 코덱 지정 (예: aac, libmp3lame, copy)
  • -b:v : 비디오 비트레이트 (예: 2M = 2Mbps)
  • -b:a : 오디오 비트레이트 (예: 128k)
  • -r : 프레임레이트 (예: 30)
  • -s : 해상도 (예: 1920×1080)
  • -ss : 시작 시간 (예: 00:01:30)
  • -t : 지속 시간 (예: 00:00:30 = 30초)
  • -to : 종료 시간 (예: 00:02:00)
  • -vf : 비디오 필터 (예: scale=1280:720)
  • -af : 오디오 필터 (예: volume=1.5)
  • -y : 출력 파일이 이미 있으면 덮어쓰기
  • -n : 출력 파일이 이미 있으면 건너뛰기

이 옵션들의 조합만으로 아래에서 다룰 거의 모든 작업이 가능합니다. 특히 -c:v copy -c:a copy 조합은 “코덱을 변환하지 않고 그대로 복사”라는 뜻으로, 재인코딩 없이 빠르게 컨테이너만 바꿀 때 자주 씁니다.

실전 활용 1: 동영상 포맷 변환

가장 기본이면서 가장 많이 쓰는 작업입니다. 카메라마다 다른 포맷(MOV, AVI, MKV 등)으로 촬영된 영상을 범용 포맷인 MP4로 통일하는 경우가 대표적입니다.

MOV → MP4 변환

ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4

아이폰으로 촬영한 MOV 파일을 H.264 코덱의 MP4로 변환합니다. 대부분의 플랫폼과 기기에서 재생 가능한 가장 호환성 높은 조합입니다.

MKV → MP4 (코덱 유지, 컨테이너만 변경)

ffmpeg -i input.mkv -c copy output.mp4

-c copy는 비디오와 오디오 코덱을 재인코딩하지 않고 그대로 복사합니다. 화질 손실이 전혀 없고, 처리 시간도 수 초면 끝납니다. MKV와 MP4 모두 H.264를 담을 수 있기 때문에 이 방법이 가능합니다.

MP4 → WebM (웹 최적화)

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1M -c:a libopus output.webm

웹사이트에 영상을 임베드할 때 WebM 포맷이 유리합니다. VP9 코덱과 Opus 오디오 조합은 같은 화질에서 MP4보다 파일 크기가 20~30% 작습니다.

동영상에서 오디오만 추출

ffmpeg -i video.mp4 -vn -c:a libmp3lame -b:a 192k audio.mp3

-vn은 비디오 스트림을 제거(no video)하라는 뜻입니다. 유튜브 강의를 다운받아 출퇴근 중 오디오로만 듣고 싶을 때, 회의 녹화에서 음성만 추출할 때 유용합니다.

실전 활용 2: 동영상 용량 압축

스마트폰 4K 영상은 1분에 300~500MB에 달합니다. SNS에 올리거나 메신저로 전송하려면 용량을 줄여야 합니다. FFmpeg는 세밀한 압축 제어가 가능합니다.

FFmpeg CRF 값별 화질과 용량 비교표

CRF 방식: 화질 기준 압축 (가장 추천)

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

CRF(Constant Rate Factor)는 “이 정도 화질을 유지해줘”라고 FFmpeg에 알려주는 방식입니다. 값 범위는 0~51이며, 숫자가 낮을수록 고화질(큰 파일), 높을수록 저화질(작은 파일)입니다.

  • CRF 18: 거의 무손실, 원본에 가까운 화질
  • CRF 23: 기본값, 화질과 용량의 균형 (대부분의 경우 충분)
  • CRF 28: 눈에 띄는 화질 저하가 시작되지만 용량이 크게 줄어듦
  • CRF 32 이상: SNS·메신저 전송용으로 적합한 수준

-preset은 인코딩 속도를 조절합니다. ultrafast부터 veryslow까지 있으며, 느린 프리셋일수록 같은 CRF에서 파일 크기가 더 작아집니다. 일반적으로 medium이 속도와 효율의 좋은 타협점입니다.

H.265(HEVC)로 더 강력한 압축

ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output_h265.mp4

H.265는 H.264 대비 같은 화질에서 파일 크기를 40~50% 줄일 수 있는 차세대 코덱입니다. 단, 인코딩 시간이 더 오래 걸리고 구형 기기에서 재생이 안 될 수 있으므로, 저장 보관용이나 본인만 볼 영상에 적합합니다.

해상도 낮추기로 추가 용량 절약

ffmpeg -i input_4k.mp4 -vf scale=1920:1080 -c:v libx264 -crf 23 -c:a aac output_1080p.mp4

4K(3840×2160)를 Full HD(1920×1080)로 줄이면 그것만으로 용량이 절반 이하로 떨어집니다. 모바일에서 볼 영상이라면 720p(scale=1280:720)로 더 줄여도 체감 차이가 크지 않습니다.

비트레이트 직접 지정

ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -c:a aac -b:a 96k output.mp4

출력 파일의 대략적인 크기를 미리 계산하고 싶을 때 비트레이트를 직접 지정합니다. 비디오 1Mbps + 오디오 96kbps면 1분 영상이 약 8MB가 됩니다. 카카오톡이나 텔레그램 전송 제한에 맞출 때 편리합니다.

실전 활용 3: 동영상 자르기·합치기·편집

간단한 편집 작업에 굳이 프리미어나 다빈치 리졸브를 열 필요 없습니다. FFmpeg 명령어 한 줄이면 됩니다.

특정 구간 자르기 (트리밍)

ffmpeg -ss 00:01:30 -i input.mp4 -to 00:03:00 -c copy trimmed.mp4

1분 30초부터 3분 00초까지의 구간만 추출합니다. -ss-i 앞에 놓으면 해당 시점까지 빠르게 탐색(seek)하므로 처리가 훨씬 빠릅니다. -c copy를 사용했으므로 재인코딩 없이 즉시 완료됩니다.

주의할 점이 있습니다. -c copy로 자를 때는 키프레임 단위로만 정확한 컷이 가능합니다. 프레임 단위로 정확한 자르기가 필요하면 -c copy 대신 재인코딩 옵션을 사용해야 합니다.

ffmpeg -ss 00:01:30 -i input.mp4 -to 00:03:00 -c:v libx264 -c:a aac trimmed_exact.mp4

여러 영상 이어붙이기 (합치기)

먼저 합칠 파일 목록을 텍스트 파일로 만듭니다.

file 'part1.mp4'
file 'part2.mp4'
file 'part3.mp4'

이 파일을 filelist.txt로 저장한 뒤 아래 명령어를 실행합니다.

ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged.mp4

같은 코덱·해상도·프레임레이트의 영상이라면 -c copy로 재인코딩 없이 빠르게 합쳐집니다. 사양이 다른 영상을 합칠 때는 먼저 동일 포맷으로 통일한 뒤 합치는 것이 안전합니다.

영상 속도 조절

# 2배속 (타임랩스 느낌)
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" fast.mp4

# 0.5배속 (슬로모션)
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" slow.mp4

setpts 필터로 비디오 속도를, atempo 필터로 오디오 속도를 조절합니다. atempo의 범위는 0.5~2.0이므로, 4배속이 필요하면 atempo=2.0,atempo=2.0처럼 체이닝합니다.

영상 회전

# 시계 방향 90도 회전
ffmpeg -i input.mp4 -vf "transpose=1" rotated.mp4

# 180도 회전
ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" rotated180.mp4

transpose 필터 값은 0(반시계 90°+상하반전), 1(시계 90°), 2(반시계 90°), 3(시계 90°+상하반전)입니다. 스마트폰을 세로로 찍은 영상을 가로로 바꿀 때 유용합니다.

실전 활용 4: GIF 생성과 썸네일 추출

블로그나 SNS에 올릴 짧은 GIF를 만들거나, 영상에서 대표 이미지를 추출하는 작업도 FFmpeg의 영역입니다.

FFmpeg 고화질 GIF 생성 2단계 프로세스

동영상을 고화질 GIF로 변환

# 1단계: 팔레트 생성 (색상 최적화)
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,palettegen" palette.png

# 2단계: 팔레트를 적용한 GIF 생성
ffmpeg -i input.mp4 -i palette.png -lavfi "fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

GIF는 최대 256색만 표현 가능하기 때문에, 팔레트를 먼저 추출하고 이를 적용하면 단순 변환보다 훨씬 깨끗한 결과물을 얻습니다. fps=15는 초당 15프레임, scale=480:-1은 가로 480px에 세로는 비율 자동 계산이라는 뜻입니다.

특정 시점의 썸네일 추출

# 10초 지점에서 한 장 추출
ffmpeg -ss 00:00:10 -i input.mp4 -frames:v 1 thumbnail.jpg

# 매 분마다 한 장씩 추출
ffmpeg -i input.mp4 -vf "fps=1/60" thumb_%03d.jpg

블로그 포스팅이나 유튜브 썸네일 후보를 고를 때, 특정 장면의 스크린샷이 필요할 때 쓰면 됩니다. fps=1/60은 60초에 1프레임이라는 뜻이므로, 1분마다 한 장씩 이미지가 생성됩니다.

동영상을 연속 이미지 시퀀스로 분해

ffmpeg -i input.mp4 -r 1 frames/frame_%04d.png

-r 1은 초당 1프레임 추출입니다. 10분짜리 영상이면 600장의 PNG가 생깁니다. AI 학습용 데이터셋을 만들거나, 스톱모션 느낌의 편집을 할 때 활용합니다.

실전 활용 5: 자막·워터마크·오버레이

영상 위에 자막을 입히거나 로고를 넣는 것도 FFmpeg로 해결됩니다.

SRT 자막 파일 삽입 (소프트 자막)

ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4

소프트 자막은 플레이어에서 켜고 끌 수 있는 자막입니다. 재인코딩이 필요 없으므로 빠릅니다.

자막을 영상에 직접 굽기 (하드 자막)

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontSize=24,PrimaryColour=&H00FFFFFF&'" -c:v libx264 -crf 23 -c:a copy output.mp4

하드 자막은 영상 자체에 텍스트가 렌더링됩니다. 인스타그램 릴스처럼 자막 토글이 안 되는 플랫폼에서 필수입니다. force_style로 폰트 크기와 색상을 조절할 수 있습니다.

이미지 워터마크(로고) 삽입

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" -c:v libx264 -crf 23 -c:a copy output.mp4

overlay=W-w-10:H-h-10은 영상 우하단에서 10px 안쪽에 로고를 배치하라는 뜻입니다. WH는 영상의 너비·높이, wh는 로고의 너비·높이입니다. 좌상단에 넣으려면 overlay=10:10으로 변경합니다.

실전 활용 6: 배치 처리와 자동화 스크립트

FFmpeg의 진정한 힘은 자동화에 있습니다. 폴더 안의 영상 수십 개를 한 번에 처리하는 스크립트를 만들어봅시다.

폴더 내 모든 MKV를 MP4로 일괄 변환 (bash)

for f in *.mkv; do
  ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac "${f%.mkv}.mp4"
done

폴더 내 모든 영상을 720p로 일괄 압축 (bash)

mkdir -p compressed
for f in *.mp4; do
  ffmpeg -i "$f" -vf scale=1280:720 -c:v libx264 -crf 26 -c:a aac -b:a 96k "compressed/$f"
done

Windows PowerShell에서 일괄 처리

Get-ChildItem *.mkv | ForEach-Object {
  ffmpeg -i $_.FullName -c:v libx264 -crf 23 -c:a aac ($_.BaseName + ".mp4")
}

이런 스크립트를 .sh 또는 .ps1 파일로 저장해두면, 드론 촬영 영상 정리, 강의 녹화 일괄 압축, 감시카메라 영상 아카이빙 등 반복 작업을 완전 자동화할 수 있습니다.

자주 만나는 문제와 해결법

FFmpeg를 쓰다 보면 반복적으로 만나는 에러와 상황이 있습니다. 미리 알아두면 당황하지 않습니다.

“Avi duration is too long” 또는 “moov atom not found”

영상 파일이 불완전하게 저장되었을 때 나타납니다. 녹화 중 프로그램이 비정상 종료된 경우가 대부분입니다.

ffmpeg -i broken.mp4 -c copy -movflags faststart fixed.mp4

-movflags faststart는 moov atom을 파일 앞쪽으로 이동시켜 웹 스트리밍에도 유리하게 만듭니다.

“Avi codec not currently supported” 또는 코덱 관련 에러

FFmpeg 빌드에 해당 코덱이 포함되지 않은 경우입니다. ffmpeg -codecs로 지원 코덱을 확인하고, 필요하면 풀 빌드 버전을 설치합니다.

출력 영상이 초록색으로 깨지는 현상

하드웨어 가속 인코딩 시 GPU 드라이버 호환성 문제로 발생합니다. -hwaccel 옵션을 제거하고 소프트웨어 인코딩으로 전환하면 해결됩니다.

영상과 소리가 싱크가 안 맞을 때

ffmpeg -i input.mp4 -itsoffset 0.5 -i input.mp4 -map 1:v -map 0:a -c copy synced.mp4

-itsoffset으로 비디오 또는 오디오의 시작 시점을 미세 조정합니다. 양수면 해당 스트림이 늦게, 음수면 빨리 시작됩니다.

인코딩 속도가 너무 느릴 때: 하드웨어 가속 활용

CPU 인코딩이 느리다면 GPU를 활용할 수 있습니다.

# NVIDIA GPU (NVENC)
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p4 -crf 23 -c:a aac output.mp4

# Intel Quick Sync
ffmpeg -i input.mp4 -c:v h264_qsv -global_quality 23 -c:a aac output.mp4

# AMD AMF
ffmpeg -i input.mp4 -c:v h264_amf -quality balanced -c:a aac output.mp4

하드웨어 가속은 인코딩 속도를 3~10배 높여줍니다. 다만 같은 비트레이트에서 소프트웨어 인코딩(libx264)보다 화질이 약간 떨어질 수 있으므로, 속도와 화질 중 상황에 맞게 선택합니다.

알아두면 유용한 고급 팁

영상 정보 상세 확인

ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

FFmpeg와 함께 설치되는 ffprobe는 영상 파일의 메타데이터를 상세하게 보여줍니다. 코덱, 해상도, 비트레이트, 프레임레이트, 오디오 샘플레이트 등을 한눈에 확인할 수 있어 변환 전 원본 사양을 파악하는 데 필수입니다.

웹 스트리밍 최적화 (faststart)

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -movflags +faststart -c:a aac output.mp4

-movflags +faststart는 MP4 파일의 메타데이터(moov atom)를 파일 앞쪽에 배치합니다. 웹에서 영상이 다운로드 완료 전에 바로 재생을 시작할 수 있게 해줍니다. 블로그나 웹사이트에 영상을 올릴 때 반드시 넣어야 할 옵션입니다.

무음 구간 자동 감지

ffmpeg -i input.mp4 -af silencedetect=noise=-30dB:d=2 -f null -

2초 이상 지속되는 -30dB 이하의 무음 구간을 자동으로 찾아줍니다. 팟캐스트 편집이나 강의 영상에서 불필요한 침묵 구간을 파악할 때 유용합니다.

화면 녹화 (데스크톱 캡처)

# Windows (GDI 캡처)
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -crf 20 screen.mp4

# macOS
ffmpeg -f avfoundation -framerate 30 -i "1:" -c:v libx264 -crf 20 screen.mp4

별도의 화면 녹화 프로그램 없이도 FFmpeg만으로 데스크톱을 녹화할 수 있습니다. 간단한 튜토리얼 영상이나 버그 재현 영상을 찍을 때 가볍게 활용할 수 있습니다.

마무리: FFmpeg, 한 번 배우면 평생 쓰는 도구

FFmpeg는 처음 접할 때 명령어가 길고 복잡해 보이지만, 기본 구조(ffmpeg -i 입력 [옵션] 출력)만 기억하면 나머지는 옵션을 조합하는 것뿐입니다. 이 글에서 다룬 명령어만 즐겨찾기 해두어도 일상에서 만나는 동영상 작업의 90%는 해결됩니다.

특히 자동화 스크립트와 결합하면 진가가 드러납니다. 매주 쌓이는 드론 영상을 자동으로 압축하거나, 강의 녹화를 자동으로 포맷 변환하거나, 블로그용 GIF를 한 번에 생성하는 파이프라인을 만들 수 있습니다. 처음에는 이 글의 예제를 그대로 복사해서 써보고, 점차 자신만의 프리셋 명령어를 메모장에 쌓아가는 것을 추천합니다.

유료 소프트웨어 구독료를 아끼면서 더 빠르고 정확한 결과를 얻을 수 있는 FFmpeg, 오늘부터 터미널을 열고 한 줄씩 시작해보세요.

이미지는 Leonardo AI 로 생성되었습니다.

이미지는 Claude AI 로 생성되었습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다