Choose a default theme

You can change your theme from the menu

FFmpeg

Earlier revision · 1View current content

FFmpeg는 영상·음성·이미지의 읽기, 변환과 출력을 다루는 도구 및 라이브러리 모음이다. 명령줄 프로그램 ffmpeg는 입력 파일에서 스트림을 선택하고 디코딩·필터·인코딩·컨테이너 기록을 조합한다. 파일 확장자, 컨테이너와 코덱은 서로 다른 개념이다.

변환과 스트림 복사

화면 크기나 소리를 바꾸려면 보통 디코딩한 뒤 다시 인코딩해야 한다. 반대로 코덱을 바꾸지 않고 컨테이너만 옮기는 작업은 조건이 맞을 때 스트림 복사를 사용할 수 있다. 복사는 빠르고 재압축 손실을 피할 수 있지만, 출력 컨테이너가 원본 스트림을 지원해야 하고 영상 필터를 동시에 적용하는 방식과는 다르다.

장점은 다양한 형식을 하나의 명령 체계로 처리하고 반복 작업을 자동화하기 쉽다는 것이다. 서버에서 썸네일·미리보기·형식 변환 파이프라인을 구성할 때 유용하다. 한계는 옵션의 순서와 스트림 선택이 복잡하고, 같은 이름의 FFmpeg라도 빌드에 포함된 코덱·필터가 다를 수 있다는 점이다. 인코딩은 CPU·메모리·시간 비용도 크다.

낭독 영상의 작은 미리보기

libx264 인코더와 scale 필터가 포함된 FFmpeg, 가상의 book-reading.mp4 파일이 준비되어 있다고 가정한다. 입력은 가로 960픽셀 이상인 일반 SDR 영상이다. 아래 명령은 첫 영상 스트림만 골라 가로 960으로 줄이고 음성을 제외한 새 파일을 만든다.

ffmpeg -n -i book-reading.mp4 -map 0:v:0 \
-vf "scale=960:-2" -c:v libx264 -crf 24 -preset medium \
-pix_fmt yuv420p -an reading-preview.mp4

가로는 960이 되고 세로는 비율을 유지하면서 2로 나누어떨어지도록 계산된다. -an은 음성을 제외하고 -n은 같은 이름의 출력이 있으면 덮어쓰지 않게 한다. 입력이 더 작으면 이 명령은 확대하므로 실제 서비스에서는 확대 허용 여부를 먼저 정해야 한다.

CRF는 이 인코더의 품질·용량 조절 값이며 결과 파일 크기를 정확히 지정하는 값이 아니다. 입력의 움직임과 질감에 따라 용량이 달라진다. preset은 같은 작업에 투입하는 계산량과 압축 효율의 절충에 영향을 주며, 다른 인코더의 품질 숫자와 직접 비교하면 안 된다.

결과를 해석하고 운영하기

출력 파일이 생겼다는 사실만으로 회전·색상·자막·음성이 의도대로 처리됐다고 판단하지 않는다. 미디어 정보 검사와 실제 재생을 함께 확인하고 원본은 보존한다. HDR·투명 이미지·여러 음성 트랙은 별도 정책이 필요하므로 위 SDR 단일 영상 예제를 그대로 적용하지 않는다.

서버에서는 동시에 실행할 변환 수와 시간·입력 크기를 제한하고, 사용자가 준 파일명을 셸 문자열에 그대로 붙이지 않는다. 실행 프로그램의 인자 배열로 전달하면 셸 해석으로 생기는 문제를 줄일 수 있다. 필요한 코덱과 라이선스 조건은 배포할 실제 빌드를 기준으로 확인한다.

참고 자료