알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

[ffmpeg] 툴 분석 (4) 본문

멀티미디어/ffmpeg 분석

[ffmpeg] 툴 분석 (4)

백곳 2017. 10. 12. 20:04

[ffmpeg] 툴 분석 (4)


Stream selection


미디어 파일의 각각의 스트림 파일 포함 또는 제외 하여 출력 파일을 만들수 있습니다. 


 -vn/-an/-sn/-dn 등의 옵션을 통해 -vn : 비디오를 없엔다. 


예를 들면 

ffmpeg -i in.flv -vn -acodec libmp3lame -ar 44.1k -ac 2 -ab 128k out.mp3


를하면 -vn을 통해 비디오를 제외한 나머지로 mp3 음성 파일을 만들어 줍니다. 


모든것을 수동 조작을 위해서 -map 옵션을 사용 할 수있습니다.


-map 에 대한 옵션 설명 은 

  • 비디오소스+오디오소스 맵핑하여 합치는 명령
    ffmpeg -i 비디오소스경로 -i 오디오소스경로 -c copy -map 0:v -map 1:a -y 저장할경로

-map : 소스 매핑
-map 0:v는 첫번째 Input의 video source를 사용하겠다는 것. 스트림 별로 선택도 가능하다.



Options


모든 숫자의 옵션은 SI unit 표기 법을 따릅니다. 

SI unit

example: ’K’, ’M’, or ’G’.

여기에 'B' 를  붙히면 ’KB’, ’MiB’ 1024단위로 인식 합니다. 


옵션의 앞에 no를 붙히면 disable 을 의미합니다. 


예를 들어 -nofoo 면 foo 라는 옵션을 disable 라는 의미가 됩니다. 




Stream specifiers


-codec:a:1 ac3  의 옵션은 a:1 에서 a는 audio 를 의미하고 1은 2번째를 의미합니다. 0이 첫번째 입니다. 즉 ac3 코덱은 2번째 코덱

이라고 명시하는 것입니다. 


-b:a 128K  라는 옵션은 모든 audio 음질은 128K 라는 의미 이빈다. 


-codec: copy 은 

ffmpeg -i src.avi -ss 60 -t 300 -vcodec copy -acodec copy out.avi

이러한 명령어에서 

설명: src.avi의 60초부터 300초 후(60+300초)까지 잘라냄

-ovc copy: 비디오코덱을 원본 그대로

-oac copy: 오디오코덱을 원본 그대로

라는 의미 입니다. 


-threads:2 작업을 하는데 쓰레디는 2개 사용 하겠다는 의미 입니다. 


stream_index 

 스트림 인덱스,-thread:1 4 는 두 번째 스트림에 대한 tread 수를 4로 설정한다는 것.


stream_type[:stream_index]

 stream_type는 다음 중 한가지를 쓸 수 있는데, 'v', 'V'는 비디오(Video), 'a'는 오디오(Audio), 's'는 자막(Subtitle), 'd'는 데이터, 't'는 첨부(Attachments)를 의미한다. 여기에서 'v' 타입은 모든 비디오 스트림이고, 'V'는 추가되는 사진이다. 비디오 썸네일, 커버아트등이 첨부되지 않은 비디오 스트림을 의미한다. stream_index를 부여했다면, 인덱스를 가지는 해당 스트림에서만 적용된다. 


p:program_id[:stream_index]

 stream_index가 주어지면 프로그램의 숫자 stream_index와 ID가 program_id 인 스트림을 일치시킨다. 그렇지 않으면 프로그램의 모든 스트림과 일치시킨다.


#stream_id or i:stream_id

 스트림이 stream_id를 가진다.


