Burt.K

코코아를 좋아하는 프로그래머입니다 ;)

Filter Chain 사용하기

ffmpeg의 필터 체인을 사용하면 여러 필터를 동시에 적용할 수 있다. 필터 체인은 단일 라인 체인과 멀티 라인 체인이 있다.  예를 들어 단일 라인 체인으로 비디오 파일에 회전과 크롭을 동시에 적용할 수 있다. 멀티 라인 체인을 사용하면 동영상을 두 개의 소스로 나눈 다음에 각각의 소스에 필터를 적용할 수 있다.

ffmpeg의 단일 필터체인 문법은 아래와 같다.

ffmpeg -i <INPUT> -vf "filter1, filter2" <OUTPUT>

콤마로 필터를 구분지어 쭉 나열해 주면 된다. 크롭과 회전을 적용해 보자.

ffmpeg -i video.mp4 -vf "crop=640:256:0:0, transpose=2" -acodec copy crop_tr_video.mp4

사실 위의 결과를 멀티 라인 체인으로 구성해 똑같이 할 수 있다.  멀티 라인 체인은 세미 콜론으로 구분한다.

ffmpeg -i <INPUT> -vf "filter1 <result>; <result> filter2" <OUTPUT>

filter1 에 쓰인 result은 filter1의 출력 결과물이며 filter2에 쓰인 result은 filter2의 입력이 된다. 그럼 크롭과 회전을 동시에 처리하는 필터 체인을 구성해 보자.

ffmpeg -i video.mp4 -vf "crop=640:256:0:0 [crop_result]; [crop_result] transpose=2" -acodec copy crop_tr_video.mp4

멀티 라인 체인을 위처럼 사용하는 경우는 드물다. 단지 이해를 쉽게 하기 위해서 든 예일 뿐이다. 아래의 경우를 살펴보자.

[main]
           input --> split ---------------------> overlay --> output
                       |                             ^
                       |[tmp]                  [flip]|
                       +-----> crop --> vflip -------+
  1. input을 split 필터를 사용하여 main과 tmp 로 나눈다.
  2. main은 그대로 둔다,
  3. tmp 에는 crop과 vflip을 적용한다.
  4. 그리고 2, 3 의 결과를 합치면서 overlay를 적용해 output으로 출력한다.

이를 적용한 명령문은 아래와 같다.

ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT

참고 : http://stackoverflow.com/questions/26336234/ffmpeg-no-such-filter-filter-empty-how-to-know-it

← C/C++ 에서 GLSL 코드를 쉽게 포함해 보자.
Long 데이터 주고 받기 →