피드로 돌아가기
Meta EngineeringMeta Engineering
Infrastructure

FFmpeg at Meta: Media Processing at Scale

Meta가 FFmpeg 내부 포크를 폐기하고 업스트림 버전으로 통합하기 위해 멀티레인 인코딩과 실시간 품질 메트릭 기능을 FFmpeg 6.0~8.0에 기여

2026년 3월 2일10intermediate

Context

Meta는 일일 10억 건 이상의 비디오 업로드를 처리하면서 FFmpeg 내부 포크에 의존해왔다. 내부 포크는 멀티레인 병렬 인코딩과 실시간 품질 메트릭 계산 같은 필수 기능을 제공했지만, 시간이 지나면서 업스트림 FFmpeg와의 차이가 커져 리베이싱 리스크와 새로운 코덱·포맷 지원 지연이 발생했다.

Technical Solution

  • 멀티레인 병렬 인코딩 아키텍처: 단일 FFmpeg 명령어 내에서 여러 인코더 인스턴스가 동일 프레임을 병렬 처리하도록 구현 (FFmpeg 6.0~8.0에 반영)
  • 실시간 품질 메트릭 계산: 각 출력 레인마다 비디오 디코더를 삽입하여 압축 전후 프레임을 비교 가능하도록 아키텍처 변경
  • 업스트림 FFmpeg에 패치 기여: FFlabs, VideoLAN 개발자와 협력하여 내부 포크의 핵심 기능을 공식 버전에 통합
  • Meta Scalable Video Processor(MSVP) ASIC 지원: 표준화된 하드웨어 API를 통해 커스텀 ASIC을 FFmpeg에 통합하되, 하드웨어 테스트 접근성 문제로 인해 MSVP 패치는 내부 유지
  • 내부 포크 완전 폐기: 멀티레인 인코딩과 실시간 품질 메트릭이 업스트림에 추가되면서 VOD 및 라이브스트리밍 파이프라인에서 내부 포크 의존성 제거

Impact

아티클에서 명시된 정량적 수치가 없습니다.

Key Takeaway

오픈소스 프로젝트와의 대규모 협력을 통해 내부 포크의 핵심 기능을 업스트림에 통합함으로써, 기술 부채 감소와 장기 유지보수성 향상을 동시에 달성할 수 있다. 하드웨어 의존적인 최적화(MSVP)는 내부 유지하되, 범용 기능(멀티레인 인코딩, 품질 메트릭)은 업스트림 기여로 전환하는 선별적 전략이 효과적이다.


대규모 미디어 처리 인프라를 운영하는 조직에서 FFmpeg 같은 업스트림 오픈소스에 의존할 때, 필수 기능의 내부 포크 유지가 장기적으로 기술 부채를 증가시키므로 상류 프로젝트와의 협력을 통해 핵심 기능을 먼저 업스트림에 기여하는 방식으로 마이그레이션 계획을 수립하면 유지보수 비용을 크게 줄일 수 있다.

원문 읽기