m:key[:value]

 메타데이터 태그(key)를 사용하여 지정된 값을 스트림에 일치시킨다. value 값이 없다면, 지정된 캐그를 포함한 스트림을 임의의 값에 매치한다.


 사용 가능한 구성으로 스트림을 일치 시키려면 코덱을 정의해야하며 비디오 크기 또는 오디오 샘플 속도와 같은 필수 정보가 있어야 한다. ffmpeg에서 메타데이터 매칭은 입력파일에 대해서만 제대로 작동한다는 점에 유의바란다.



출처: http://whiteduck.tistory.com/131 [이헌제의 블로그]




Generic options


-L

라이센스


-h, -?, -help, --help [arg]

도움말. arg를 쓰면 해당 도움말만을 보여준다. arg가 없으면 기본적인 tool option 만을 보여준다.


 arg에 올 수 있는 값은 다음과 같다.


long

보충설명을 추가하여 보여준다.


full

encoders, decoders, demuxers, muxers, filters 등의 공유 및 개인 옵션을 포함하여 모든 옵션 리스트를 보여준다.  


decoder=decoder_name

decoder_name이라는 이름의 디코더에 대한 자세한 정보를 보여준다. 모든 디코더 목록을 얻으려면 -decoders 옵션을 사용한다.


encoder=encoder_name

encoder_name이라는 이름의 인코더에 대한 자세한 정보를 보여준다. 모든 인코더 목록을 얻으려면 -encoders 옵션을 사용한다.


demuxer=demuxer_name

demuxer_name이라는 이름의 demuxer에 대한 자세한 정보를 보여준다. 모든 demuxers과 muxers 목록을 얻으려면 -formats 옵션을 사용한다.


muxer=muxer_name

muxer_name이라는 이름의 muxer에 대한 자세한 정보를 보여준다. 모든 demuxers과 muxers 목록을 얻으려면 -formats 옵션을 사용한다.


filter=filter_name

filter_name이라는 이름의 필터에 대한 자세한 정보를 보여준다. 모든 필터 목록을 얻으려면 -filters 옵션을 사용한다.


-version

버전 정보.


-formats

가용가능한 포멧 ( 장비를 포함해서 )


-devices

가용가능한 장비


-codecs

libavcodec에 대한 모든 코덱 정보


이 문서 전체에서 'codec'은 "미디어 비트 스트림 형식"의 줄임말로 작성되었다.


-decoders

가용가능한 decoders


-encoders

가용가능한 encoders


-bsfs

가용가능한 비트 스트림 필터


-protocols

가용가능한 프로토콜


-filters

가용가능한 libavfilter의 필터


-pix_fmts

가용가능한 픽셀 형식


-sample_fmts

가용가능한 샘플 형식


-layouts

채널명과 기준 채널 레이아웃


-colors

인식되는 색상명


-sources device[,opt1=val1[,opt2=val2]...]

 입력 장치의 자동 감지 소스를 표시, 일부 장치는 자동 감지 할수 없는 시스템 종속적 소스 이름을 제공할 수 있다. 반환된 목록은 항상 완전하지만은 않다.


ffmpeg -sources pulse,server=192.168.0.4


-sinks device[,opt1=val1[,opt2=val2]...]

 출력 장치의 자동 감지 싱크를 표시, 일부 장치는 자동 감지할 수 없는 시스템 종속 싱크 이름을 제공할 수 있다. 반환된목록은 항상 완전하지만은 않다.


ffmpeg -sinks pulse,server=192.168.0.4


-loglevel [repeat+]loglevel | -v [repeat+]loglevel

라이브러리가 사용하는 로깅 레벨 설정. "repeat+" 를 설정하면 반복되는 로그를 한 줄에 압축시키지 않고 여러 줄에 표시하며, "마지막 메시지가 n번 반복됩니다." 메시지는 더 이상 나오지 않는다. "repeat"는 단독으로 사용될 수 있는데, 단독으로 사용하고 loglevel이 설정되어 있지 않은 경우 기본 loglevel이 적용된다. 여러 개의 loglevel 파라미터가 주어졌다면, "repeat"를 사용하여 loglevel을 변경하지 않는다. 


 loglevel 은 다음과 같다.:


