피드로 돌아가기
Dev.toInfrastructure
원문 읽기
setpts와 atempo 체이닝을 통한 오디오-비디오 동기화 속도 제어
How to Speed Up or Slow Down Video with FFmpeg
AI 요약
Context
비디오 프레임 속도와 오디오 재생 속도가 독립적으로 작동하는 FFmpeg의 특성으로 인한 싱크 어긋남 문제 발생. 특히 atempo 필터의 입력 값 제한(0.5~2.0)으로 인해 고배속 또는 저배속 구현 시 발생하는 제약 사항 해결 필요.
Technical Solution
- Video 프레임 간 간격을 조정하는 setpts 필터에 1/속도 값을 곱하여 재생 속도 제어
- Audio 속도 조절을 위해 atempo 필터를 도입하되, 0.5~2.0 범위를 벗어나는 경우 필터를 직렬로 연결하는 Chaining 구조 채택
- 비디오와 오디오의 속도 배수 합계를 일치시켜 재생 시 발생하는 Audio desync 방지
- Variable Frame Rate(VFR) 소스의 예측 불가능한 동작을 막기 위해 fps 필터를 통한 Constant Frame Rate 강제 변환 적용
- 저배속 재생 시 발생하는 끊김 현상을 해결하기 위해 CPU 집약적인 minterpolate 필터를 통한 프레임 보간 검토
- API 기반의 비동기 트랜스코딩 구조를 통해 서버 리소스 관리 및 오토스케일링 구현
실천 포인트
- 속도 변경 시 setpts(1/speed)와 atempo(speed)의 수학적 일치 여부 확인 - 2배속 이상의 오디오 조절 시 atempo 필터를 중첩 적용했는지 체크 - VFR 소스 파일의 경우 setpts 적용 전 fps 필터 선행 배치 - 고품질 결과물을 위해 re-encoding 시 -crf 18 옵션 적용 검토