• 기본 문법에 의하면 옵션들은 다음에 지정되는 파일에 적용
  • 순서는 중요하고 같은 옵션을 여러 명령줄에 사용 가능
  • 각 옵션들은 입력 혹은 출력 파일에 적용
 

 

1. FFMPEG 명령어 형식

ffmpeg [input options] -i [input filename] -codec:v [video options] -codec:a [audio options] [output file options] [output filename]

 

 

2. FFMPEG 주요 옵션

옵션 설명
-L - 라이센스 보여줌
-h - 도움말 출력
-version - 버전 정보
-format - 용가능한 포멧, 코덱, 프로토콜을 보여줌
-f <string> - 파일 포멧을 지정. (나중에 포멧 목록 참조)
-i <string> - 입력되는 파일 이름
-y - 출력 파일 덮어쓰기
-t <timecode> - 기록할 시간을 초 단위 또는 hh:mm:ss[.xxx] 형태로 설정
-fs <정수값> - 최대 파일 크기를 설정(바이트 단위)
-ss <timecode> - 작업할 시작시간 오프셋(시작위치)을 초 단위 또는 hh:mm:ss[.xxx] 형태로 설정
-itsoffset <time_off> - 설정 ts 오프셋(set the input ts offset)
-itsscale <stream:scale> - 입력 ts 스케일 설정(set the input ts scale)
-album <앨범명> - 앨범을 설정
-author <저자명> - 저자를 설정
-comment <주석> - 주석을 설정
-copyright <저작권> - 저작권에 대한 설정
-title <타이틀이름> - 타이틀을 설정
-timestamp <시간> - 타임스탬프 설정
-genre <장르명> - 장르를 설정
-dframes 숫자 - 기록할 데이터 프레임 개수 설정
-v <숫자> - 로깅 레벨 설정
-target <타입> - 목표 파일 타입 지정 ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...)
-xerror - 에러시 종료

 

 

3. FFMPEG 추가 옵션

옵션 설명
-map <file:stream>[:syncfile:syncstream] - 입력 스트림 매핑 설정
  -map에 대한 옵션 설명은 비디오 소스+오디오 소스 맵핑하여 합치는 명령어
  ffmpeg -i 비디오소스경로 -i 오디오소스경로 -c copy -map 0:v -map 1:a -y 저장할경로
  -map : 소스 매핑
  -map 0:v는 첫번째 Input의 video source를 사용하겠다는 것. 스트림 별로 선택도 가능
-map_meta_data outfile:infile - 입력파일에서 출력파일로 저장(?)될 메타 데이터 정보 설정
-benchmark - 벤치마킹할 타이밍 추가
-dump - 각 입력 패킷을 덤프함
-hex - 패킷을 덤프할때 페이로드도 같이 덤프함
-re - 기본 프레임 속도로 입력 읽기(read input at native frame rate)
-loop_input - 루프 (현재 이미지하고만 작동이 됨)
-loop_output - 루핑을 지원하는 포멧에서 출력을 루프할 횟수 지정(0은 계속 루프함)
-threads 개수 - 쓰레드 개수
-vsync - 비디오 싱크 방법
-async - 오디오 싱크 방법
-adrift_threshold 임계값 - 오디오 드리프트 임계값(audio drift threshold)
-vglobal - 비디오 글로벌 해더 저장 형식
-copyts - 타임스탬프 복사
-shortest - 최단 입력 시간 내에 인코딩 완료
-dts_delta_threshold 임계값 - 타임스탬프 불연속성 델타(delta) 임계값
-programid - 원하는 프로그램 개수(?)
-muxdelay seconds - 최대 디먹스-디코드 지연값 설정(?)
-muxpreload seconds - 초기 디먹스-디코드 지연값 설정(?)

 

 

4. FFMPEG 비디오 옵션

옵션 설명
-aspect <string or float> - 비율을 설정 ( 4:3, 16:9, 1.3333, 1.7777 )
- set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)(비율조정 4:3, 16:9)
-b <int> - 비디오 비트레이트를 bit/s단위로 설정 (기본=200k)
- set bitrate (in bits/s) (비트레이트 조정)
-vb bitrate - 비디오 비트레이트 설정 (in bits/s)
- set bitrate (in bits/s) (가변비트레이트 조정)
-vframes number - 기록할 비디오 프레임 수 지정
- set the number of video frames to record
-s size - 화면 크기 지정 (WxH 또는 비율)
-croptop size - 상단 잘라내는 밴드 크기 지정 (픽셀단위)
- set top crop band size (in pixels)(상단 잘라낼 사이즈 설정 - 단위 픽셀)
-cropbottom size - 하단 잘라내는 밴드 크기 지정 (픽셀단위)
- set bottom crop band size (in pixels)(하단 잘라낼 사이즈 설정- 단위 필셀)
-cropleft size - 왼쪽 잘라내는 밴드 크기 지정 (픽셀단위)
- set left crop band size (in pixels)(왼쪽 잘라낼 사이즈 설정 - 단위 픽셀)
-cropright size - 오른쪽 잘라내는 밴드 크기 지정 (픽셀단위)
- set right crop band size (in pixels)(오른쪽 잘라낼 사이즈 설정 - 단위 필셀)
-padtop size - 위쪽 패드 밴드 크기 지정 (픽셀단위)
- set top pad band size (in pixels)
-padbottom size - 하단 패드 밴드 크기 지정 (픽셀단위)
- set bottom pad band size (in pixels)
-padleft size - 왼쪽 패드 밴드 크기 지정 (픽셀단위)
- set left pad band size (in pixels)
-padright size - 오른쪽 패드 밴드 크기 지정 (픽셀단위)
- set right pad band size (in pixels)
-padcolor color - 패드 밴드 색상 지정 (16진수 000000 ~ FFFFFF)
- set color of pad bands (Hex 000000 thru FFFFFF)
-vn - 비디오를 비활성화(disable video)
-vcodec codec - 비디오 코텍를 강제로 지정 ('copy' 은 스트림을 복제)
-sameq - 소스와 같은 비디오 퀄리티를 사용 (implies VBR)
-pass n - 패스 번호를 선택 (1 또는 2)
-passlogfile prefix - 패스 로그 파일 이름앞에 붙일 접두사 선택
-newvideo - 새로운 비디오 스트림을 현재 출력 스트림으로 추가

 

 

5. 추가 비디오 옵션