‘quiet, -8’

로그 없음.


‘panic, 0’

assertion 실패와 같이 프로세스 충돌과 같은 치명적인 에러만 표시한다. 아직 용도가 있지는 않다.


‘fatal, 8’

치명적인 에러를 표시한다.  프로세스가 절대 진행될 수 없는 에러이다. 


‘error, 16’

복구할 수 있는 오류를 포함해서 모든 에러를 표시한다.


‘warning, 24’

모든 경고와 에러를 표시한다. 잘못되거나 예상치 못한 이벤트와 관련된 메세지를 표시합니다.


‘info, 32’

프로세스가 진행되는 과정에서 나오는 정보 메세지를 표시한다. 추가적으로 경고나 에러 메시지를 포함하고 디폴트레벨로 사용된다.


‘verbose, 40’

info보다 자세한 정보가 표시된다.


‘debug, 48’

모든 메세지를 표시한다. 


‘trace, 56’

기본적으로 프로그램은 stderr에 기록합니다. 착색(글자 색상)이 터미널에 의해 지원되는 경우, 색상은 오류 및 경고를 표시하는 데 사용됩니다. 환경 변수 AV_LOG_FORCE_NOCOLOR 또는 NO_COLOR를 설정하여 로그 채색을 비활성화하거나 환경 변수 AV_LOG_FORCE_COLOR를 강제 설정할 수 있습니다. NO_COLOR 환경 변수의 사용은 향후 제공되지 않을 예정이며 향후 FFmpeg 버전에서 삭제 될 예정입니다.


-report

전체 명령 행과 콘솔 출력을 현재 디렉토리의 program-YYYYMMDD-HHMMSS.log 파일에 덤프. 이 파일은 버그 리포트에 유용하게 사용된다. -loglevel verbose의 메세지를 덤프한다.


환경 변수 FFREPORT를 임의의 값으로 설정하면 동일한 효과가 있습니다. 값이 ':'로 분리 된 key = value 시퀀스이면이 옵션이 보고서에 영향을줍니다. 옵션 값이 특수 문자 또는 옵션 구분 기호 ':'를 포함하는 경우 나오게 된다. (ffmpeg-utils 매뉴얼의 "인용 및 이스케이프"절 참조).



다음 옵션은 인식이 된다. : 


file

파일 이름을 설정; '%p'는 프로그램 이름이 붙여지고, '%t'는 타임스템프, '%%' 는 %를 붙이고 싶을 때 사용한다.


level

숫자 값을 사용하여 로그 레벨을 지정할 수 있다. ( -loglevel 참고 )


예를 들면, 파일 이름을 ffreport.log 로 하고, 로그 레벨 32(info)로 한다면 :


FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

환경 변수를 구문 분석 할 때 발생하는 오류는 치명적이지는 않으며 보고서에 나타나지 않습니다.


-hide_banner

배너 숨기기


모든 FFmpeg tool은 copyright notice, 빌드 옵션, 라이브러리 버전을 보여준다. 이 옵션은 그런 정보를 표시하지 않게 한다.


-cpuflags flags (global)

cpu flag를 clearing하고 flag를 세팅합니다. 이 옵션은 테스트용입니다. 자신이 하는 일을 모르는 경우 사용하지 마십시오.


ffmpeg -cpuflags -sse+mmx ...

ffmpeg -cpuflags mmx ...

ffmpeg -cpuflags 0 ...


가능한 플래그는 다음과 같습니다. : 


‘x86’

‘mmx’

‘mmxext’

‘sse’

‘sse2’

‘sse2slow’

‘sse3’

‘sse3slow’

‘ssse3’

‘atom’

‘sse4.1’

‘sse4.2’

‘avx’

‘avx2’

‘xop’

‘fma3’

‘fma4’

‘3dnow’

