본문 바로가기

4.개발 및 운영 환경

[번역중] FFmpeg Howto

FFmpeg 번역 중입니다. 다분히 개인적인 목적이 강하지만, 다른 분들도 공유했으면 하네요.
저작권에 문제가 있으면 삭제하겠습니다.

Writer: http://ospace.tistory.com/(ospace114엣empal.컴) 2008.10.29


작업중인 ffmpeg버전:

FFmpeg SVN-r16573
libavutil     49.12. 0 / 49.12. 0
libavcodec    52. 0. 0 / 52. 0. 0
libavformat   52.23. 1 / 52.23. 1
libavdevice   52. 1. 0 / 52. 1. 0
libswscale     0. 6. 1 /  0. 6. 1
libpostproc   51. 2. 0 / 51. 2. 0(없음)


내용 목차

  1. 일반적인 문법
  2. 주요 옵션들
  3. 인코딩 :
    1. D10 (aka Sony IMX)
    2. DVCAM / DVCPRO25 / DVCPRO50
    3. VC-3 (aka Avid DNxHD)
    4. FFV1
    5. H.264 I-frame only in Highest Quality
    6. H.264 Long GOP
    7. MPEG-2 I-frame only in Highest Quality
    8. MPEG-2 Long GOP
    9. MJPEG in Highest Quality
  4. 다중화와 감싸기(Muxing and Wrapping):
    1. D10 into QuickTime ( Final Cut Pro 임포트 용도)
    2. MPEG-2 Program Stream
  5. 역다중화와 풀기(Demuxing and Unwrapping):
    1. MPEG-2 Program Stream
  6. 타임코드 관리 :
    1. MPEG-2 Start Timecode
  7. 기타등등 :
    1. 오디오 볼륨 수정
    2. 입력 스트림 선택하기
    3. 서브 클립 생성
    4. 단일 프레임에서 비디오 파일 생성하기
       

기본 문법