옵션 설명
-pix_fmt format - 픽셀 포맷 설정. 'list'는 지원되는 모든 픽셀 포맷 보여줌
-intra - 인트라 프래임만 사용
-vdt n - 쓰레드홀드 취소
-qscale q - 고정된 비디오 양자화범위를 사용 (VBR)
-rc_override override - 특정 간격에 대한 속도 제어 재정의
-me_threshold threshold - 모션 추정 임계값(motion estimaton threshold)
-deinterlace - 사진 인터레이스 해제(deinterlace pictures)
-psnr - 압축 프레임의 PSNR 계산
-vstats - 비디오 코딩 통계를 파일로 덤프
-vstats_file file - 비디오 코딩 통계를 파일로 덤프
-intra_matrix matrix - 인트라 매트릭스 계수 지정(specify intra matrix coeffs)
-inter_matrix matrix - 행렬 간 계수 지정(specify inter matrix coeffs)
-top - 상단=1/하단=0/자동=-1 필드 첫 번째(top=1/bottom=0/auto=-1 field first)
-dc precision - intra_dc_precision
-vtag fourcc/tag - 강제 비디오 태그/FOURCC
-qphist - QP 히스토그램 표시(show QP histogram)
-force_fps - 선택한 프레임 속도를 강제로 적용하고, 지원되는 최고 프레임 속도 선택을 비활성화
-vpre preset - 비디오 옵션을 표시된 사전 설정으로 설정

 

 

6. 오디오 옵션

옵션 설명
-ab <int> - 오디오 비트레이드를 bit/s 단위로 설정
- 값은 정수(기본 = 64k)
- set bitrate (in bits/s)(초당 비트레이트를 설정 ex)128, 192, 320 etc)
-aframes number - 녹음할 오디오 프레임 수 설정
-aq quality - 오디오 품질 설정(코덱별)
-ar rate - 오디오 샘플링 속도 설정(Hz 단위)
- set audio sampling rate (in Hz)(오디오 샘플림을 설정함 32000,44000)
-ac channels - 오디오 채널 수 설정
- set number of audio channels(오디오 채널을 설정함 1-mono 2-stereo)
-an - 오디오 비활성화
-acodec codec - 오디오 코덱 강제 적용('copy'로 스트림 복사)
-vol volume - 오디오 볼륨 변경(256=일반)
- 볼륨을 설정함
-newaudio - 현재 출력 스트림에 새 오디오 스트림을 추가
-alang code - 현재 오디오 스트림의 ISO 639 언어 코드(3글자)를 설정
-acodec <string> - 사용할 오디오 코덱을 지정
  1. ac3 : AC3 ( Dolby Digital ) 
  2. copy : 원본 데이터를 그대로 복사. 
  3. libfaac : AAC-LC 
  4. mp2 : MPEG Audio Layer II 
  5. mp3 : MPEG Audio Layer III 
  6. pcm_s16le : 비압축 16-bit PCM Audio
-an - 오디오를 사용하지 않음
-ar <int> - 오디오 샘플링율을 Hz단위로 설정 (기본 = 44100 Hz).
-async <int> - 오디오 동기화 방법
- 오디오를 타임스템프에 맞춰서 늘리거나 줄일 수 있음
- 매개변수는 오디오 변화에 의한 초당 최대 샘플 개수를 의미
  -async 1은 특별한 경우로 지연 수정 없이 오디오 스트림 시작 위치가 정확한 경우에만 사용가능.

 

 

7. 추가 오디오 옵션

옵션 설명
-atag fourcc/tag - 강제 오디오 태그/포괄호(force audio tag/fourcc)
-sample_fmt format - 샘플 형식 설정
- 인자로 'list(목록)'을 지정하면 지원되는 모든 샘플 형식이 표시
-apre preset - 오디오 옵션을 표시된 사전 설정으로 설정

 

 

8. 자막 옵션

옵션 설명
-sn - 자막 비활성화
-scodec codec - 자막 코덱 강제 적용('copy' to copy stream)
-newsubtitle - 현재 출력 스트림에 새 자막 스트림을 추가
-slang code - 현재 자막 스트림의 ISO 639 언어 코드(3글자)를 설정
-spre preset - 자막 옵션을 표시된 사전 설정으로 설정

 

 

9. 오디오/비디오 획득 옵션(Audio/Video grab options)

옵션 설명
-vc channel - 비디오 그랩 채널 설정(DV1394만 해당)
-tvstd standard - 텔레비전 표준 설정(NTSC, PAL(SECAM))
-isync - 입력 시 읽기 동기화(sync read on input)
-bufsize <int> - 제어버퍼 크기를 설정 (비트단위)
-cmp <string or int> - pel 모션 평가 비교 함수 사용 - Full pel motion estimation compare function
  1. sad ( 0 ) : 절대 차이 값의 합, 고속 (기본) 
  2. sse ( 1 ) : Squared errors 합. 
  3. satd ( 2 ) : Absolute Hadamard transformed differences 합. 
  4. dct ( 3 ) : Absolute DCT transformed differences 합. 
  5. psnr ( 4 ) : Squared quantization errors 합( 비추, 저품질). 
  6. bit ( 5 ) : 블럭에 필요한 비트 수 
  7. rd ( 6 ) : Rate distortion optimal, 느림.
  8. zero ( 7 ) : 0. 
  9. vsad ( 8 ) : Absolute vertical differences 합. 
  10. vsse ( 9 ) : Squared vertical differences 합. 
  11. nsse ( 10 ) : Noise preserving sum of squared differences. 
  12. w53 ( 11 ) : 5/3 wavelet ( Snow에서만 사용됨). 
  13. w97 ( 12 ) : 9/7 wavelet ( Snow에서만 사용됨). 
  14. dctmax ( 13 ) 
  15. chroma ( 14 ) 
-coder <string or int> - coder 설정
  1. vlc ( 0 ) : 가변 길이 코더 / 허프만 코더. 
  2. ac ( 1 ) : 산술연산 코더(Arithmetic coder). 
  3. raw ( 2 ) : 원본 ( 인코딩 없음). 
  4. rle ( 3 ) : Run-length coder. 
  5. deflate ( 4 ) : Deflate-based coder. 
-cropbottom <int> - 하단 잘려지는 화면 크기 설정(비트 단위)
-cropleft <int> - 왼쪽 잘려지는 화면 크기 설정(비트 단위)
-cropright <int> - 오른쪽 잘려지는 화면 크기 설정(비트 단위)
-croptop <int> - 오른쪽 잘려지는 화면 크기 설정(비트 단위)
-deinterlace - 픽처를 디인터페이스 시킴(Deinterlace pictures)
-dc <int> - Intra DC precision.
-flags <string> - 사용 가능 값
  1. aic : H.263 고급 인트라 코딩 / MPEG-4 ac 예측 (H.263 advanced intra coding / MPEG-4 ac prediction)
  2. aiv : H.263 alternative inter VLC (VLC 간 H.263 대체)
  3. alt : Enable alternate scantable( MPEG-2/MPEG-4) (대체 스캔 가능(MPEG-2/MPEG-4) 활성화)
  4. bitexact : Use only bitexact stuff ( except (i)dct ) (바이텍스트만 사용하세요((I)DCT 제외))
  5. cbp : Use rate distortion optimization for cbp (CBP에 속도 왜곡 최적화를 사용)
  6. cgop : Closed GOP (폐쇄된 GOP)
  7. gmc : Use global motion compensation (글로벌 모션 보정 사용)
  8. gray : Only decode/encode grayscale (회색조만 디코딩/인코딩 가능)
  9. ildct : Use interlaced DCT (인터레이스드 DCT 사용)
  10. ilme : Interlaced motion estimation (인터레이스 모션 추정)
  11. loop : Use loop filter (루프 필터 사용)
  12. low_delay : Force low delay (강제 낮은 지연)
  13. mv0 : Always try a mb with mv=<0,0> (항상 mv=<0,0>으로 엠비를 사용)
  14. mv4 : Use four motion vector by macroblock ( MPEG-4)
  15. naq : Normalize adaptive quantization (적응형 양자화 정규화)
  16. obmc : Use overlapped block motion compensation ( H.263+ ). 
  17. part : Use data partitioning (데이터 파티셔닝을 사용)
  18. psnr : Error variables will be set during encoding (인코딩 중에 오류 변수가 설정)
  19. qpel : Use 1/4 pel motion compensation (1/4 펠 모션 보정 사용)
  20. qprd : Use rate distortion optimization for qp selection (QP 선택에 속도 왜곡 최적화 사용)
  21. scan_offset : Will reserve space for svcd scan offset user data
  22. slice 
  23. trell : Use trellis quantization (격자 정량화 사용)
  24. umv : Use unlimited motion vectors (무제한 모션 벡터 사용)