‘3dnowext’

‘bmi1’

‘bmi2’

‘cmov’


‘ARM’

‘armv5te’

‘armv6’

‘armv6t2’

‘vfp’

‘vfpv3’

‘neon’

‘setend’


‘AArch64’

‘armv8’

‘vfp’

‘neon’


‘PowerPC’

‘altivec’


‘Specific Processors’

‘pentium2’

‘pentium3’

‘pentium4’

‘k6’

‘k62’

‘athlon’

‘athlonxp’

‘k8’



-opencl_bench

 이 옵션은 사용 가능한 모든 OpenCL장치를 벤치마크하고 결과를 보여주는데 사용된다. 이 옵션은 FFmpeg의 --enable-opencl 이 컴파일 되었을 경우에만 사용이 가능합니다.


 FFmpeg이 --enable-opencl 설정이 됬으면, OpenCL 컨텍스트에 대한 옵션설정은 -opencl_options에 대하여 설정이 가능합니다.  ffmpeg-utils 메뉴얼의 "OpenCL Options"를 보면 지원되는 옵션에 관한 설명을 볼 수 있습니다. 그 중에서도,  OpenCL 코드를 실행할 특정 플랫폼과 장치를 선택할 수 있는 기능이 있습니다. 기본적으로, FFmpeg은 첫 번째 플랫폼의 첫 번째 장비에서 실행됩니다. OpenCL 컨텍스트를 위한 옵션은 사용자가 선택한 OpenCL 장치를 선택할 때 유연성을 제공하지만  대부분의 사용자는 해당 시스템에 대해 가장 빠른 OpenCL 장치를 선택하려고 합니다.


 이 옵션은 사용자 시스템에 적합한 장치를 식별하여 가장 효율적인 구성을 선택할 수 있도록 도와줍니다. 내장된 벤치마크는 모든 OpenCL 장치에서 실행되며 성능은 각 장치에 대해 측정됩니다. 결과 목록의 장치는 가장 빠른 장치를 먼저 나열한 상태에서 성능에 따라 정렬됩니다. 사용자는 OpenCL 가속 코드에 대해 최상의 성능을 얻기 위해 -opencl_options를 통해 가장 적합한 것으로 간주되는 장치를 사용하여 ffmpeg를 호출할 수 있습니다.


가장 빠른 OpenCL 장치를 사용하는 일반적인 사용법은 다음 단계를 통하여 보여집니다.


다음 명령을 실행합니다. : 


ffmpeg -opencl_bench

목록에 있는 가장 빠른 기기의 플랫폼ID(pidx)와 장치ID(didx)를 기록해두었다가 다음명령을 사용하여 플랫폼 및 장치를 선택한다.


ffmpeg -opencl_options platform_idx=pidx:device_idx=didx ...


-opencl_options options (global)

OpenCL 환경 옵션을 설정합니다. 이 옵션은 FFmpeg이 -enable-opencl을 컴파일 했을 경우에 사용이 가능합니다.


옵션은 ':'으로 구분된 (key,value)옵션 쌍의 목록이어야 합니다. ffmpeg-utils 메뉴얼의 "OpenCL Options"를 보면 지원되는 옵션에 관한 설명을 볼 수 있습니다. 



출처: http://whiteduck.tistory.com/131 [이헌제의 블로그]


이 후에도 https://www.ffmpeg.org/ffmpeg.html  수많은 옵션들이 존재 합니다.


여기 까지 기본 적인 사용에 필요한 틀만 익히고 


이후 필요한 옵션은 




목차를 보고 사용 하면 될듯 합니다. 




'멀티미디어 > ffmpeg 분석' 카테고리의 다른 글

[ffmpeg] 툴 분석 (3)  (0) 2017.10.10
[ffmpeg] 툴 분석 (2)  (0) 2017.10.02
[ffmpeg] 툴 분석 (1)  (0) 2017.10.01
Comments