Categories
FFmpeg

FFmpeg 에서 pad 필터 사용하기

FFmpeg 의 pad 필터를 사용하는 방법을 알아보자.

1. pad 필터

아래와 같은 320×240 해상도의 동영상이 있다고 하자.

이 동영상의 주위에 핑크색 패딩 (padding) 을 더하면 아래와 같이 된다.

FFmpeg 에서는 이러한 효과를 얻기 위해 pad 필터를 사용한다.

2. FFmpeg 명령

다음은 앞에서 보인 예의 결과를 얻기 위해 실제로 사용된 FFmpeg 명령이다.

ffmpeg -i original.mkv -vf “pad=w=640:h=480:x=(ow-iw)/2:y=(oh-ih)/2:color=pink” output.mkv

original.mkv 는 입력 동영상의 이름이다.

pad 는 적용할 필터의 이름이다.

w 파라미터는 출력 동영상의 가로 크기를 지정한다.

h 파라미터는 출력 동영상의 세로 크기를 지정한다.

x 파라미터는 입력 동영상의 가로 위치를 지정한다.

y 파라미터는 입력 동영상의 세로 위치를 지정한다.

ow 파라미터에는 출력 동영상의 가로 크기가 저장되어 있다.

iw 파라미터에는 입력 동영상의 가로 크기가 저장되어 있다.

oh 파라미터에는 출력 동영상의 세로 크기가 저장되어 있다.

ih 파라미터에는 입력 동영상의 세로 크기가 저장되어 있다.

(ow-iw)/2 수식과 (oh-ih)/2 수식은 입력 동영상을 출력 동영상의 중앙에 위치시키기 위해 사용되었다.

color 파라미터는 패딩 영역 (padded area) 의 색상을 지정한다.

output.mkv 는 출력 동영상의 이름이다.

Categories
FFmpeg

우분투 22.04 의 v4l-utils 패키지

우분투 22.04 의 v4l-utils 패키지에 대해 알아보자.

1. v4l-utils 패키지

v4l-utils 패키지는 video4linux 유틸리티 명령들을 모아놓은 컬렉션 (collection) 이다.

여기에 포함된 명령들에는 v4l2-ctl, v4l2-compliance, v4l2-dbg, rds-ctl, cx18-ctl 등이 있다.

2. v4l-utils 패키지 설치

APT (Advanced Packaging Tool) 의 데이터베이스를 업데이트한다.

sudo apt update

v4l-utils 패키지를 설치한다.

sudo apt install v4l-utils

Categories
FFmpeg

FFmpeg으로 캡처 카드 입력을 동영상 파일로 저장하는 방법

FFmpeg 을 이용해서 캡처 카드의 입력을 동영상 파일로 저장하는 방법을 알아보자.

1. 캡처 카드의 비디오 정보 알아내기

아래 명령으로 캡처 카드의 비디오 장치 이름을 알아낸다.

v4l2-ctl –list-devices

비디오 장치의 이름은 /dev/video0 인 경우가 대부분이다.

아래 명령으로 캡처 카드의 비디오 해상도 정보를 알아낸다.

v4l2-ctl –list-formats-ext

v4l2-ctl 명령 대신 ffmpeg 명령을 사용해도 된다.

ffmpeg -hide_banner -f v4l2 -list_formats all -i /dev/video0

2. 캡처 카드의 오디오 정보 알아내기

아래 명령으로 캡처 카드의 오디오 장치 이름을 알아낸다.

arecord -L | grep hw

오디오 장치 이름은 항상 ‘hw:’ 로 시작한다.

‘hw:CARD=U0x1e4e0x7016,DEV=0’ 은 오디오 장치 이름의 한 예이다.

3. FFmpeg 명령어 구성

앞에서 알아낸 정보를 이용해서 FFmpeg 명령어를 구성하면 다음과 같다.

ffmpeg -f v4l2 -video_size 1920×1080 -i /dev/video0 -f alsa -ac 2 -i hw:CARD=U0x1e4e0x7016,DEV=0 -c:v libx264 -preset ultrafast -c:a aac capture.mkv

‘-ac 2’ 옵션은 스테레오 입력을 받기 위한 것이다.

-preset 옵션은 인코딩 속도를 지정한다. 속도가 느릴수록 동영상의 품질이 좋아진다. 캡처 카드의 입력을 저장할 때는 매우 빠른 인코딩 속도가 필요하므로 옵션값을 ultrafast 로 지정한다.

Categories
FFmpeg

FFmpeg으로 비디오 위에 비디오를 오버레이 (overlay) 하기

FFmpeg 으로 비디오 위에 다른 비디오를 오버레이 (overlay) 해 보자.

오버레이 효과를 위해서 overlay 필터를 사용한다.

1. 첫번째 예제

다음 명령을 살펴보자.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=0:y=0[v]” output.mp4

이 명령은 over.mp4 의 비디오 스트림을 main.mp4 의 비디오 스트림 위에 오버레이 한다.

overlay 필터의 x 옵션은 메인 (main) 비디오 안에서 오버레이 비디오의 가로 위치를 지정한다.

overlay 필터의 y 옵션은 메인 비디오 안에서 오버레이 비디오의 세로 위치를 지정한다.

over.mp4 비디오는 main.mp4 비디오의 (0, 0) 위치에 오버레이 된다.

오버레이 했을 때 위에 있는 비디오를 오버레이 비디오 라고 부르고 아래에 있는 비디오를 메인 비디오 라고 부른다.

오버레이 비디오의 위치가 (x, y) 라는 말은 오버레이 비디오의 좌측 상단 꼭지점이 메인 비디오의 (x, y) 위치에 놓인다는 것을 의미한다.

2. shortest 옵션

메인 비디오와 오버레이 비디오의 재생 시간이 다를 때 shortest 옵션을 사용한다.

shortest 옵션을 1 로 지정하면 재생 시간이 짧은 비디오가 끝날 때 오버레이 작업이 끝난다. 완성된 출력 스트림의 재생 시간은 짧은 비디오의 재생 시간과 같게 된다.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=0:y=0:shortest=1[v]” output.mp4

shortest 옵션의 기본값은 0 이다.

3. 임의의 위치에 오버레이하기

오버레이 비디오를 메인 비디오의 우측 상단에 오버레이 해보자.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=W-w:y=0[v]” output.mp4

x 옵션의 값을 W-w 로 지정했다. W 는 메인 비디오의 가로 크기이고 w 는 오버레이 비디오의 가로 크기이다.

메인 비디오의 가로 크기는 1920 픽셀이고 오버레이 비디오의 가로 크기는 400 픽셀이라고 가정해 보자. 이 경우에 오버레이 비디오의 가로 위치는 1520 (1920 – 400) 이 된다.

오버레이 비디오의 위치는 (1520, 0) 이 된다.

오버레이 비디오를 메인 비디오의 우측 하단에 오버레이 해보자.

ffmpeg -i main.mp4 -i over.mp4 -filter_complex “[0:v][1:v]overlay=x=W-w:y=H-h[v]” output.mp4

y 옵션의 값을 H-h 로 지정했다. H 는 메인 비디오의 세로 크기이고 h 는 오버레이 비디오의 세로 크기이다.

메인 비디오의 세로 크기는 1080 픽셀이고 오버레이 비디오의 세로 크기는 300 픽셀이라고 가정해 보자. 이 경우에 오버레이 비디오의 세로 위치는 780 (1080 – 300) 이 된다.

오버레이 비디오의 위치는 (1520, 780) 이 된다.