-flags2 <string> - 사용 가능 값
  1. aud : Access unit delimiters ( H.264 )
  2. bpyramid : Allows B-frames to be used as references for predicting. 
  3. brdo : B-frame rate-distortion optimization. 
  4. dct8x8 : High profile 8x8 transform ( H.264 ). 
  5. drop_frame_timecode 
  6. fast : Allow non spec compliant speedup tricks. 
  7. fastpskip : Fast pskip ( H.264 ). 
  8. ivlc : Intra VLC table.
  9. local_header : Place global headers at every keyframe instead of in extradata. 
  10. mixed_refs : One reference per partition, as opposed to one reference per macroblock. 
  11. non_linear_q : Use non linear quantizer. 
  12. noout : Skip bitstream encoding. 
  13. sgop : Strictly enforce GOP size. 
  14. skiprd : RD optimal macroblock level residual skipping. 
  15. wpred : Weighted biprediction for B-frames ( H.264 ). 
-formats - 가능한 포멧, 코덱, 프로토콜 등을 보여줌
-g <int> - Group of pictures ( GOP ) 크기 설정
-genpts <boolean> - PTS 생성( 0 = off / 1 = on )
-intra - Intra frames ( I-frames )만 사용
-loop_input - 반복 ( 정지 이미지에서만 사용 )
-maxrate <int> - 최대 비디오 비트레이트 허용치 설정( bit/s 단위)
-me <string or int> - 모션 추출 방법 설정
  1. dia ( 1 ) : Diamond 검색, 반경 1 ( 고속). 
  2. hex ( 2 ) : Hexagonal 검색, 반경 2 ( 기본). 
  3. umh ( 3 ) : Uneven multi-hexagon 검색. 
  4. esa ( 4 ) : Exhaustive 검색 ( 저속). 
-mbd <string> - Macroblock decision 알고리즘 ( 고품질 모드)
  1. simple : mbcmp 사용( 기본 )
  2. bits : fewest bits 사용
  3. rd : best rate distortion 사용 
-minrate <int> - 최소 비디오 비트레이트 허용치 설정 ( bit/s 단위 )
-newaudio - 새로운 오디오 스트립을 현재 출력 스트림에 추가
-padbottom <int> - 하단 패드 밴드 크기설정 ( 픽셀 단위 )
- 하단 여백 크기을 말함
-padcolor <int> - 패드 밴드의 색상을 설정 ( 16진수 000000 ~ FFFFFF )
- 여백 색상을 말함
-padleft <int> - 왼쪽 패드 밴드 크기를 설정 ( 픽셀 단위 )
- 왼쪽 여백 크기를 말함
-padright <int> - 오른쪽 패드 밴드 크기를 설정 ( 픽셀 단위 )
- 오른쪽 여백 크기를 말함
-padtop <int> - 위쪽 패드 밴드 크기를 설정 ( 픽셀 단위 )
- 위쪽 여백 크기를 말함
-pass <int> - 패스 수 선택 ( 1 or 2 )
- 비디오 통계치는 첫번째 패스에서 기록이되고 두번째 패스에서 비디오가 정확히 원하는 비트레이트로 생성
-pix_fmt <string> - 픽셀 포맷 설정
  1. yuv420p 
  2. yuv422p 
  3. yuv444p 
  4. yuv422 
  5. yuv410p 
  6. yuv411p 
  7. yuvj420p 
  8. yuvj422p 
  9. yuvj444p 
  10. rgb24 
  11. bgr24 
  12. rgba32 
  13. rgb565 
  14. rgb555 
  15. gray 
  16. monow 
  17. monob 
  18. pal8 
-ps <int> - 패킷 크기를 비트 단위로 설정
-qmax <int> - 최대 비디오 양자화(quantizer) 값 ( VBR )
- 가변 비트레이트에서 최대치
-qmin <int> - 최소 비디오 양자화(quantizer) 값 ( VBR )
- 가변 비트레이트에서 최소치
-qscale <int> - 고정 비디오 양자화(quantizer) 값 ( VBR )
- 고정 비트레이스 값
-r <int or string>
(-r rate)
- 프레임 율 설정 ( Hz 값, 비율 혹은 약호사용 )
- 예시 : 25, 30000/1001, etc
- set frame rate (Hz value, fraction or abbreviation)(프레임 레이트 조정)
-rc_init_occupancy <int> - 디코딩 시작 전에 rate control 버퍼에 로드되는 비트 개수
-s <string>
(-s size)
- 프레임 크기 설정 ( 폭x높이 또는 약호)
- set frame size (WxH or abbreviation)(프레임 사이즈 조정)
-subcmp <string or int> - 서브 펠(pel) 모션 추정 비교 기능. 
  1. sad ( 0 ) : Sum of absolute differences, fast ( default ). 
  2. sse ( 1 ) : Sum of squared errors. 
  3. satd ( 2 ) : Sum of absolute Hadamard transformed differences. 
  4. dct ( 3 ) : Sum of absolute DCT transformed differences. 
  5. psnr ( 4 ) : Sum of squared quantization errors ( avoid, low quality ). 
  6. bit ( 5 ) : Number of bits needed for the block. 
  7. rd ( 6 ) : Rate distortion optimal, slow. 
  8. zero ( 7 ) : 0. 
  9. vsad ( 8 ) : Sum of absolute vertical differences. 
  10. vsse ( 9 ) : Sum of squared vertical differences. 
  11. nsse ( 10 ) : Noise preserving sum of squared differences. 
  12. w53 ( 11 ) : 5/3 wavelet ( only used in Snow ). 
  13. w97 ( 12 ) : 9/7 wavelet ( only used in Snow ). 
  14. dctmax ( 13 ) 
  15. chroma ( 14 ) 
