2 분 소요

FFmpeg

FFmpeg은 영상과 음성 파일을 변환, 복사, 인코딩, 추출할 때 가장 자주 쓰는 명령줄 도구 중 하나다. 포맷 변환뿐 아니라 스트림 복사, 자막 처리, 리사이즈, m3u8 다운로드 등 응용 범위가 넓어서 한번 익혀두면 오래 쓸 수 있다.

이 글에서는 설치 방법과 함께, 실무에서 자주 다시 찾는 변환 예시를 위주로 정리한다.

FFmpeg이 유용한 상황

  • mkv, wmv, ts, avi, mpg, vob 등을 mp4로 바꾸고 싶을 때
  • 다시 인코딩 없이 컨테이너만 바꾸고 싶을 때
  • 스트리밍 파일(m3u8)을 저장하고 싶을 때
  • 비디오/오디오 코덱을 분리해서 다루고 싶을 때
  • 필터를 써서 해상도나 속도를 조정하고 싶을 때

설치

Windows

  1. ffmpeg 다운로드
  2. 압축 해제 후 예를 들어 C:\Program Files\ffmpeg\ 위치로 옮긴다.
  3. 시스템 환경변수 PathC:\Program Files\ffmpeg\bin 추가
  4. 명령 프롬프트에서 ffmpeg -version 실행

macOS

Homebrew가 있다면 가장 간단하다.

brew install ffmpeg

설치 후 확인:

ffmpeg -version

자주 보는 옵션

FFmpeg 명령이 길어 보이는 이유는 옵션이 많아서 그렇지, 자주 쓰는 옵션은 반복된다.

  • -i : 입력 파일 지정
  • -vcodec 또는 -c:v : 비디오 코덱 지정
  • -acodec 또는 -c:a : 오디오 코덱 지정
  • -vf : 비디오 필터 적용
  • -af : 오디오 필터 적용
  • -b:v : 비디오 비트레이트 지정
  • -b:a : 오디오 비트레이트 지정
  • -f : 출력 포맷 지정

알아두면 좋은 포인트

  • -c copy재인코딩 없이 스트림만 복사하는 방식이라 빠르다.
  • 특정 포맷 조합에서는 단순 복사만으로 안 되고 재인코딩이 필요할 수 있다.
  • 컨테이너(mp4, mkv)와 코덱(h264, aac)은 다른 개념이다.

자주 쓰는 변환 예시

mkv -> mp4

ffmpeg -i source.mkv -c copy dest.mp4

재인코딩 없이 컨테이너만 바꾸는 방식이라 빠르다. 다만 원본 코덱이 mp4 컨테이너와 잘 맞지 않으면 실패할 수 있다.

wmv -> mp4

ffmpeg -i source.wmv -c:v libx264 -crf 23 -c:a aac -q:a 100 dest.mp4

이 경우는 재인코딩이 들어간다. 호환성 높은 mp4(h264+aac)로 바꾸는 전형적인 예다.

ts -> mp4

ffmpeg -i source.ts -acodec copy -vcodec copy -f mp4 dest.mp4

스트림 복사 방식이라 빠르다. 방송/캡처 파일 정리할 때 자주 쓴다.

avi -> mp4

ffmpeg -i source.avi -bsf:a aac_adtstoasc -c copy dest.mp4

mpg -> mp4

ffmpeg -i source.mpg -acodec copy -vcodec copy -f mp4 dest.mp4

VOB -> mp4

DVD 쪼개진 VOB 파일을 이어서 변환할 때는 concat 입력 형식을 쓸 수 있다.

ffmpeg -i "concat:VTS_01.VOB|VTS_02.VOB|VTS_03.VOB" dest.mp4

원격 m3u8 다운로드

ffmpeg -i https://domain.com/source.m3u8 -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 dest.mp4

로컬 m3u8 다운로드

ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i source.m3u8 -c copy -bsf:a aac_adtstoasc dest.mp4

언제 -c copy를 쓰고, 언제 재인코딩해야 하나

-c copy가 좋은 경우

  • 원본 코덱을 유지해도 되는 경우
  • 빠르게 컨테이너만 바꾸고 싶은 경우
  • 품질 손실 없이 처리하고 싶은 경우

재인코딩이 필요한 경우

  • 최종 호환성을 높여야 할 때
  • 원본 코덱이 대상 컨테이너와 맞지 않을 때
  • 용량/품질을 다시 조절하고 싶을 때
  • 해상도/필터/자막 처리를 같이 해야 할 때

자주 막히는 문제

소리는 나오는데 영상이 안 나오거나 그 반대

컨테이너는 바뀌었지만 코덱 호환성이 안 맞는 경우일 수 있다. 이럴 때는 -c copy 대신 libx264, aac 등으로 재인코딩하는 쪽이 안전하다.

m3u8 다운로드가 안 된다

로컬 플레이리스트인지, 원격 URL인지에 따라 protocol_whitelist 같은 옵션이 필요할 수 있다. 암호화 여부나 세그먼트 접근 권한 문제도 체크해야 한다.

결과 파일 용량이 너무 크다

재인코딩 시 -crf, 비트레이트, 해상도 옵션을 다시 조정해야 한다.

추천 사용 흐름

처음에는 아래 기준으로 판단하면 편하다.

  1. 먼저 -c copy로 해결 가능한지 본다.
  2. 안 되면 libx264 + aac 재인코딩으로 간다.
  3. 스트리밍/특수 입력이면 필요한 추가 옵션을 붙인다.

마무리

FFmpeg은 옵션이 많아서 처음엔 복잡해 보이지만, 자주 쓰는 패턴은 반복된다. 실무에서 많이 다시 찾는 건 보통 아래 두 가지다.

  • 빠른 컨테이너 변환-c copy
  • 호환성 높은 mp4 재인코딩-c:v libx264 -c:a aac

이 두 흐름만 익혀도 대부분의 기본 영상 변환 작업은 꽤 빠르게 처리할 수 있다.

댓글남기기