기록

FFMPEG 사용 방법

하슈타인 2022. 1. 22. 22:07

FFMPEG 란?

 

MPEG 영상 표준화 그룹에서 유래했고, "mpeg" 앞에 붙은 "FF"는 패스트 포워드(fast forward)를 의미한다.

FFMPEG 은 비디오, 오디오, 이미지를 쉽게 인코딩 (Encoding), 디코딩 (Decoding), 먹싱 (Muxing), 디먹싱 (Demuxing) 할 수 있도록 도움을 주는 멀티미디어 프레임워크이다.

코딩(Coding) : 컴퓨터가 알아먹을 수 있도록 이진코드(binary code) 를 입력하는 것을 말한다.

인코딩(Encoding) : 특정한 데이터포맷으로 데이터를 가공하는것을 말한다. 원본 영상 데이터로부터 특정

디코딩(Decoding) : 특정 동영상 코덱을 사용하여 원본 영상 데이터를 얻는 것

먹싱(Muxing) : multiplexing 의 약어로 데이터를 섞는 것이다. 데이터를 종류별로 따로 따로 구분해서 보내는 비효율을 없애기 위해 사용된다.

디먹싱(Demuxing) : demultiplexing 의 약어로 먹싱된 데이터를 다시 종류별로 뽑아내는 것을 말한다.

 

ffmpeg 의 작동 방식

 

  1. 입력파일을 demuxer가 열어서 각 채널별로 인코딩된 데이터 패킷으로 변경한다.
  2. 다시 인코딩된 패킷은 각각의 디코더에 의해서 프레임으로 변환된다.
  3. 프레임에 대해 필터링을 적용한다. 필터는 프레임의 내부를 변환하여 다른 프레임을 생성한다.
  4. 변환된 프레임들을 다시 인코더가 패킷으로 변환한다.
  5. muxer에 의해 인코더가 뱉은 패킷을 파일 포맷에 맞게 싸넣는다.

 

FFMPEG 을 왜 사용할까?

 

영상 및 오디오를 압축하는 알고리즘에는 수많은 종류가 존재한다. 따라서 영상 및 오디오를 정상적으로 재생하려면 수 많은 압축 알고리즘을 모두 직접 구현해야만 한다. 그러나 영상 및 오디오를 압축하는 프로그램들이 매우 복잡하며 그 종류도 매우 많기 때문에 이를 짧은 시간안에 개발하는 것은 매우 어렵다. 그러나 FFMPEG 은 오픈소스로 전 세계의 개발자들이 개발을 하기 때문에 이러한 수 많은 종류의 영상 및 오디오 코덱 및 파일 포맷등을 지원하고 있다.

즉, 멀티미디어 관련 프로그램을 개발하는데 있어서 직접 영상 및 오디오를 압축하는 프로그램을 개발하는 것 보다 FFMPEG 을 잘 사용하는 것이 쉽기때문에 이용한다.

 

FFMPEG 을 사용하는 방법

 

FFMPEG 은 명령어를 직접 입력하는 방식으로 동작 한다.

 

(1) 비디오에서 오디오 추출

 

ffmpeg -i $dstName -map 0:a -c copy $extractFile

 

(2) 오디오 + 오디오 병합

 

ffmpeg -i $mr_path -i $extractFile -shortest -filter_complex '[0:a]volume=0.5[a0]; [1:a]volume=3.5[a1]; [a0][a1]amix=inputs=2[out]' -map '[out]' -ac 2 -c:a aac $mergeAudio

 

-ac 숫자 : 오디오 채널을 지정한다

-c:a : 오디오 코덱을 뜻한다. 여기서는 aac 로 함

 

(3) 비디오 + 오디오 병합

 

ffmpeg -i $dstName -i $mergeAudio -c copy -shortest -map '0:v:0' -map '1:a:0' -y $mergeVideo

 

-y : 출력파일을 쓸 때 같은 이름의 파일이 있어도 항상 덮어쓰기를 하겠다는 의미

-copy : 비디오의 코덱과 오디오의 설정을 동일화시킨다는 의미

 

(4) 비디오 + 비디오 병합

 

ffmpeg -i input1/mp4 -i input2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2:shortest=1[outv]" -map "[outv]" -movflags frag_keyframe+empty_moov output.avi

 

-filter_complex : 복합 필터 그래프는 조금 더 복잡한 문법이나 심플 필터 그래프를 여러개 사용하는 것이다. 여러 파일을 한 번에 연결/합성하거나, 혹은 출력이 2개 이상인 필터를 사용할 때 적용한다.

-hsatck : hstack 필터를 사용해서 가로로 연결한 비디오를 만든다

 

(5) 비디오 썸네일 추출

 

ffmpeg -i video.mp4 -ss $getFromSecond -s $size output.png

 

-i : 입력 파일 이름

-ss : Start Second, 이미지 캡쳐 시간 (초)

-s 숫자 : Frame size (가로x세로) , 해상도

size : 추출하고싶은 이미지 파일의 사이즈 (내가 원하는 크기로 변수 $size 에 맞추어 입력해줌)

 

(6) png → mp4 파일 변환

 

ffmpeg -r 1/5 -i image.png output.mp4

 

-r 숫자 : 출력 동영상 프레임레이트를 지정한다