-ss <timecode> - 작업할 시작시간 오프셋(시작위치)을 초 단위 또는 hh:mm:ss[.xxx] 형태로 설정
-t <timecode> - 기록할 시간을 초 단위 또는 hh:mm:ss[.xxx] 형태로 설정.
-timecode_frame_start <int> - GOP 시작 타임코드 값을 프레임 개수로 설정( 예: 14:15:09:23 대신에 1282748사용 )
- 프레임 드롭 모드에서는 지원하지 않음
-top <int> - Field dominance(필드 지배력)
- top = 1 / bottom = 0 / auto = -1
-trellis <int> - 속도 왜곡 최적 양자화(Rate-distortion optimal quantization)
-vbsf <string> - 비트스트림 필터
  1. dump_extra 
  2. imxdump 
  3. noise 
  4. remove_extra 
-vcodec <string> - 비디오 코덱 지정
  1. copy : 원본 데이터 그대로 복사. 
  2. dvvideo : DV Video 
  3. ffv1 : FFV1 lossless video codec 
  4. libx264 : H.264 
  5. mpeg2video : MPEG-2 Video 
  6. rawvideo : RAW Video 
  7. xvid : XviD ( MPEG-4 Part 2 ) (역주: 최근 버전에서는 libxvid로 사용)
-vframes <int> - 기록할 비디오 프레임 개수 설정
-vn - 비디오 사용하지 않음
-vol <int> - 오디오 볼륨 수정 ( 256=보통)
-vsync <int> - 비디오 동기화 방법 → 비디오를 타임스템프에 맞춰서 줄이거나 늘릴 수 있음
- 프레임을 복제하거나 버리는 방법을 사용
  -map 옵션을 사용해서 타임스탬프로 사용할 스트림을 선택할 수 있음
- 비디오나 오디오를 변경없이 내버려둘 수 있고 변경되지 않은 것에 동기화 시킬수 있음
-vtag <string> - 비디오 FourCC/Tag 지정

 

참고 자료

 

 

'Media(미디어) > FFmpeg' 카테고리의 다른 글

CentOS 7에서 FFmpeg 설치 및 간단 테스트  (0) 2023.09.25
FFmpeg(fast forward mpeg)란  (0) 2023.09.24
  • FFmpeg는 멀티미디어 파일을 처리하기 위한 무료 및 오픈 소스 도구 모음
  • libavcodec, libavformat 및 libavutil과 같은 공유 오디오 및 비디오 라이브러리 세트가 포함
  • FFmpeg를 사용하면 다양한 비디오와 오디오 형식을 변환하고 샘플링 속도를 설정하고 스트리밍 오디오/비디오를 캡처하고 비디오 크기를 조정할 수 있음

 

1. CentOS 7에서 FFmpeg 설치

1.1. YUM으로 FFmpeg 설치

  • FFmpeg는 CentOS 7 핵심 리포지토리에서 사용할 수 없음
  • FFmpeg 도구를 원본에서 작성하거나 타사 Yum 저장소에서 Yum을 통해 설치 필요 → RPM Fusion 저장소에서 설치

  • RPM Fusion 저장소는 EPEL 소프트웨어 저장소에 따라 다름 → 시스템에서 EPEL이 활성화되지 않은 경우 다음을 입력하여 EPEL을 활성화
    $ yum install epel-release -y
     
  • NUX 저장소를 추가
    $ rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
     
  • FFmpeg를 설치
    $ yum install ffmpeg ffmpeg-devel -y
     
  • 버전을 확인하여 FFmpeg 설치를 확인
    $ ffmpeg -version
    ffmpeg -version
    ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers
    built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
    ### 생략 ###
    libavutil      54. 31.100 / 54. 31.100
    libavcodec     56. 60.100 / 56. 60.100
    libavformat    56. 40.101 / 56. 40.101
    libavdevice    56.  4.100 / 56.  4.100
    libavfilter     5. 40.101 /  5. 40.101
    libavresample   2.  1.  0 /  2.  1.  0
    libswscale      3.  1.101 /  3.  1.101
    libswresample   1.  2.101 /  1.  2.101
    libpostproc    53.  3.100 / 53.  3.100

 

 

1.2. FFmpeg 컴파일된 버전으로 설치

  • ffmpeg-install을 통해 컴파일된 버전을 설치
  • 참고 자료 : GitHub - q3aql/ffmpeg-builds: MOVED: https://gitlab.com/q3aql/ffmpeg-builds

  • 저장소로부터 다운로드하기 → git clone을 통해서 저장소로부터 파일을 다운로드
    $ cd
    
    $ git clone https://github.com/q3aql/ffmpeg-install.git
    Cloning into 'ffmpeg-install'...
    remote: Enumerating objects: 297, done.
    remote: Counting objects: 100% (40/40), done.
    remote: Compressing objects: 100% (27/27), done.
    remote: Total 297 (delta 27), reused 26 (delta 13), pack-reused 257
    Receiving objects: 100% (297/297), 103.02 KiB | 0 bytes/s, done.
    Resolving deltas: 100% (172/172), done.
     
  • ffmpeg-install 디렉토리 내로 이동
    $ cd /root/ffmpeg-install/
    
    $ ls
    apt-cyg                         ffmpeg-shared-build-cywin64.sh         ffmpeg-static-build-linux64.sh
    cygwin_fix_strsafe.h            ffmpeg-static-build-linux32-native.sh  LICENSE.txt
    ffmpeg-installer.sh             ffmpeg-static-build-linux32.sh         README.md
    ffmpeg-shared-build-cywin32.sh  ffmpeg-static-build-linux64-native.sh
     
  • ffmpeg-install.sh 스크립트 실행
    ### -h 옵션을 통해서 옵션 확인
    $ source ffmpeg-installer.sh -h
    
    * ffmpeg-install v2.0 (270321) (GPL v2.0)
    
    * Script: q3aql (q3aql@protonmail.ch)
    * Builds: John Van Sickle (john.vansickle@gmail.com)
    
    + Syntax:
    
    $ ffmpeg-install --install         --> Install FFmpeg (Git version)
    $ ffmpeg-install --install release --> Install FFmpeg (Stable version)
    $ ffmpeg-install --update          --> Update FFmpeg (Git version)
    $ ffmpeg-install --update release  --> Update FFmpeg (Stable version)
    $ ffmpeg-install --uninstall       --> Uninstall FFmpeg previously installed
    $ ffmpeg-install --help            --> Show help
    
    
    ### 안정적인 stable 버전을 설치
    $ source ffmpeg-installer.sh --install release
    ### ...생략...
    ‘ffmpeg’ -> ‘/usr/bin/ffmpeg’
    ‘ffprobe’ -> ‘/usr/bin/ffprobe’
    * Finished!
     
  • 설치 확인 → ffmpeg 명령어를 통해서 버전화 설치 사항을 확인
    $ ffmpeg -version
    ffmpeg version 6.0-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2023 the FFmpeg developers
    built with gcc 8 (Debian 8.3.0-6)
    ### 생략 ###
    libavutil      58.  2.100 / 58.  2.100
    libavcodec     60.  3.100 / 60.  3.100
    libavformat    60.  3.100 / 60.  3.100
    libavdevice    60.  1.100 / 60.  1.100
    libavfilter     9.  3.100 /  9.  3.100
    libswscale      7.  1.100 /  7.  1.100
    libswresample   4. 10.100 /  4. 10.100
    libpostproc    57.  1.100 / 57.  1.100

 

 

