본문 바로가기
지름 신고, 사용기, 팁과 강좌/DJI 드론 팬텀

FFMPEG을 이용한 동영상 관리

by Junhyeok 2018. 9. 10.

 이전에 windows에서 copy /b 명령으로 녹화한 동영상 파일을 합치는 팁을 포스팅한 적이 있는데, mts 파일에서는 불완전하나마 가능했지만 (재생은 정상적으로 가능하지만 프리미어 프로에서 편집시 프로그램 다운), 드론으로 촬영한 mp4파일은 재생도 되지 않아서 다른 방법을 찾게 되었다.

 FFMPEG은 동영상 인코딩, 디코딩에 많이 쓰이는 오픈소스 프로젝트 프로그램이다. 팟플레이어, 곰플레이어, VLC, MX 플레이어, nPlayer 등 OS나 플랫폼을 가리지 않고 다 쓰인다. 목표 자체가 인간과 기계가 만든 모든 멀티미디어 자료를 처리하는데 있는 프로젝트.

 동영상 관리라고 한 것은 카메라나 드론으로 촬영한 영상, TV수신카드로 녹화한 영상 등의 파일을 합치거나 나누는 작업을 말한다. 카메라로 동영상 촬영을 해보면, 대부분의 기기가 여러가지 이유로 4GB단위로 영상 파일을 분할해서 저장한다. 내가 자주 찍는 25분 축구경기를 기준으로 하면 비트레이트에 따라서 2~4개의 파일이 생성되는데, 하나의 파일로 되어있으면 영상파일 이름관리도 편하고, 유튜브에 업로드하기에도 좋다. 자막이나 여러가지 효과를 넣을려면 어쩔 수 없이 별도의 편집프로그램을 써야겠지만, 축구경기는 별다른 편집없이 통으로 올리는 경우가 많아서 유용하다.

 FFMPEG을 이용하면 명령어를 직접 입력하는 방식이라 편의성은 떨어지지만, 인코딩없이 작업을 할 수 있기 때문에 화질 손상도 없고, 속도가 빠르다는 장점이 있다. 꽤 좋은 CPU라고 생각하는 라이젠 17009(8코어 16쓰레드)에서 프리미어 프로의 경우 분할된 파일을 단순히 합치기만해도 인코딩에 걸리는 시간이 영상의 재생시간보다 길다. 대략 1.2배 정도의 시간이 걸리는데, FFMPEG으로 작업하면 CPU보다는 하드디스크의 읽기/쓰기 능력만큼 속도가 나온다. 따라서 좀더 빠른 작업을 원한다면 2개의 하드디스크를 이용해서 작업하는 것이 좋다. 하나의 디스크에서 읽기와 쓰기를 동시에 하는 것보다 하나의 디스크에서 파일을 읽고 다른 디스크에 쓰기 작업을 하는 것이 빠르다.


 설치

 

https://ffmpeg.zeranoe.com/builds/

자신의 OS에 따라서 적당한 버전을 다운받자.

우분투 리눅스라면 sudo apt-get install ffmpeg 같은 명령어로 간단히 설치할 수 있다.


파일 분할하기

ffmpeg -i video.mp4 -ss 00:01:00  -to 00:02:00 -c copy cut.mp4

-i 편집할 파일을 지정.

-ss 00:01:00은 1분 지점에서 시작을, -to 00:02:00은 2분에서 끝남을 의미한다.

-c copy는 재인코딩없이 원래 코덱 그대로 복사한다는 의미.

 내 경우는 앞부분의 불필요한 영상을 잘라낼 때 주로 사용한다.


파일 합치기

먼저 아래와 같은 형식으로 텍스트 파일을 만들어준다. #으로 시작하는 행은 주석으로 무시되니 생략해도 무방하다.

# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3' 

 예를 들어 D드라이브 1이라는 폴더에 00001.mts와 00002.mts 파일을 합친다고 하자. C드라이브에 list.txt라는 텍스트 파일을 만들고 아래처럼 적어준다.

file D:\1\00001.mts
file D:\1\00002.mts

ffmpeg -f concat -safe 0 -i c:\list.txt -c copy C:\output.mts

 output.mts라는 이름으로 00001.MTS와 00002.MTS 파일이 합쳐져서 C드라이브에 생성될 것이다. -safe 0 옵션은 같은 코덱을 사용하는 파일이라면 생략 가능.

만약 파일의 숫자가 많다면 해당 경로에서 다음과 같은 명령으로 파일명이 들어간 리스트 파일을 자동으로 생성할 수도 있다.

(for %i in (*.mts) do @echo file '%i') > mylist.txt

영상의 일부 구간을 무음처리하기

ffmpeg -i videofilename1.mp4 -c:v copy -af "volume=enable='between(t,5,10)':volume=0, volume=enable='between(t,15,20)':volume=0" videofilename2.mp4

 videofilename1.mp4 라는 파일의 비디오 코덱은 그대로 쓰고 5~10초, 15~20초 구간의 볼륨을 0으로 해서 videofile2.mp4라는 이름으로 저장하다.

댓글