메뉴 닫기

FFMPEG 을 이용한 동영상 인코딩

250px-FFmpeg_Logo_new.svg

FFmpeg은 디지털 음성 스트림과 영상 스트림에 대해서 다양한 종류의 형태로 기록하고 변환하는 컴퓨터 프로그램입니다.

동영상 변환, 분할, 합치기, 썸네일 생성 등에 대해 살펴보겠습니다.

 

1. 동영상 인코딩

FFMPEG 을 이용하여 동영상을 변환할 수 있다.

 

ffmpeg -y ⓐ -i ⓑ -acodec ⓒ -ab ⓓ -ar ⓔ -ac ⓕ -b:a ⓖ -vcodec ⓗ -level ⓘ -b:v ⓙ
-r ⓚ -s ⓛ -threads ⓜ -strict experimental ⓝ ⓞ

ⓐ -y : 출력파일을 쓸 때 같은 이름의 파일이 있어도 확인없이 덮어쓰기를 하겠다는 의미.
ⓑ -i <입력파일이름> : 변환할 원본 동영상 파일 이름을 지정합니다.

ⓒ -acodec <오디오코덱> : 오디오 코덱을 지정한다. 여기서는 aac 로 함.
ⓓ -ab <숫자> : 오디오 비트레이트를 지정한다.
ⓔ -ar <숫자> : 오디오 샘플링 레이트를 지정한다.
ⓕ -ac <숫자> : 오디오 채널을 지정한다.
ⓖ -b:a <숫자> : 오디오 비트레이트를 지정한다.
ⓗ -vcodec <비디오코덱> : 비디오 코덱을 지정한다. 여기서는 libx264 로 함. (H.264 코덱)
ⓘ -level <숫자> : Baseline 값. 30이면, Baseline 3.0
ⓙ -b:v <숫자> : 비디오 비트레이트를 지정한다.
ⓚ -r <숫자> : 출력 동영상 프레임 레이트를 지정한다.
ⓛ -s <숫자> : 화면 크기, 해상도를 지정한다. 원본 해상도보다 크게 할 경우 확대되서 나온다.
프리셋처럼 미리 지정된 문자가 있어서 직접 해상도를 지정하지 않아도 된다.
ex) vga – 640 x 480, sxga 1280 x 1024, wvga 852 x 480, hd720 – 1280 x 720 등
ⓜ -threads <숫자> : 쓰레드수를 지정한다. 속도 향상을 위해 멀티쓰레드를 지정해줄 수 있다.
반드시 CPU 코어 갯수와 일치시킬 필요는 없지만, 보통은 코어 갯수에
맞춘다.
ⓝ -strict experimental : 옵션의 엄격함을 느슨하게 풀어주는 옵션
ⓞ <출력파일이름> : 변환하여 저장할 동영상 파일 이름을 지정한다.

동영상 변환 옵션 예)


ffmpeg -y -i 변환전동영상파일명.avi -acodec aac -ab 192k -ar 48000 -ac 2 -b:a 300k  -vcodec libx264 -level 30 -b:v 3000k -r 29.97 -s 1280:720 -threads 4 -strict -2 변환후동영상파일명.mp4

 


2. 동영상 분할

동영상은 FFMpeg 을 이용하여 분할할 수 있다.

– 지정된 시간 사이의 동영상 분할 명령 및 설명

ffmpeg -i ⓐ -ss ⓑ -t ⓒ -vcodec copy ⓓ -acodec copy ⓔ ⓕ

ⓐ -i <분할파일이름> : 분할할 동영상 파일 이름을 지정합니다.
ⓑ -ss <숫자> : 분할 시작할 시간 값. 초 단위로 적어주거나, HH:MM:SS 로 지정할 수 있다.
ⓒ -t <숫자> : 분할 완료할 시간 값. 초 단위로 적어주거나, HH:MM:SS 로 지정할 수 있다.
ex) 30으로 적어주면 분할을 시작한 시간으로 부터 30초간만 분할된다.
ⓓ -vcodec copy : 비디오 코덱은 원본 동영상과 같게 한다.
ⓔ -acodec copy : 오디오 코덱은 원본 동영상과 같게 한다.
ⓕ <출력파일이름> : 분할하여 저장할 동영상 파일 이름을 지정한다.
– 지정시간부터 동영상 분할 명령 및 설명
ffmpeg -i ⓐ -ss ⓑ -vcodec copy ⓒ -acodec copy ⓓ ⓔ
ⓐ -i <분할파일이름> : 분할할 동영상 파일 이름을 지정합니다.
ⓑ -ss <숫자> : 분할 시작할 시간 값. 초 단위로 적어주거나, HH:MM:SS 로 지정할 수 있다.
-t 옵션값이 없으므로 시작으로부터 끝까지 분할한다.
ⓒ -vcodec copy : 비디오 코덱은 원본 동영상과 같게 한다.
ⓓ -acodec copy : 오디오 코덱은 원본 동영상과 같게 한다.
ⓔ <출력파일이름> : 분할하여 저장할 동영상 파일 이름을 지정한다.

