본문 바로가기

개발/nodejs

ffmpeg 개념

FFmpeg은 오디오·비디오 등 위한 오픈소스 멀티미디어 프레임워크입니다.

 

ffmpeg으로 영상/음성 인코딩 및 자르기, 합치기, 필터링 등을 수행가능하다

 

ffmpeg: cli 명령어

ffprobe : 미디어 조회, duration, fps, codec 등 정보 수집, 분석 도구

ffplay : 영상 플레이 

 

nodejs/nest js에서 child_process를 통해 명령 전달 가능함

 

* child_process 란 :  nodejs 환경에서 python, git, ffmpeg등 외부 프로그램을 실행 할 수 있도로 지원하는 프로세스 모듈

 

* 인코딩이란 원본 RAW 데이터를 압축 하여 컨테이너에 담는 과정

영상 인코딩 과정

  1. 각 픽셀 은 24bit ( = 3byte 의 R,G,B ) 로 구성됨
  2. 하나의 프레임에는 width x hight x 3byte로 나열됨
    1. 1fps = 1920 x 1080 x 3 = 6,220,800 bytes ( 약 6MB) 
    2. 1초에 30 fps 인경우 -> 6MB x 30  = 180MB   ==> 용량이 매우커서 압축 필요
  3. 압축은 코덱으로 수행
    1. H.264, H.265 ( 영상)
    2. ACC, Opus ( 오디오 )
  4. 압축된 스트림 포맷으로 정의 ( 포맷은 데이터를 담는 그릇 )
    1. MP4 : 가장 범용적, IOS, Android, Window 모두 지원 / 자막, 메타데이터 비교적 약함
    2. MKV : 기능성 가장 우수, 모든 코덱 지원, 모든 자막 지원, 자유도 높음, IOS, 웹 호환성 낮음
    3. MOV : 영상 편집 최적화 / 파일 크기 큼, 호환성 떨어짐
    4. AVI : 전통적 포맷, 단순한 구조 / 호환성, 오디오 싱크 등 문제 발생
    5. WebM : 구글, 웹용 오픈 포맷, 유튜브, 웹스트링 최적화, 가벼운 고효율 / 코덱 제한적, 호환성 낮음
  5. 코덱을 사용하여 포멧에 저장시 저장되는 내용
    1. 비디오 스트림
    2. 오디오 스트림
    3. 자막 스트림
    4. 메타데이터
    5. 타임스탬프

 

 

 

 

포맷 장단점

MP4 웹/모바일 표준 H.264/H.265 호환성 최고 자막/메타데이터 약함
MKV 자유도·기능 최고 거의 모두 자막·오디오·메타 풍부 브라우저 호환 약함
MOV Apple/편집용 ProRes 전문 편집에 최적 파일 크기 큼
AVI 레거시 포맷 다양하지만 제한 단순 현대 기능 부족
WebM 웹 최적 VP9/AV1 웹 스트리밍 최강 H.264 불가