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

 

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

+ Recent posts