동영상 수십개를 한 번에 일정 길이로 일일이 자르는 작업을 하다가 ffmpeg라는 프로그램을 발견했다.
모든 동영상 형태의 인코딩/디코딩을 지원하고 단순 cut과 trim 또한 지원한다.
Download
공식홈페이지로 들어가 큰 다운로드 버튼을 누르지 말고
아래 Get the Package에서 운영체제에 맞는 빌드파일을 받는다.
Usage
-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 -i "%%a" -t 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 -i "%%a" -ss 00:01:00 -t 00:04:00 -acodec copy -vcodec copy "아웃풋경로\%%~na_cut.mp4" | cs |
매번 경로를 설정하는 것이 귀찮고 폴더가 정해져 있다면 아래와 같이 .bat 배치파일을 만들어 위 커맨드를 넣고 실행만 해줘도 된다.
이 외 포맷변환, 인코딩, 화질변환, 필터변환 등등 여러개의 동영상편집을 일괄적으로 반복할때 사용하면 좋다.