본문 바로가기

Util

ffmpeg: 쉬운 동영상편집프로그램

동영상 수십개를 한 번에 일정 길이로 일일이 자르는 작업을 하다가 ffmpeg라는 프로그램을 발견했다.

모든 동영상 형태의 인코딩/디코딩을 지원하고 단순 cut과 trim 또한 지원한다.

Download

공식홈페이지로 들어가 큰 다운로드 버튼을 누르지 말고 

아래 Get the Package에서 운영체제에 맞는 빌드파일을 받는다.

Usage

ffmpeg는 UI가 아닌 커맨드로 제어하는 프로그램이다. 
cmd 또는 bash 등을 사용하면 되고, 아래는 자주 쓰이는 옵션이다. 
다운로드받고 압축을 풀었으면 bin 폴더에서 커맨드를 입력하면 된다.

  • -i [input]

    • 입력 파일을 지정한다.

  • -vcodec [codec]-acodec [codec] 또는 -c:v [codec]-c:a [codec]

    • 비디오 코덱, 오디오 코덱을 지정한다. 사용할 수 있는 코덱은 ffmpeg -encoders 로 확인할 수 있다. copy로 지정하면 기존 스트림을 인코딩 하지 않고(direct stream) 복사한다.

  • -vf [filter]-af [filter]

    • 비디오, 오디오에 필터를 적용한다. 리사이즈를 하거나 스피드를 바꾸거나 ass, srt 자막을 입히는 등의 처리를 할 수 있다. 자세한 것은 ffmpeg의 필터 문서를 참고하자. 참고로 자막을 입히는 건 폰트 때문에 윈도에서는 환경변수를 지정해 줘야 한다.

  • -b:v [bitrate]-b:a [bitrate]

    • 비디오, 오디오의 비트레이트를 지정한다.

  • -crf [quality]

    • 비트레이트 대신 화질 기준으로 인코딩할 때 쓰는 옵션. 0-51, 0은 무손실, 디폴트는 23

  • -y

    • 파일을 덮어쓸 일이 있어도 물어보지 않는다.

  • -re

    • 인코딩 속도를 1x(실시간)으로 제한한다. 로컬 파일을 ffserver로 스트리밍 시 실시간으로 feed를 전송하기 위해서 필요하다.

  • -f [container]

    • 출력 포맷을 지정한다. 따로 적지않으면 파일명에 맞춰서 해준다.

  • -t [time]

    • 지정된 시간 (초 단위)만큼 인코딩한다.

  • -ss [time]

    • 지정된 시간 (초 단위)만큼 건너뛰고 인코딩한다. hh:mm:ss 방식으로도 표기가 가능하다.


예를 들어 한 번에 여러 동영상을 동일코덱/포맷으로 복사해 일괄적으로 3분짜리로 자르기 위해서는 아래와 같은 커맨드가 될 것이다:

for %%a in ("파일경로\*.mp4"do ffmpeg -"%%a" -00:03:00 -acodec copy -vcodec copy "아웃풋경로\%%~na_cut.mp4"
cs


위 커맨드를 실행하면 mp4 확장자의 모든 동영상을 찾아 3분짜리로 변환해서 파일명_cut.mp4 파일로 빼낸다. 


1분부터 4분까지만 남기고 나머지를 자르려면?

-ss옵션과 -t옵션을 함께 사용하면 된다.

for %%a in ("파일경로\*.mp4"do ffmpeg -"%%a" -ss 00:01:00 -00:04:00 -acodec copy -vcodec copy "아웃풋경로\%%~na_cut.mp4"
cs


매번 경로를 설정하는 것이 귀찮고 폴더가 정해져 있다면 아래와 같이 .bat 배치파일을 만들어 위 커맨드를 넣고 실행만 해줘도 된다. 



이 외 포맷변환, 인코딩, 화질변환, 필터변환 등등 여러개의 동영상편집을 일괄적으로 반복할때 사용하면 좋다.