Published on

ffmpeg를 활용하여 스크립트로 영상 편집하기

Authors
  • 테크버킷
    Name
    테크버킷
    Twitter

소개

ffmpeg은 비디오 및 오디오를 처리하기 위한 오픈 소스 도구입니다. ffmpeg을 사용하면 비디오 및 오디오 파일을 변환하고, 편집하고, 스트림으로 전송하고, 필터링하고, 캡처하고, 재생할 수 있습니다. 다양한 운영 체제에서 작동하며, 커맨드 라인 인터페이스를 통해 사용할 수 있습니다.

여기서 options는 ffmpeg 명령의 옵션을 지정합니다. -i는 입력 파일을 지정하고, input_file은 입력 파일의 경로와 이름입니다. output_file은 출력 파일의 경로와 이름입니다.

조금 어려워 보이기도 하고, 화려한 UI의 영상편집에 비해 퀄리티가 떨어지는게 아닐까 의심스러운 적도 있지만 곰플레이어, VLC Media Player, Youtube, OBS Studio, Vrew, 샤나인코더, 곰인코더 등의 잘 알려진 서비스에서도 내부적으로 ffmpeg을 사용하고 있습니다.

설치 방법

설치하고 사용하는 방법을 본격적으로 알아봅시다.

먼저 ffmpeg을 다운로드하고 설치하는 방법은 운영체제에 따라 다릅니다. 예를 들어, Linux에서는 패키지 관리자를 통해 설치할 수 있으며, Windows에서는 ffmpeg 공식 웹 사이트에서 바이너리 파일을 다운로드하고 설치합니다.

자주 사용되는 명령 모음

자주 사용되는 ffmpeg 명령을 소개합니다.

1. 기본 구문

ffmpeg 명령은 다음과 같은 구문으로 구성됩니다.

ffmpeg [options] -i input_file output_file

여기서 options는 ffmpeg 명령의 옵션을 지정합니다. -i는 입력 파일을 지정하고, input_file은 입력 파일의 경로와 이름입니다. output_file은 출력 파일의 경로와 이름입니다.

2. 변환

예를 들어, MP4 비디오 파일을 AVI로 변환하려면 다음과 같이 입력합니다.

ffmpeg -i input.mp4 output.avi

3. 필터링

예를 들어, 비디오 파일에서 노이즈를 제거하고 밝기를 조정하려면 다음과 같이 입력합니다.

ffmpeg -i input.mp4 -vf "noise=alls=20, eq=brightness=0.1" output.mp4

4. 오디오 추출

예를 들어, 비디오 파일에서 오디오를 추출하려면 다음과 같이 입력합니다.

ffmpeg -i input.mp4 -vn -acodec copy output.mp3

5. 화면 녹화

예를 들어, 화면을 녹화하려면 다음과 같이 입력합니다.

ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f pulse -i default output.mkv

위의 예제는 X11 디스플레이에서 1920x1080 해상도로 화면을 녹화하고, 기본 펄스 오디오 입력에서 오디오를 캡처하여 MKV 파일로 저장합니다.

이 외에도 ffmpeg을 사용하여 다양한 작업을 수행할 수 있습니다. 자세한 내용은 ffmpeg 공식 문서를 참조하십시오.

더 다양한 옵셤 및 응용 구문

입력 옵션

-f : 입력 파일 형식을 지정합니다. -ss : 입력 파일에서 시작 시간을 지정합니다. -t : 입력 파일에서 지속 시간을 지정합니다. -r : 입력 파일의 프레임 속도를 지정합니다. -loop_input : 입력 파일을 반복해서 처리합니다.

출력 옵션

-f : 출력 파일 형식을 지정합니다. -vcodec : 비디오 코덱을 지정합니다. -acodec : 오디오 코덱을 지정합니다. -b : 비디오 및 오디오 비트레이트를 지정합니다. -s : 비디오 해상도를 지정합니다. -ar : 오디오 샘플 속도를 지정합니다.

필터링 옵션

-vf : 비디오 필터를 지정합니다. -af : 오디오 필터를 지정합니다. -ssim : 비디오 품질을 비교하는 SSIM 필터를 적용합니다. -scale : 비디오 크기를 조정합니다. -crop : 비디오를 자릅니다.

기타 옵션

-y : 출력 파일을 덮어쓸지 여부를 지정합니다. -loglevel : 로그 레벨을 지정합니다. -threads : 스레드 수를 지정합니다. -preset : 인코딩 프리셋을 지정합니다. -vsync : 비디오 동기화 방법을 지정합니다.

옵션별 예시

  • -f: 입력 또는 출력 파일 형식을 지정합니다. 예시) mp4, avi, mp3, wav, mpeg, h264, aac, flv, mov.
  • -ss: 입력 파일에서 시작 시간을 지정합니다. 예시) 00:00:10, 120, 1:30:20.5.
  • -t: 입력 파일에서 지속 시간을 지정합니다. 예시) 00:00:30, 120, 1:30:20.5.
  • -r: 비디오 프레임 속도를 지정합니다. 예시) 30, 60, 24.
  • -vcodec: 비디오 코덱을 지정합니다. 예시) libx264, h264, libvpx, vp9, mpeg4, wmv2.
  • -acodec: 오디오 코덱을 지정합니다. 예시) aac, libmp3lame, opus, vorbis, pcm_s16le.
  • -b: 비디오 및 오디오 비트레이트를 지정합니다. 예시) 1M, 500K, 256K, 128K
  • -s: 비디오 해상도를 지정합니다. 예시) 1280x720, 640x480, 1920x1080.
  • -ar: 오디오 샘플 속도를 지정합니다. 예시) 44100, 48000, 22050.
  • -vf: 비디오 필터를 지정합니다. 예시) scale=640:360, crop=720:480:0:0, eq=contrast=1.2:brightness=-0.1.
  • -af: 오디오 필터를 지정합니다. 예시) volume=2.0, equalizer=f=1000:width_type=h:width=200:g=-6.0, highpass=f=200:width_type=h:width=100.
  • -y: 출력 파일을 덮어쓸지 여부를 지정합니다. 예시) y, n.
  • -threads: 사용할 스레드 수를 지정합니다. 예시) 1, 4, 8.
  • -preset: 인코딩 프리셋을 지정합니다. 예시) ultrafast, medium, slow, veryslow.
  • -loglevel: 로그 레벨을 지정합니다. 예시) quiet, panic, fatal, error, warning, info, verbose, debug, trace.

마무리

ffmpeg은 조금 어렵기도, 화려한 UI의 영상편집 툴에 비하면 여상의 퀄리티가 떨어지지 아닐까 의심스러울 때도 있지만, 잘 사용하면 유용합니다. 무거운 영상편집 프로그램을 열지 않고도 간단한 편집을 코드 몇줄로 마치거나, 여러 비디오 파일의 용량 최적화를 자동으로 하는 등 사용을 할 수가 있습니다. 읽어주셔서 감사합니다.