– 지정된 시간 사이의 동영상 분할 명령 및 설명

ffmpeg -i ⓐ -t ⓑ -vcodec copy ⓒ -acodec copy ⓓ ⓔ

ⓐ -i <분할파일이름> : 분할할 동영상 파일 이름을 지정합니다.
ⓑ -t <숫자> : 분할 마칠 시간 값. 초 단위로 적어주거나, HH:MM:SS 로 지정할 수 있다.
-ss 옵션값이 없으므로 시작으로부터 지정한 시간까지 분할한다.
ⓒ -vcodec copy : 비디오 코덱은 원본 동영상과 같게 한다.
ⓓ -acodec copy : 오디오 코덱은 원본 동영상과 같게 한다.
ⓔ <출력파일이름> : 분할하여 저장할 동영상 파일 이름을 지정한다.

 


3. 동영상 합치기

분할된 동영상을 합칠때 사용한다.


file ‘abcdefg.mp4’
file ‘smile.mp4’

먼저 합칠 동영상 파일을 텍스트 파일로 열거해준다.

file ‘동영상파일명1’
file ‘동영상파일명2’

 

ffmpeg -f concat -i “ⓐ” -c copy ⓑ 

ⓐ -i <텍스트파일명> : 합칠 동영상 목록이 적혀 있는 텍스트 파일명
ⓑ  <출력파일이름> : 합쳐서 저장할 동영상 파일 이름을 지정한다.

 

 

4. 썸네일 이미지 추출

동영상 썸네일 이미지는 FFMpeg 을 이용하여 만들 수 있다.

ffmpeg -vsync ⓐ -ss ⓑ -i ⓒ -an ⓓ -r ⓔ -vf thumbnail=ⓕ -q ⓖ ⓗ

ⓐ -vsync <숫자> : 비디오 동기화 방법
이 옵션을 쓰지 않을 경우 -vframes 와 -r 을 이용한 방법에서 처음 2장의 썸네일
이미지가 시간차 없이 생성된다. vsync 2 값으로 설정하면 비교적 정상적으로 생성된다.
ⓑ -ss <숫자> : 썸네일 이미지 생성을 시작할 시간을 설정한다.
※ -ss 옵션이 -i 옵션 보다 반드시 먼저 나와야 한다.
ⓒ -i <동영상파일명> : 썸네일 이미지 생성할 원본 동영상 파일을 지정한다.
ⓓ -an <> : 썸네일 이미지만 생성할 것이므로 속도 향상을 위해 오디오 OFF 옵션을 쓰나 생략해도 된다.

ⓔ -r <숫자> : 동영상 프레임 레이트 값을 넣어준다.
ⓕ -vf thumbnail=<숫자> : 썸네일 프레임 값
비디오 필터 중 하나, 연속된 프레임 중에서 가장 대표적인 프레임을 선택해준다.
기본값이 100 이므로 25프레임 영상에서는 4초당 1장의 썸네일 이미지가 출력된다.
※ 너무 큰 값은 과도한 메모리 자원을 요구하기 때문에 권장하지 않는다.
ⓖ -q <숫자> : 생성할 썸네일 이미지의 품질을 설정합니다.
0 ~ 31이내의 값을 지정할 수 있고, 숫자가 낮을수록 품질이 좋다.
가장 좋은 품질의 이미지라도 jpg 포멧이므로 1장당 용량이 수십kbyte~수백kbyte 용량이 된다.
ⓗ %03<썸네일이미지파일명>.jpg : 출력시킬 썸네일 이미지 파일 이름을 지정한다.
앞에 %03을 붙여주면 파일명 앞에 001 값부터 숫자가 누적되어 붙는다. ex) 001sample.jpg

 

[polldaddy rating=”7739789″]

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x