Gemini를 통한 영상생성 & Transcoder를 활용한 영상 붙이기 (GCP)

김성진·2025년 9월 12일
post-thumbnail

목표

자사 서비스인 여행에이전트를 만들며 유저가 방문할 장소들을 간접체험하기 위한 간단한 영상제작 기능을 내가 맡아서 구현하기로 하였다..(MVP 맞나..?ㅎ)

생성형 AI가 난리인 요즘같은 시대에 회사돈이 있어야 이런것도 해보지!라는 긍적적인 마음으로 시작하게 되었다. 리서치를 통해 가장 최근 2025년 7월부터 구글에서 런칭한 따끈따끈한 Gemini (veo3)를 써보기로했다. 방법은 그렇게 어렵지 않았다. 이런 재미나이~ 재밌나~ (ㅈㅅ)

Step 1 - 영상 생성:

  1. aistudio.google.com으로 가서 Dashboard -> API keys -> Look up API key for project를 누르면 내 구글 계정으로 로그인 되어 있다면, GCP내의 project와 연동해서 API키를 생성해준다.
  2. Generative Language API를 활용해서 먼저 Prompt text를 반드시 생성 후 veo3에 던지면 영상이 생성이 된다(sdk 필요).

까다로웠던 점:
1. 현재 초기단계라 그런지 영상은 반드시 8초만 가능 더 짧게나 더 길게 불가능.
2. prompt에서 장소가 4개이상시 될때도 있고 안될때도 있음. 게다가 에러가 항상 "prompt text의 위험도때문에 영상생성 불가능"라고만 반환해줘서 prompt를 올바르게 여러번 테스트해봐야함. (아래 이미지 참조)

꿀팁:
1.영상 하나 제작시 초당 $0.4기 때문에 8초짜리는 디폴트 $3.2가 붙기때문에 신중하게 테스트 해야함.
2. prompt text에 영상이 4개 이상이 들어가 있을 경우 영상생성이 안되는 경우다 다수.

Step 2 - 영상 이어붙이기:

veo3을 활용한 영상재작은 반드시 8초만 가능하고 장소도 4개 이상이 어려우므로 반드시 여러개를 붙이는 형식으로 해야함.

첫번째 시도 - ffmpeg 라이브러리 활용:

ffmpeg는 영상을 하나로 붙여주는 라이브러리이다.

최초에 veo3으로 영상을 생성하면 HTTP URL로 Google Cloud 내부 임시 저장소에 저장이 됨. 단, ffmpeg를 활용시, 반드시 로컬에서 생성된 영상들(자사 서비스 기획 최대 32초이므로 4개)다운로드 받아서 로컬에서 붙여줘야 함.
즉, 도커로 떠있는 컨테이너에서 영상을 다운받은 후 ffmpeg로 붙여서 버킷에 올린 뒤 지우는 형식으로 진행해야 함. 이렇게 될 경우, 한번의 처리시 영상 새당 대략 15MB, 최대 4개이므로 60MB, 10개의 요청을 동시에 하면 600MB, 100번의 요청이면 6000MB이므로, 서버를 한개 더 띄워서 관리를 하던지 해야하는 이슈가 발생.
**참고로 생성된 임시영상을 stream으로 메모리에 띄운뒤 붙이는것도 시도 해봤지만 이 방법은 ffmpeg 라이브러리로는 구현이 불가능 했다..

두번째 시도 - GCS(버킷) & Transcoder 활용

첫번째 방법은 로컬에서 영상을 다운로드 받아서 진행해야 하므로 너무 리스크가 크다는 생각에 혹시 veo3를 만들면서 구글이 영상을 길게 만들고 싶은 사람들을 위한 장치를 만들어 놓지 않았을까 하는 생각이 들었다. 역시나.. 위해단 구글.. 방법이 존재했다 ㅎㅎㅎㅎ 바로 Transcoder를 활용하는 것이다.

  1. 임시 생성된 영상 파일을 GCS로 옮기기
  2. TranscoderServiceClient를 활용해서 GCS버킷에 저장한 영상을 붙여서 붙인 버전을 GCS에 다시 저장하는 방법. (주의사항:transcoder를 활용하려면 http파일 형식은 지원하지 않기에, 첫번째 GCS 버킷에 영상을 올릴때 gs 형식으로 업로드 해야함)

필수 인프라(infra) 준비사항:
1. 버킷생성 (Key생성을 통한 엑세스 권한 제어 필요)
2. transcoder를 활용하기 위한 해당 프로젝트에 관련 설정.

이렇게, 두번째 방법을 사용하니 로컬에 영상을 저장해서 붙이고 다시 지워야 하는 번거로움이 완전히 사라짐! GCP 클라우드에서 완전처리 가능!

profile
multi-national communicator with programming (back-end)

0개의 댓글