2. FFmpeg 예제 → mp4을 m4a으로 기본 변환 

  • ffmpeg를 사용하여 오디오 및 비디오 파일을 변환할 때 입력 및 출력 형식을 지정할 필요가 없음
  • 입력 파일 형식이 자동으로 검색되고 출력 형식은 파일 확장자에서 추측

  • 비디오 파일을 mp4에서 m4a으로 변환
    $ ffmpeg -i izone_test.mp4 izone_test.m4a
    ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers
      built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
      ### 생략 ###
      libavutil      54. 31.100 / 54. 31.100
      libavcodec     56. 60.100 / 56. 60.100
      libavformat    56. 40.101 / 56. 40.101
      libavdevice    56.  4.100 / 56.  4.100
      libavfilter     5. 40.101 /  5. 40.101
      libavresample   2.  1.  0 /  2.  1.  0
      libswscale      3.  1.101 /  3.  1.101
      libswresample   1.  2.101 /  1.  2.101
      libpostproc    53.  3.100 / 53.  3.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'izone_test.mp4':
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: isommp42
        creation_time   : 2021-03-26 14:37:06
      Duration: 00:42:52.49, start: 0.000000, bitrate: 2432 kb/s
        Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 2300 kb/s, 29.95 fps, 29.95 tbr, 11982 tbn, 59.91 tbc (default)
        Metadata:
          creation_time   : 2021-03-26 14:37:06
          handler_name    : ISO Media file produced by Google Inc. Created on: 03/26/2021.
        Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
        Metadata:
          creation_time   : 2021-03-26 14:37:06
          handler_name    : ISO Media file produced by Google Inc. Created on: 03/26/2021.
    [libx264 @ 0x20e05e0] using SAR=1/1
    [libx264 @ 0x20e05e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
    [libx264 @ 0x20e05e0] profile High, level 3.1
        [libx264 @ 0x20e05e0] 264 - core 142 r2495 6a301b6 - H.264/MPEG-4 AVC codec ### 생략 ###
        Output #0, ipod, to 'izone_test.m4a':
          Metadata:
            major_brand     : mp42
            minor_version   : 0
            compatible_brands: isommp42
            encoder         : Lavf56.40.101
            Stream #0:0(und): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR1:1 DAR 16:9], q=-1--1, 29.95 fps, 11982 tbn, 29.96 tbc (default)
            Metadata:
              creation_time   : 2021-03-26 14:37:06
              handler_name    : ISO Media file produced by Google Inc. Created on: 03/26/2021.
              encoder         : Lavc56.60.100 libx264
            Stream #0:1(und): Audio: aac (libfdk_aac) (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128 kb/s (default)
            Metadata:
              creation_time   : 2021-03-26 14:37:06
              handler_name    : ISO Media file produced by Google Inc. Created on: 03/26/2021.
              encoder         : Lavc56.60.100 libfdk_aac
        Stream mapping:
          Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
          Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
        Press [q] to stop, [?] for help
      frame=70406 fps= 63 q=29.0 size= 1321080kB time=00:39:10.37 bitrate=4604.5kbits/s
     

 

참고 자료

 

 

'Media(미디어) > FFmpeg' 카테고리의 다른 글

FFMPEG 옵션  (0) 2023.09.25
FFmpeg(fast forward mpeg)란  (0) 2023.09.24

1. FFmpeg란

  • FFmpeg (www.ffmpeg.org) 은 비디오, 오디오, 이미지를 쉽게 인코딩 (Encoding), 디코딩 (Decoding), 먹싱 (Muxing), 디먹싱 (Demuxing) 할 수 있도록 도움을 주는 멀티미디어 프레임워크

 

  • FFmpeg 홈페이지에서 FFmpeg을 소개
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.
It supports the most obscure ancient formats up to the cutting edge.
No matter if they were designed by some standards committee, the community or a corporation.

 

  • 2000년 2월에 발표되고, 지속적으로 개발되고 있는 모든 디지털 영상, 음성에 대한 인코딩과 디코딩, 스트리밍이 가능한 오픈소스 프로젝트
  • 거의 업계 표준으로 자리 잡아 유명한 대부분의 영상 관련 툴들은 다 사용
  • ffmpeg은 libavcodec를 기반

  • ffmpeg 제공하는 툴
ffmpeg 제공 툴 설명
ffmpeg - 미디어 포맷 변환 도구
libavcodec - 오디오/비디오 코덱 라이브러리
libavdevice - 입출력 장치 제어 라이브러리
libavfilter - 미디어 필터 라이브러리
libswscale - 이미지 처리 라이브러리
libswresample - 오디오 처리 라이브러리
libavformat - 멀티미디어 컨테이너의 디먹서/먹서 라이브러리
ffserver - 라이브 방송을 하는 멀티미디어 스트리밍 서버

 

  • 곰player ,KMP , AV player, MX player 같은 것들이 ffmpeg을 사용하는데 ffmpeg은 Fabrice Bellard가 시작했고 지금은 마이클 니더마이어(Michael Niedermayer)가 이끌고 있음

  • 사용은 실행 파일 형태나 lib형태로 자기 프로그램에서 사용

 

  • ffmpeg의 기본구조

 

 

2. 인코딩(encoding)이란

  • 문서의 용량을 줄이기 위하여 zip 프로그램 (예: 알집, 반디집, 빵집)을 사용해서 문서를 압축하는 것처럼 동영상이나 이미지의 용량을 줄이기 위해서 압축하는 과정을 의미
  • 동영상은 일반 문서와 특성이 달라서 전용의 압축 알고리즘을 사용
  • 국내에서 동영상 재생에 많이 사용하는 곰플레이어의 개발사에서 만든 곰인코더 등이 동영상을 인코딩하는 프로그램

 

 

3. 디코딩(decoding)이란

  • 압축된 동영상을 재생하기 위하여 압축을 해제하는 과정을 디코딩이라고 함
  • 일반적으로 동영상 재생 프로그램 (예: 곰플레이어)들은 모두 내부적으로 압축을 해제하고 압축이 해제된 영상 및 오디오 데이터를 재생 프로그램에서 직접 재생
  • 국내에서 많이 사용하는 대표적인 동영상 재생 프로그램인 곰플레이어, KMP 플레이어, 다음과 네이버의 동영상 플레이어들이 내부적으로 FFmpeg을 사용하여 압축된 동영상의 압축을 해제한 후 압축이 해제된 데이터를 적절한 UI를 통해서 출력
  • 최근에는 PC 환경 뿐만 아니라 아이폰과 안드로이드 폰의 거의 대부분의 동영상 재생 프로그램들이 FFmpeg을 사용

 

 

4. 먹싱(muxing)과 디먹싱(demuxing)이란

  • 엔지니어링 분야에서 먹싱 (Muxing)이라는 단어는 여러 입력을 하나로 합치는 과정을 의미하고 디먹싱 (Demuxing)이라는 과정은 하나로 합쳐진 입력을 다시 여러 출력으로 만드는 것을 의미
  • PC에서 다운로드를 받아서 보시는 동영상은 사실 여러 장의 정지 영상과 오디오가 하나의 파일로 (예: .avi, .mkv, *.mov) 먹싱되어 있는 것
  • 먹싱되기 전에 정지 영상과 오디오는 아래의 그림과 같이 각각 인코딩 과정을 통해서 압축이 되어 있는 상태

 

  • 먹싱된 동영상을 재생하기 위해서는 인코딩, 먹싱 과정과 반대로 먼저 디먹싱을 통해서 압축된 정지 영상과 압축된 오디오로 분리한 후 각각의 데이터를 디코딩해야

 

5. 왜 FFmpeg 인가?

  • 영상 및 오디오를 압축하는 알고리즘에서는 수많은 종류가 존재
  • 영상 및 오디오를 정상적으로 재생하라면 수 많은 압축 알고리즘 (디코딩 부분)을 모두 직접 구현해야 함 → FFmpeg은 오픈소스로 전 세계의 개발자들이 개발을 하기 때문에 수많은 종류의 영상 및 오디오 코덱 및 파일 포맷 등을 지원
  • FFmpeg은 멀티미디어 계의 리눅스 → 리눅스가 더이상 선택이 아닌 필수인 것처럼 FFmpeg 역시 멀티미디어 파일을 다루는 데 있어서 더 이상 선택이 아니며 필수

 

참고 자료

'Media(미디어) > FFmpeg' 카테고리의 다른 글

FFMPEG 옵션  (0) 2023.09.25
CentOS 7에서 FFmpeg 설치 및 간단 테스트  (0) 2023.09.25
  • 재생을 할 때 하나의 URL로 접근 할 경우 Connection URL과 StreamName, 두개의 부분으로 나뉘어 지는데 보통은 아래와 같이 나눠짐

  • 요청 URL : rtmp://[server]:[port]/[application]/[appInstance]/[streamName]
    1. Connection URL : rtmp://[server]:[port]/[application]/[appInstance]
    2. Stream name : [streamName]

  • server에서 요청 URL(rtmp://[server]:[port]/[application]/[appInstance]/[streamName])은 아래와 같이 해석됨
    1. Connection URL : rtmp://[server]:[port]/[application]/definst
    2. Stream name : [streamName]

 

※ 만약에 Stream name 부분에 경로가 들어가게 되고 appInstance로 구분지어주지 않는다면 아래와 같이 경로가 잘못되게 나눠짐

  • 요청 URL : rtmp://[server]:[port]/[application]/[path1]/[path2]/[streamName]
    1. Connection URL : rtmp://[server]:[port]/[application]/[path1]
    2. Stream name : [path2]/[streamName]

  • Stream name 부분에 경로를 포함하고 있다면 appInstance 부분을 명시해줘야 함
  • 모든 프로토콜에 적용되며 StreamName 부분에 경로가 없다면 _definst_를 제거해도 됨

 

 

※ appInstance == _definst_인 이유

  • appInstance는 응용 프로그램을 인스턴스화한 것으로, 스트리밍을 위한 네임스페이스(namespace)와 컨텍스트(context)를 제공
  • appInstance는 동적으로 시작되며 단일 애플리케이션에 여러 개의 명명된 appInstance가 동시에 실행될 수 있음
  • appInstance에 대해 이름이 지정되지 않은 경우 기본 이름(definst)이 사용됨
  • 많은 스트리밍 시나리오에서는 애플리케이션별로 단일 appInstance가 사용되며 이름은 참조되지 않고 기본값이 definst됨
  • 스트리밍을 위해 여러 회의실을 만들어야 하는 비디오 채팅 및 비디오 회의 시나리오에서는 여러 애플리케이션 인스턴스를 사용하는 것이 더 일반적임
  • appInstance는 스트리밍을 방으로 분리하는 데 사용됨 → 각 룸은 별도의 appInstance로, 각 룸에 대한 분리(separation) 및 네임스페이스(namespace)를 제공

 

참고 자료

'Media(미디어) > Wowza Streaming' 카테고리의 다른 글

Wowza 포트(ports)  (0) 2023.09.24
Wowza key features(Wowza 핵심 기능)  (0) 2023.09.24

Wowza 포트

Port Type Use
1935 TCP RTMP (all variants), RTSP, Microsoft Smooth Streaming, Apple HLS, MPEG-DASH, HDS, WOWZA™
6970-9999 UDP Incoming RTP UDP streaming
8084-8085 TCP JMX/JConsole monitoring and administration
8086-8087 TCP HTTP administration
8088 TCP Wowza Streaming Engine Manager
554 (optional) TCP RTSP
443 (optional) TCP SSL connections
80 TCP Microsoft Smooth Streaming, Apple HLS, MPEG-DASH, HDS
Licensing server connections

 

참고 자료

- [펌][Wowza] WOWZA 설정하기 : 네이버 블로그 (naver.com)

 

 

1. Live Latency control

  • 고객의 Keyframe interval 조정과 Wowza origin에서 media chunk(segment) duration을 조정하여 live latency를 짧게 함
  • Client - CDN(Relay) - Origin 구간 network 영향을 받으므로 일반적으로 권장하는 최소 live latency는 2초 chunk * 3 playlist를 권장
  • 권장하는 최소 live latency는 2초 chunk * 3 playlist → 실제 player는 약 6~8초 정도의 delay 발생
  • Wowza 기본값은 10초 chunk * 3 playlist → 10초 * 3 개 = 30초 delay 발생

 

1.1. Customer role

  • Key frame interval 조정 : 1~2초 (알맞은 설정)

 

1.2. Nimbus role.

  • Wowza media segment duration 조정

 

1.3. Cupertino Streaming Packetizer (2 sec chunk * 3 playlist 설정으로 예시)

TypeContents Contents Contents
cupertinoChunkDurationTarget - 각 청크(chunk) 의 지속 기간을 밀리 초 단위로 설정
- 기본 값은 10000 (10초)
- HLS stream의 대기 시간을 줄이려면 chunkDurationTarget이 더 작아야 함.
- 1 초의 chunk 크기의 경우 값을 1000으로 설정
2000
cupertinoMaxChunkCount - 사용 가능한 청크(chunk) 목록을 Wowza에 저장할 최대 개수를 설정
- 기본 값은 10
- 대기 시간을 줄이려면 50초 분량의 청크(chunk)를 저장
- 1 초 청크의 경우, cupertinoMaxChunkCount를 50으로 설정
- Half second chunk를 사용하는 경우 이 값을 두 배로 늘려야 함 (100).
6
cupertinoPlaylistChunkCount - Client Playback으로 Playlist에 반환 되는 청크(chunk) 항목 수를 설정
- 기본 값은 3
- 지연 시간을 줄이려면 player에 12 초의 데이터를 반환
- chunk(청크) 목록 요청 간 청크가 손실되지 않음

- 1 초 청크의 경우, cupertinoPlaylistChunkCount를 12로 설정
- Half second 청크를 사용하는 경우 값을 두 배로 늘려야함 (24).
3

 

1.4. Chunk Response body in Media playlist(미디어 재생목록의 청크 응답 본문)

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:13
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXTINF:2.0,
media-ug00et4ec_13.ts
#EXTINF:2.0,
media-ug00et4ec_14.ts
#EXTINF:2.0,
media-ug00et4ec_15.ts

 

 

2. VoD source 생성 및 Live 송출 시 주의사항

  • 규격에 맞는 Protocol 별 Codec, Profile, Level 이용을 이용을 준수 → Vendor guide가 있으므로 찾아서 참조할 것.
  • Live의 경우 chunk duration에 따라 1 or 2초의 key frame interval을 사용 → Key frame interval 일반적으로 2초를 권장(Key Frame interval 1초인 경우 너무 짧아, 선명도가 상대적으로 떨어짐. Frame 간의 압축에서 효율이 떨어짐.)
  • UDP 송출의 경우 network 상태에 따라 품질 불균형을 야기할 수 있음(mpeg-ts UDP)

 

 

3. Key Frame Interval

  • Key frame interval 설정 시 chunk duration 이하로 생성 필요
  • Key frame interval <= Chunk duration
  • Unit : sec
Key frame interval Target Chunk duration Real chunk duration
1 2 2
2 2 2
3 2 3
4 2 4

 

 

4. Application, Stream Key (Where is Host?)

4.1. Application (App Name)

  • Wowza는 기본적으로 hostname을 지원하지 않음(Virtual host 개념 미사용, Wowza IP에 Hostname을 아무거나 요청해도 됨)
  • Wowza SSL 적용은 가능하나, Wowza를 edge로 사용하는 경우는 거의 없음
    Type Name Role Common
    Wowza Application - Application(AppName)은 스트리밍 콘텐츠의 논리적 container
    - 요청을 처리하고 콘텐츠를 전달하기 위한 규칙을 정의
    - 각 Application에는 unique한 이름이 있으며 구성, 보안 설정 및 전달 방법을 가질 수 있음
    - 하나의 Wowza server에 여러 App을 설정하여 고유한 설정으로 Stream 서비스 가능
    두 개념 사이에는 몇 가지 유사점이 있지만 주요 차이
    1. Wowza의 Application은 스트리밍 콘텐츠만 해당
    2. Web server의 Hostname은 모든 유형의 웹 콘텐츠에 사용


    Wowza의 Application은 WebServer의 Hostname과 연결되지 않는 caching 및 chunking 같은 contents를 전달하기 위한 특정 설정으로 구성 가능
    WebServer Host - Hostname은 website 또는 Web Application의 고유 식별자
    - 요청을 올바른 웹 서버로 라우팅하고 적절한 콘텐츠를 검색하는 데 사용
    - Hostname은 여러 하위 도메인을 가질 수 있으며 여러 IP 주소와 연결될 수 있음
    - 하나의 Web server에 Virtual host를 사용하여 여러 개의 Web server Host(Domain)를 운영 가능

 

4.2. Stream Key

  • Live 서비스에서 고객이 송출을 시작하면, 송출 시 Encoder에 설정한 Stream (Key)를 확인 가능
  • Application 내에서 여러 Stream이 존재할 수 있으며, 이것은 각 독립적인 Live channel이라고 보면 됨
  • ABR을 구성할 경우 동일 App에 송출되는 High, Mid, Low spec의 Stream (Key)를 묶어서 사용

  • OBS Encoder에서 Stream Key 설정
  • [AppName] > Incoming Streams 항목

 

 

5. nDVR(nDVR = Timeshift = SlidingWindow)

  • Wowza Streaming Engine™ nDVR 기술은 라이브 스트림을 녹화하는 동시에 사용자가 녹화된 스트림을 Play, pause, resume 및 rewind 할 수 있는 기능을 제공

 

5.1. Play URL

 

5.2. DVR Store Directory

  • DVR 재생을 위해 라이브 스트림에 대한 녹화가 서버에 저장되는 위치를 정의
  • 디렉터리 경로 값은 (<)보다 작음, (>)보다 큼, 따옴표(' 및 "), 백슬래시(), 파이프(|), 물음표(?) 및 별표(*) 문자를 포함할 수 없음

 

5.3. Streaming Options

  • "Live and DVR streaming" or "DVR streaming only" 선택가능

 

5.4. Recording Options

  1. Append (기본)
    • 이어 쓰기
    • 새 스트림을 기존 레코딩에 추가하며, 현재 라이브 스트림(인코더 재시작 등)의 중단을 설명하는 fail safe mechanism으로 사용하는 것이 가장 좋음

  2. Delete
    • 이전 기록을 삭제하고 새 기록을 시작
      • 재생이 끝나야 실제 삭제 되는 것으로 보임

  3. Version
    • DVR 저장소의 새 폴더에 새 스트림을 기록하기 시작함

 

5.5. DVR Window Duration

  • 3시간 내 설정하여 사용을 권장
  • 길게 설정할수록 chunk playlist가 길어져 문제가 생김
  • 최대 48시간까지 지원
  • 추가로 사용하는 요금제에 따라 별도 청구가 될 수 있음
  • If you purchased a license for Wowza Streaming Engine before January 1, 2015, contact sales@wowza.com to learn more about how to license Wowza nDVR.

 

 

6. Caption

  • Application 생성 시 설정한 내역을 토대로 동일 경로에 있으면 caption이 자동으로 입혀짐
  • 설정화면
  • HLS native play 실행 시 자막 화면(srt 사용)
    • srt file을 별도로 가져와서 처리하는 것이 아닌 Wowza에서 영상에 입혀 줌
    • PotPlayer의 경우 Closed Caption : On 설정 시 나옴

 

 

7. H.265 HLS live

  • Wowza에서는 H.265 HLS live stream을 지원
  • RTMP protocol은 H.265 spec을 지원하지 않음 → mpeg-ts UDP 방식으로 source를 ingest함
  • 향후 Wowza에서도 Enhanced RTMP ingest가 지원되기를 희망합니다.(by 문호차장님)

 

7.1. Enter a name for the new Stream File: *

  • h265test * Stream (Key)로 사용할 name 설정

 

7.2. Stream URI *

  • udp://devwowza.cdn.co.kr:20001 * Source로 사용할 URI를 지정
  • H.265의 경우 UDP://IP:Port 구성

 

7.3. 송출 후 ingest 및 재생확인

 

7.4. h.265 재생확인

 

 

8. Live record

  • Live stream을 record, VOD source로 사용할 수 있도록 저장
  • API도 제공

 

 

9. Transcoder

  • Wowza에 내장된 Transcoder를 이용
  • 사전 구성된 preset을 이용하여 Transcoding 처리.
  • 보통 ABR(Adaptive BitRate) 구성에 이용
  • Live만 지원함

  • Wowza 지원 범위
    1. Codec, Bitrate, Resolution, Profile, Key frame interval 변경
    2. Frame rate 변경은 지원 X

  • 요금에 따라 별도 비용 청구 됨

 

 

10. CMAF (Common Media Application Format)

  • Apple, Microsoft 및 MPEG와 공동으로 개발된 CMAF는 아키텍처가 두 가지 주요 측면을 포함하는 ISO 표준
  • CMAF 기능은 HLS 및 MPEG-DASH라는 가장 널리 사용되는 두 HTTP 프로토콜을 통한 스트리밍을 단순화함
  • CMAF의 공유 리소스 사용은 인코딩을 간소화하고, 컴퓨팅 리소스를 효율적으로 사용하며, CDN 대역폭을 최적화하고, 캐싱을 덜 요구하며, 규모에 맞게 스트리밍할 때 비용 효율적
  • Wowza Streaming Engine은 CMAF packetizer를 사용하여 Low-Latency HLS(LL-HLS) 스트림에 필요한 부분 세그먼트를 생성

 

 

'Media(미디어) > Wowza Streaming' 카테고리의 다른 글

Wowza에서 URL에 _definst_가 들어가야 하는 이유  (0) 2023.09.24
Wowza 포트(ports)  (0) 2023.09.24
  • OBS Studio는 장면을 무한대로 만들 수 있음
  • 한 장면에 다양한 소스를 넣을 수 있음
  • 하드 디스크에 저장되어 있는 동영상 파일을 1개 넣어 OBS Studio 실행

 

  • 소스 목록 창에서 마우스 우클릭 하거나 < + > 표시를 누르면 추가 목록이 출력

 

  • "미디어 소스"를 클릭

 

  • 동영상 파일 위치를 찾아줌 → 아래 옵션 설정
    1. 반복 재생 여부
    2. 소스가 활성화될 때 재생을 다시 시작
    3. 가능한 경우 하드웨어 디코딩 사용
    4. 재생이 끝나면 아무것도 표시하지 않기
    5. 비활성화 상태일 때 파일 닫기 등

 

  • 영상을 불러왔는데 화면 비율이 맞지 않으면 크기 조절 가능
    • 미리 보기 화면창에서 우 클릭을 하고 출력 크기 조정 (소스 크기)를 클릭하면 화면 비율에 맞도록 조절 가능

    • 조절 전(출력 크기가 작음)


    • 조절 → 출력 크기 조정(소스 크기)


    • 조절 후

 

참고 자료

'Media(미디어) > OBS' 카테고리의 다른 글

OBS 송출 설정  (0) 2023.09.18
OBS(Open Broadcaster Software)란  (0) 2023.09.18

1. 영상 송출 설정 (출력 설정) → 영상을 인코딩할 수 있도록 설정해야 함

 

▣ 인코더

  • x264로 설정
  • OBS Studio가 설치된 PC의 CPU가 인코딩하도록 설정
  • 그래픽카드가 탑재된 PC라면 그래픽카드가 영상을 인코딩할 수 있도록 설정 가능


▣ 데이터율 제어

  • VBR로 선택
    1. CBR - 고정 비트율 - 일정한 비트레이트를 유지
    2. VBR - 가변 비트율 - 움직임이 적은 곳과 많은 곳을 구분해 다르게 할당


▣ 비트레이트

  • 라이브 할 콘텐츠 Type에 따라 적정 비트레이트를 설정
  • 해상도별 비트레이트 정보는 아래 참고 자료 확인


▣ 버퍼의 크기

  • 버퍼의 크기는 설정한 비트레이트 * 5으로 설정
  • 최초 재생 시 버퍼를 미리 받아 네트워크나 순단의 이슈가 발생하더라도 미리 받아 둔 버퍼를 재생하기 때문에 영상을 전달받지 못한 구간에서 실제 시청자들은 버퍼의 영상을 재생하기에 인지하지 못함

 

▣ 키프래임 간격(Key Frame  Interval)

  • 1 ~ 2초를 권장
  • 1초로 설정할 경우, FPS 당 Key Frame이 1개씩 들어가게 됨

 

 

2.  영상 송출 설정 (해상도별 권장 비트레이트)

  • 현재 가장 많이 사용되는 해상도는 FHD(1920x1080)
  • 스트리머의 모습을 담는 영상의 경우 30fps를 권장

 

  • 해상도별 비트레이트 정보
    해상도 프레임 속도 권장 비트레이트
    1280x720 (720p) 30fps 1.5 ~ 4Mbps
    1280x720 (720p) 60fps 2.25 ~ 6Mbps
    1920x1080 (1080p) 30fps 3 ~ 6Mbps
    1920x1080 (1080p) 60fps 4.5 ~ 9Mbps
    2560x1440 (1440p) 30fps 6 ~ 13Mbps
    2560x1440 (1440p) 60fps 9 ~ 18Mbps
    3840x2160 (2160p, 4K) 30fps 13 ~ 34Mbps
    3840x2160 (2160p, 4K) 60fps 20 ~ 51Mbps

 

 

3.  영상 송출 설정 (비디오 설정) → 방송에 사용될 해상도와 FPS 값을 설정

 

▣ 기본 (캔버스) 해상도

  • 현재 모니터 해상도로 설정


▣ 출력 (조정된) 해상도

  • 방송에 송출될 해상도를 설정


▣ 축소 필터

  • 기본 해상도와 출력 해상도가 다를 때 이를 맞추기 위해 사용
  • Bilinear(낮은 성능), Bicuubic(중간), Lanczos(고성능)이 있으며, 높은 성능일수록 CPU 사용량이 증가함


▣ FPS (Frames Per Second)

  • 1초의 영상에 담긴 사진의 수를 의미
  • 사용하실 FPS는 반드시 29.97 또는 30으로 설정

 

 

4.  영상 송출 설정 (방송 설정) → 방송할 서버의 주소에 대한 정보와 영상 이름을 입력

 

 

 
▣ 서비스
  • 송출할 서버로 송출할 수 있도록 사용자 지정을 선택
  • 사용자 지정을 선택해 송출할 서버를 지정 가능

▣ 서버

▣ 스트림 키
  • 송출할 영상의 이름 지정
  • 작성된 스트림 키가 실제 콘텐츠명이 됨
  • 예시 : hippostream

 

 

5.  화면조정 → 영상 크기를 조절

  • OBS Studio에서 보이는 영상의 크기가 실제 송출될 영상의 크기가 됨

 

 

6.  영상 송출 → 방송 시작

  • 에러 문구 없이 시작이 된다면 정상적으로 송출

 

 

'Media(미디어) > OBS' 카테고리의 다른 글

OBS Studio 동영상 파일 넣기  (0) 2023.09.18
OBS(Open Broadcaster Software)란  (0) 2023.09.18

+ Recent posts