AI 기반 동영상 처리(2)

FFmpeg

Seunggeun Baek
KLleon
5 min readAug 23, 2022

--

들어가며

유튜브, 틱톡과 같은 동영상 플랫폼의 대중화에서 볼 수 있듯이, 동영상은 우리의 일상과 떼어 놓을 수 없는 친숙한 미디어 콘텐츠 형식입니다. 동영상은 시청각을 동시에 자극함으로써 시청자가 내용을 직관적, 효과적으로 이해할 수 있다는 특성을 가지고 있습니다.

클레온은 모두의 경험을 나의 경험으로 만들자는 비전 아래, 다양한 AI 기술로 새로운 동영상 콘텐츠를 만들 수 있는 환경을 제공하고 있습니다. 이러한 환경을 만들기 위해서는 동영상의 특성에 대해 잘 알고, 그 특성에 맞게 각 처리 과정에 AI 기술을 적절히 녹여낼 필요가 있습니다.

연재 순서

  1. 동영상의 구성 요소
  2. FFmpeg
  3. AI 기반 동영상 처리 패턴

FFmpeg

사실상 FFmpeg는 동영상을 처리할 때의 기준이 된다고 할 수 있을 정도로 널리 사용되고 있는 도구입니다. 다음 형태의 CLI 명령을 통해, 실행 파일 형태로 단독 실행이 가능합니다.

명령 옵션은 순서대로 적어주어야 합니다.

  • infile options: 입력받는 파일을 읽을 때 적용될 옵션을 넣습니다. 코덱을 명시하거나, 가져올 영상의 구간을 지정하거나, 이미지를 입력받는 경우 이미지를 매 프레임 반복하도록 하는 옵션들이 대표적입니다.
  • outfile options: 출력물을 만들기 위한 동영상 처리 절차와, 출력에 사용할 옵션 등을 적습니다.

필터

outfile 과정에서는 동영상의 크기를 변경하거나, 여러 동영상을 이어붙이거나, 크로마키 투명 처리를 하는 등, 실질적인 처리를 하는 경우가 많습니다.

동영상을 처리하기 위한 각각의 단계를 필터라고 부르며, 여러 필터들을 연결해 놓은 전체 처리 과정을 filter complex, filter graph, 또는 필터 파이프라인이라고 부릅니다. 필터는 앞쪽에서부터 순차적으로 처리되며 뒤쪽의 필터에서 나온 결과가 앞 단계로 되돌아갈 수 없습니다. 다시 말해, filter graph는 directed acyclic graph입니다.

ffmpeg에서 필터를 사용하려면 -vf(비디오), -af(오디오) 또는 -filter_complex 옵션을 이용합니다. -filter_complex 사용 시 대괄호를 이용하여 필터에 넣을 스트림을 지정하거나 필터 출력 스트림의 이름을 지정하고, 세미콜론을 이용하여 여러 개의 필터를 구분합니다. 필터에 들어갈 파라미터는 매뉴얼에 따라 콜론으로 구분하여 삽입합니다.

대표적인 비디오 필터로는 다음과 같은 것들이 있습니다.

  • split: 스트림을 여러 개로 복제합니다. 스트림은 재사용되기 어려우므로, 여러 곳에서 사용하려면 복제를 이용하여야 합니다.
  • overlay: 비디오 스트림 하나를 다른 스트림 위에 올려서 표시합니다.
  • crop: 비디오 프레임의 특정 영역을 잘라 가져옵니다.
  • scale: 비디오의 크기를 변경합니다.
  • vstack, hstack: 여러 개의 비디오를 상하 또는 좌우로 연결합니다.
  • vflip, hflip: 비디오를 상하 또는 좌우로 뒤집습니다.
  • chromakey: 비디오에 크로마키를 적용하여 투명 영역을 생성합니다.

ffmpeg에는 오디오 필터를 포함해 수많은 다른 필터들이 구현되어 있으므로 아래 필터 문서를 참고할 수 있습니다.

https://ffmpeg.org/ffmpeg-filters.html

사용 예시

  • 트랜스 코딩: webm 영상을 받아 mp4 영상(코덱 기본값 libx264)으로 변환합니다.
  • 오디오 삽입: mp4 영상에 오디오를 삽입합니다. 입력의 번호는 0번부터 시작하며, map 옵션에서 0:v, 1:a는 각각 0번 입력의 비디오, 1번 입력의 오디오를 출력에 사용한다는 뜻입니다.
  • 하드웨어 가속 비트 레이트 변경: NVIDIA 사의 GPU를 이용하여, H.264 영상의 비트 레이트를 5Mbps로 변경하는 예시입니다. b:v는 비트 레이트를, c:v는 코덱(하드웨어 인코더 사용)을 지정하는 옵션입니다. Intel 사의 CPU, NVIDIA 사의 GPU 등 가속을 지원하는 하드웨어가 장착된 경우, 아래 문서를 참고하여 ffmpeg를 통해 지원하는 코딩 방식의 비디오 스트림을 더 빠르게 읽거나 쓸 수 있습니다. ffmpeg의 별도 빌드가 필요할 수 있습니다. https://trac.ffmpeg.org/wiki/HWAccelIntro https://developer.nvidia.com/blog/nvidia-ffmpeg-transcoding-guide/
  • 투명 비디오에 배경 삽입: 투명 webm 영상의 뒤에 배경 이미지를 삽입하여, mp4 영상을 생성합니다. overlay 필터가 사용되었습니다.

다음 연재에서는 AI 기반으로 동영상을 처리하기 위한 구현 패턴에 대해 알아봅니다.

--

--