ffmpeg [[infile options][`-i' infile]]... {[outfile options] outfile}...

주: 기본 문법에 의하면 옵션들은 다음에 지정되는 파일에 적용이된다. 그렇기에 순서는 중요하고 같은 옵션을 여러 명령줄에 사용할 수 있다. 각 옵션들은 다음 입력 혹은 출력 파일에 적용된다.



주요 옵션

-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:             에러시 종료


추가 옵션

-map <file:stream>[:syncfile:syncstream] : 입력 스트림 매핑 설정. 

-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 :           finish encoding within shortest input

-dts_delta_threshold 임계값 :  timestamp discontinuity delta threshold

-programid :          원하는 프로그램 개수(?)

-muxdelay seconds :   최대 디먹스-디코드 지연값 설정(?)

-muxpreload seconds :  초기 디먹스-디코드 지연값 설정(?)

 

비디오 옵션

-aspect <string or float> : 비율을 설정 ( 4:3, 16:9, 1.3333, 1.7777 ). 

-b <int> : 비디오 비트레이트를 bit/s단위로 설정 (기본=200k). 

-vb bitrate :        비디오 비트레이트 설정 (in bits/s)

-vframes number :     기록할 비디오 프레임 수 지정

-s size :             화면 크기 지정 (WxH 또는 비율)

-croptop size :       상단 잘라내는 밴드 크기 지정 (픽셀단위)

-cropbottom size :   하단 잘라내는 밴드 크기 지정 (픽셀단위)

-cropleft size :     외쪽 잘라내는 밴드 크기 지정 (픽셀단위)

-cropright size :    오른쪽 잘라내는 밴드 크기 지정 (픽셀단위)

-padtop size :       위쪽 패드 밴드 크기 지정 (픽셀단위)

-padbottom size :    하단 패드 밴드 크기 지정 (픽셀단위)

-padleft size :      왼쪽 패드 밴드 크기 지정 (픽셀단위)

-padright size :     오른쪽 패드 밴드 크기 지정 (픽셀단위)

-padcolor color " :   패드 밴드 색상 지정 (16진수 000000 ~ FFFFFF)

-vn :                비디오를 비활성화

-vcodec codec :      비디오 코텍를 강제로 지정 ('copy' 은 스트림을 복제)

-sameq :             소스와 같은 비디오 퀄리티를 사용 (implies VBR)

-pass n :            패스 번호를 선택 (1 또는 2)

-passlogfile prefix :  패스 로그 파일 이름앞에 붙일 접두사 선택

-newvideo :          새로운 비디오 스트림을 현재 출력 스트림으로 추가

 

추가 비디오 옵션


-pix_fmt format :    픽셀 포맷 설정. 'list'는 지원되는 모든 픽셀 포맷 보여줌

-intra :             인트라 프래임만 사용

-vdt n :             쓰레드홀드 취소

-qscale q :          고정된 비디오 양자화범위를 사용 (VBR)

-rc_override override : rate control override for specific intervals

-me_threshold threshold : motion estimaton threshold

-deinterlace :       deinterlace pictures

-psnr :              calculate PSNR of compressed frames

-vstats :            dump video coding statistics to file

-vstats_file file :  dump video coding statistics to file

-intra_matrix matrix : specify intra matrix coeffs

-inter_matrix matrix : specify inter matrix coeffs

-top :               top=1/bottom=0/auto=-1 field first

-dc precision :      intra_dc_precision

-vtag fourcc/tag :   force video tag/fourcc

-qphist :            show QP histogram

-force_fps :         force the selected framerate, disable the best supported framerate selection

-vbsf bitstream_filter 

-vpre preset :       set the video options to the indicated preset


 

오디오 옵션

-ab <int> : 오디오 비트레이드를 bit/s 단위로 설정. 값은 정수(기본 = 64k). 

-aframes number :    set the number of audio frames to record

-aq quality :        set audio quality (codec-specific)

-ar rate :           set audio sampling rate (in Hz)

-ac channels :       set number of audio channels

-an :                disable audio

-acodec codec :      force audio codec ('copy' to copy stream)

-vol volume :        change audio volume (256=normal)

-newaudio :          add a new audio stream to the current output stream

-alang code :        set the ISO 639 language code (3 letters) of the current audio stream

-acodec <string> : 사용할 오디오 코덱을 지정. 
    ac3 : AC3 ( Dolby Digital ) 
    copy : 원본 데이터를 그대로 복사. 
    libfaac : AAC-LC 
    mp2 : MPEG Audio Layer II 
    mp3 : MPEG Audio Layer III 
    pcm_s16le : 비압축 16-bit PCM Audio 

-an : 오디오를 사용하지 않음. 

-ar <int> : 오디오 샘플링율을 Hz단위로 설정 (기본 = 44100 Hz). 


-async <int> : 오디오 동기화 방법. 오디오를 타임스템프에 맞춰서 늘리거나 줄일 수 있다. 이 매개변수는 오디오 변화에 의한 초당 최대 샘플 개수를 말한다. -async 1은 특별한 경우로 지연 수정 없이 오디오 스트림 시작 위치가 정확한 경우에만 사용가능.


추가 오디오 옵션

-atag fourcc/tag :   force audio tag/fourcc

-sample_fmt format : set sample format, 'list' as argument shows all the sample formats supported

-absf bitstream_filter 

-apre preset :       set the audio options to the indicated preset


자막 옵션

-sn :                disable subtitle

-scodec codec :      force subtitle codec ('copy' to copy stream)

-newsubtitle :       add a new subtitle stream to the current output stream

-slang code :        set the ISO 639 language code (3 letters) of the current subtitle stream

-sbsf bitstream_filter 

-spre preset :       set the subtitle options to the indicated preset


오디오/비디오 획득 옵션

Audio/Video grab options:

-vc channel :        set video grab channel (DV1394 only)

-tvstd standard :    set television standard (NTSC, PAL (SECAM))

-isync :             sync read on input

-bufsize <int> : 제어버퍼 크기를 설정 (비트단위).

-cmp <string or int> : pel 모션 평가 비교 함수 사용 - Full pel motion estimation compare function.
    sad ( 0 ) : 절대 차이 값의 합, 고속 (기본) 
    sse ( 1 ) : Squared errors 합.
    satd ( 2 ) : Absolute Hadamard transformed differences 합.
    dct ( 3 ) : Absolute DCT transformed differences 합.
    psnr ( 4 ) : Squared quantization errors 합( 비추, 저품질).
    bit ( 5 ) : 블럭에 필요한 비트 수 
    rd ( 6 ) : Rate distortion optimal, 느림.
    zero ( 7 ) : 0.
    vsad ( 8 ) : Absolute vertical differences 합.
    vsse ( 9 ) : Squared vertical differences 합.
    nsse ( 10 ) : Noise preserving sum of squared differences.
    w53 ( 11 ) : 5/3 wavelet ( Snow에서만 사용됨).
    w97 ( 12 ) : 9/7 wavelet ( Snow에서만 사용됨).
    dctmax ( 13 )
    chroma ( 14 )

-coder <string or int> :
    vlc ( 0 ) : 가변 길이 코더 / 허프만 코더.
    ac ( 1 ) : 산술연산 코더(Arithmetic coder).
    raw ( 2 ) : 원본 ( 인코딩 없음).
    rle ( 3 ) : Run-length coder.
    deflate ( 4 ) : Deflate-based coder.

-cropbottom <int> : 하단 잘려지는 화면 크기 설정(비트 단위).

-cropleft <int> : 왼쪽 잘려지는 화면 크기 설정(비트 단위).

-cropright <int> : 오른쪽 잘려지는 화면 크기 설정(비트 단위).

-croptop <int> : 상단 잘려지는 화면 크기 설정(비트 단위).

-deinterlace : 픽처를 디인터페이스 시킴(Deinterlace pictures). 

-dc <int> : Intra DC precision.

-flags <string> : 이부분은 패스.. 무슨 말인지.. ㅡ.ㅡㅋ
    aic : H.263 advanced intra coding / MPEG-4 ac prediction.
    aiv : H.263 alternative inter VLC.
    alt : Enable alternate scantable ( MPEG-2/MPEG-4 ).
    bitexact : Use only bitexact stuff ( except (i)dct ).
    cbp : Use rate distortion optimization for cbp.
    cgop : Closed GOP.
    gmc : Use global motion compensation.
    gray : Only decode/encode grayscale.
    ildct : Use interlaced DCT.
    ilme : Interlaced motion estimation.
    loop : Use loop filter.
    low_delay : Force low delay.
    mv0 : Always try a mb with mv=<0,0>.
    mv4 : Use four motion vector by macroblock ( MPEG-4 ).
    naq : Normalize adaptive quantization.
    obmc : Use overlapped block motion compensation ( H.263+ ).
    part : Use data partitioning.
    psnr : Error variables will be set during encoding.
    qpel : Use 1/4 pel motion compensation.
    qprd : Use rate distortion optimization for qp selection.
    scan_offset : Will reserve space for svcd scan offset user data.
    slice
    trell : Use trellis quantization.
    umv : Use unlimited motion vectors.

-flags2 <string> :
    aud : Access unit delimiters ( H.264 ).
    bpyramid : Allows B-frames to be used as references for predicting.
    brdo : B-frame rate-distortion optimization.
    dct8x8 : High profile 8x8 transform ( H.264 ).
    drop_frame_timecode
    fast : Allow non spec compliant speedup tricks.
    fastpskip : Fast pskip ( H.264 ).
    ivlc : Intra VLC table.
    local_header : Place global headers at every keyframe instead of in extradata.
    mixed_refs : One reference per partition, as opposed to one reference per macroblock.
    non_linear_q : Use non linear quantizer.
    noout : Skip bitstream encoding.
    sgop : Strictly enforce GOP size.
    skiprd : RD optimal macroblock level residual skipping.
    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> : 모션 추출 방법 설정.
    dia ( 1 ) : Diamond 검색, 반경 1 ( 고속).
    hex ( 2 ) : Hexagonal 검색, 반경 2 ( 기본).
    umh ( 3 ) : Uneven multi-hexagon 검색.
    esa ( 4 ) : Exhaustive 검색 ( 저속).

-mbd <string> : Macroblock decision 알고리즘 ( 고품질 모드).
    simple : mbcmp 사용( 기본 ).
    bits : fewest bits 사용.
    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> : 픽셀 포맷 설정.
    yuv420p
    yuv422p
    yuv444p
    yuv422
    yuv410p
    yuv411p
    yuvj420p
    yuvj422p
    yuvj444p
    rgb24
    bgr24
    rgba32
    rgb565
    rgb555
    gray
    monow
    monob
    pal8

-ps <int> : 패킷 크기를 비트 단위로 설정.

-qmax <int> : 최대 비디오 양자화(quantizer) 값 ( VBR ). - 역주: 가변 비트레이트에서 최대치

-qmin <int> : 최소 비디오 양자화(quantizer) 값 ( VBR ). - 역주: 가변 비트레이트에서 최소치

-qscale <int> : 고정 비디오 양자화(quantizer) 값 ( VBR ). - 역주: 고정 비트레이스 값

-r <int or string> : 프레임 율 설정 ( Hz 값, 비율 혹은 약호사용 ). 예: 25, 30000/1001, etc.

-rc_init_occupancy <int> : 디코딩 시작 전에 rate control 버퍼에 로드되는 비트 개수.

-s <string> : 프레임 크기 설정 ( 폭x높이 또는 약호).

-subcmp <string or int> : Sub pel motion estimation compare function.
    sad ( 0 ) : Sum of absolute differences, fast ( default ).
    sse ( 1 ) : Sum of squared errors.
    satd ( 2 ) : Sum of absolute Hadamard transformed differences.
    dct ( 3 ) : Sum of absolute DCT transformed differences.
    psnr ( 4 ) : Sum of squared quantization errors ( avoid, low quality ).
    bit ( 5 ) : Number of bits needed for the block.
    rd ( 6 ) : Rate distortion optimal, slow.
    zero ( 7 ) : 0.
    vsad ( 8 ) : Sum of absolute vertical differences.
    vsse ( 9 ) : Sum of squared vertical differences.
    nsse ( 10 ) : Noise preserving sum of squared differences.
    w53 ( 11 ) : 5/3 wavelet ( only used in Snow ).
    w97 ( 12 ) : 9/7 wavelet ( only used in Snow ).
    dctmax ( 13 )
    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> : 비트스트림 필터.
    dump_extra
    imxdump
    noise
    remove_extra

-vcodec <string> : 비디오 코덱 지정.
    copy : 원본 데이터 그대로 복사.
    dvvideo : DV Video
    ffv1 : FFV1 lossless video codec
    libx264 : H.264
    mpeg2video : MPEG-2 Video
    rawvideo : RAW Video
    xvid : XviD ( MPEG-4 Part 2 ) (역주: 최근 버전에서는 libxvid로 사용)

-vframes <int> : 기록할 비디오 프레임 개수 설정.

-vn : 비디오 사용하지 않음.

-vol <int> : 오디오 볼륨 수정 ( 256=보통).

-vsync <int> : 비디오 동기화 방법. 비디오를 타임스템프에 맞춰서 줄이거나 늘릴 수 있다. 이는 프레임을 복제하거나 버리는 방법을 사용한다. -map 옵션을 사용해서 타임스탬프로 사용할 스트림을 선택할 수 있다.  비디오나 오디오를 변경없이 내버려둘 수 있고 변경되지 않은 것에 동기화 시킬수 있다.

-vtag <string> : 비디오 FourCC/Tag 지정.


AVCodecContext AVOptions:



AVFormatContext AVOptions:



SWScaler AVOptions:





File formats:





D10 (aka Sony IMX) Encoding


ffmpeg -i <input_file> -vcodec mpeg2video -r 25 -pix_fmt yuv422p -minrate 50000k -maxrate 50000k -b 50000k -intra -flags +ildct+low_delay -dc 10 -flags2 +ivlc+non_linear_q -ps 1 -qmin 1 -qmax 3 -top 1 -bufsize 2000000 -rc_init_occupancy 2000000 -rc_buf_aggressivity 0.25 -an output.m2v 

주 :
- 25 fps 컨텐트에서만 작동.
- 30/40/50 Mbps D10 essence를 위해서 minrate, maxrate 과 b 값을 30000k / 40000k / 50000k 으로 설정.
- 30/40/50 Mbps D10 essence를 위해서 bufsize와 rc_init_occupancy 값을 1200000 / 1600000 / 2000000 으로 설정.
- 720x576 소스에서 720x608 D10 이미지로 크기를 변경하고자 하면 -padtop 32 옵션을 추가.




DVCAM / DVCPRO25 / DVCPRO50 인코딩


ffmpeg -i <input_file> -pix_fmt yuv420p output_DVCAM.dv
ffmpeg -i <input_file> -pix_fmt yuv411p output_DVCPRO25.dv
ffmpeg -i <input_file> -pix_fmt yuv422p output_DVCPRO50.dv

- 픽셀 포멧이 각각 인코딩에 맞춰서 변경됨. (yuv420p, yuv411p, yuv422p)



VC-3 (aka Avid DNxHD) 인코딩


ffmpeg -i <input_file> -vcodec dnxhd -b <bitrate> -an output.mov 

주 :
- <bitrate>은 다음 값중에 택일 : 36Mb, 60Mb, 90Mb, 120Mb, 185Mb ( 자세한 것은 다음 테이블 참조 ).
- 인터페이스 모드를 위한 옵션: -flags +ildct
- 최상 품질을 위한 옵션( 매우 느림! ) : -mbd rd 

(역주): 근데 dnxhd 코덱이 없다고 나오는데 어떻게 된거지? ㅡ.ㅡㅋ

지원 해상도 :

프로젝트 포멧 해상도 프레임 크기 비트 FPS <bitrate>
1080i / 59.94 DNxHD 220 1920 x 1080 8 29.97 220Mb
1080i / 59.94 DNxHD 145 1920 x 1080 8 29.97 145Mb
1080i / 50 DNxHD 185 1920 x 1080 8 25 185Mb
1080i / 50 DNxHD 120 1920 x 1080 8 25 120Mb
1080p / 25 DNxHD 185 1920 x 1080 8 25 185Mb
1080p / 25 DNxHD 120 1920 x 1080 8 25 120Mb
1080p / 25 DNxHD 36 1920 x 1080 8 25 36Mb
1080p / 24 DNxHD 175 1920 x 1080 8 24 175Mb
1080p / 24 DNxHD 115 1920 x 1080 8 24 115Mb
1080p / 24 DNxHD 36 1920 x 1080 8 24 36Mb
1080p / 23.976 DNxHD 175 1920 x 1080 8 23.976 175Mb
1080p / 23.976 DNxHD 115 1920 x 1080 8 23.976 115Mb
1080p / 23.976 DNxHD 36 1920 x 1080 8 23.976 36Mb
1080p / 29.7 DNxHD 45 1920 x 1080 8 29.97 45Mb
720p / 59.94 DNxHD 220 1280x720 8 59.94 220Mb
720p / 59.94 DNxHD 145 1280x720 8 59.94 145Mb
720p / 50 DNxHD 175 1280x720 8 50 175Mb
720p / 50 DNxHD 115 1280x720 8 50 115Mb
720p / 23.976 DNxHD 90 1280x720 8 23.976 90Mb
720p / 23.976 DNxHD 60 1280x720 8 23.976 60Mb





FFV1 인코딩


ffmpeg -i <input_file> -vcodec ffv1 -an output.mov 

(역주): 플래시 동영상 파일 인코딩. 위는 -an으로 오디오 입력은 받지 않음.



H.264 I-frame 고품질으로만 인코딩only Highest Quality Encoding


ffmpeg -i <input_file> -vcodec libx264 -cqp 1 -intra -coder ac -an output.mp4

(역주) -coder의 정확한 역활을 모르겠다. 다른 것도 잘모르지만.. ㅡ.ㅡㅋ



H.264 Long GOP Encoding


ffmpeg -y -i <input_file> -pass 1 -deinterlace -vcodec libx264 -b <video_bitrate> -g <gop_size> -bf 3 -b_strategy 1 -trell 2 -subcmp 2 -cmp 2 -coder 1 -flags +loop -qmax 51 -acodec libfaac -ab <audio_bitrate> output.mp4

ffmpeg -y -i <input_file> -pass 2 -deinterlace -vcodec libx264 -b <video_bitrate> -g <gop_size> -bf 3 -b_strategy 1 -trell 2 -subcmp 2 -cmp 2 -coder 1 -flags +loop -qmax 51 -acodec libfaac -ab <audio_bitrate> output.mp4




MPEG-2 I-frame only Highest Quality Encoding


ffmpeg -i <input_file> -vcodec mpeg2video -qscale 1 -qmin 1 -intra -an output.m2v




MPEG-2 Long GOP 인코딩


ffmpeg -i <input_file> -vcodec mpeg2video -b <video_bitrate> -g <gop_size> -bf 2 -b_strategy 1 -acodec mp2 -ab <audio_bitrate> -f vob output.mpg




MJPEG 고품질로 인코딩


ffmpeg -i <input_file> -vcodec mjpeg -qscale 1 -an output.avi




D10 을 QuickTime으로 포장하기


ffmpeg -i <input_file> -vcodec copy -acodec pcm_s16le -vtag mx5p -vbsf imxdump output.mov 

주 :
- 이 특징은 패치된 FFmpeg 버전을 필요로 한다. 현 SVN에는 유효하지 않다. 더 많은 정보는 Baptiste Coudurier으로 연락하세요.
- D10 30/40/50 PAL를 위해서는 -vtag to mx3p / mx4p / mx5p 을 설정 혹은,  D10 30/40/50 NTSC를 위해서는 mx3n / mx4n / mx5n 를 설정.
- 입력 D10 이미지 크기는 반드시 720x608이어야 함. ( D10으로 인코딩할 경우 원본 이미지 크기가 720x576이라면 -padtop 32 옵션을 사용하다..
- Final Cut Pro 용도.




MPEG-2 프로그램 스트림 먹싱


ffmpeg -genpts 1 -i ES_Video.m2v -i ES_Audio.mp2 -vcodec copy -acodec copy -f vob output.mpg

Note : In order to mux multiple audio tracks into the same file :
ffmpeg -genpts 1 -i ES_Video.m2v -i ES_Audio1.mp2 -i ES_Audio2.mp2 -vcodec copy -acodec copy -f vob output.mpg -newaudio




MPEG-2 프로그램 스트림 디먹싱


ffmpeg -i input.mpg -vcodec copy -f mpeg2video ES_Video.m2v -acodec copy -f mp2 ES_Audio.mp2 

주 : 이는 다중 오디오 채널이 있는 파일에도 동작한다.:
ffmpeg -i input.mpg -vcodec copy -f mpeg2video ES_Video.m2v -acodec copy -f mp2 ES_Audio1.mp2 -acodec copy -f mp2 ES_Audio2.mp2




MPEG-2 시작 타임코드


ffmpeg -i <input_file> -timecode_frame_start <start_timecode> -vcodec mpeg2video -an output.m2v

주 : 시작 타임 코드는 프래임 개수로 설정. 예를 들어, 18:12:36:15에서 시작하려면, timecode_frame_start 을 1638915으로 설정한다. ( 이는 25 fps인 동영상).

(역주) 좀더 설명하면, 18:12:36:15은 18시 12분 36초 15으로서 이를 모두 초로 변경하면 65556초 15이다. 여기에 25fps를 곱하면 원하는 시작 프레임수를 얻을 수 있다.



Audio Volume Modification


ffmpeg -i <input_file> -vol <audio_volume> -acodec <audio_codec> <output_file>




Input Stream Selection


ffmpeg -i input.vob -map 0:2 -acodec aac -ab <audio_bitrate> -vn output.mp4

사용할 트랜스코드 오디오 스트림은 #0:2.



Sub-clip 생성


ffmpeg -i <input_file> -ss <timecode> -t <timecode> -vcodec copy -acodec copy <output_file>




단일 프레임으로 비디오 파일 생성


ffmpeg -loop_input -vframes <number_of_frames> -i <input_file> <output_file>



여러 파일을 하나로 연속해서 비디오 파일 생성

type VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB | ffmpeg -i - -sameq -an -f avi output.avi


주: type은 도스에서 파일 내용을 화면에 표시하는 명령어. 리눅스에서 한다면 cat를 사용하면 된다.
      "-i"옵션에 "-"은 파이프 통해서 수신받는다는 의미.


주: 특정 파일들은 연속해서 처리하지 못하네요. youtube에 여러 개로 불리된 동영상을 받아서 하나로 합치는 중에 처음 파일만 인코딩되고 나머지 파일은 안되는 문제가 있네요. 개별적으로는 이상이 없네요. 위의 옵션은 VOB파일 테스트시 이상없이 잘 되었던 옵션입니다.


Tip: 팁이라고 할 것은 없고, 다른 flv, avi 같은 여러 파일을 하나로 합칠려고 바로 위의 옵션을 사용하면 안된다. 먼저 flv나 avi를 VOB로 변화시키고, 그런 다음에 위의 명령을 이용하여 VOB파일들을 합치면 된다. 그러면 자동적으로 flv나 avi의 인코딩 타입도 같은 옵션으로 변경되어 VOB로 잘 합쳐지게 될 것입니다.




특정 폴더에 있는 모든 파일을 인코딩 배치 처리


for /f "usebackq tokens=1,2* delims=." %i in (`dir /b /d *.wma`) do ffmpeg -i "%i.%j" -y -acodec libmp3lame -ab 128k "%i.mp3"

주: MS 도스창에서 유효한 옵션입니다. 리눅스 쉘에서는 쉘 스크립트로 재 작성해야 합니다. 수정할 부분은 다음과 같네요.

*.wma : 인코딩하고 싶은 동영상 파일에 대한 필터(ex. *.wma - 확장자가 wma인 모든 파일, abc*.avi - 첫음 abc로 시작하는 모든 avi 파일)

ffmpeg 옵션: 이부분은 위의 옵션을 참조하세요.




수정이력:

2008.10.29 ospace 초벌 번역, 대충 한번 번역함(ospace).
2008.11.11 ospace 중간 번역 완료, flag, subcmp 옵션을 제외하고는 거의 대부분 변역 완료(ospace).
2008.11.19 ospace "여러 파일을 하나로 연속해서 비디오 파일생성" 부분 추가,  비디오 인코더 libxvid 주석 추가.
2008.12.01 ospace 작업 중인 버전정보추가. 기본 옵션 순서를 ffmpeg 도움말 순서에 맞춤. 추가 옵션 내용 추가하고 일부 해석.
2008.12.11 ospace 여러 파일 합치는 부분 문제 이슈 등록과 잘못된 "주" 위치 수정.
2008.12.11 ospace 인코딩 배치 처리 부분의 설명 추가
2009.11.05 ospace 추가된 옵션과 새로운 도움말에 맞춰서 순서 재구성 및 format, codec을 따로 분리 표시
2009.11.10 ospace 새로 추가된 옵션 일부 번역. 중요하지 않은 옵션 항목들은 펼침항목으로 묶음. 여러 파일 합치는 것에 팁 추가


TODO:
-. 각 잘 모르는 용어에 대한 간단한 주석이 필요 (GOP etc).
-. 사용 예에 대한 옵션 설명이 필요.
-. 추가된 옵션에 대해서 번역 필요



참조:
http://www.itbroadcastanddigitalcinema.com/ffmpeg_howto.html
ffmpeg help


반응형