자동화 파이프라인6 분 읽기

내 릴스 커버가 앱이 아니라 단색 인트로를 팔고 있었다

쇼츠 영상을 인스타그램 릴스로 자동 교차 발행했더니 커버가 단색 인트로 화면으로 잡혔습니다. 오프셋을 지정하는 파라미터는 릴스에서 무시됐고, 결국 커버 이미지를 직접 뽑아 호스팅한 뒤 URL로 넘기는 방식으로 바꿨습니다.

#instagram#reels#thumbnail#ffmpeg#automation
왼쪽은 단색 인트로 화면이 커버로 잡힌 릴스, 오른쪽은 앱 화면 프레임이 커버로 지정된 릴스
커버 시점 지정은 릴스에서 무시됐고, 가장 무거운 PNG 프레임을 직접 올려 URL로 넘겨야 했습니다.

커버가 인트로였습니다

제 앱 홍보용 세로 영상은 한 번 만들면 여러 채널로 교차 발행됩니다. 인스타그램 릴스도 그중 하나입니다. 그런데 발행된 릴스의 커버(썸네일)가 앱 화면이 아니라 영상 맨 앞의 단색 인트로 화면이었습니다. 피드에서 보이는 첫인상이 아무 정보도 없는 색 면이었던 셈입니다.

영상 자체에는 앱 화면이 제대로 들어 있었습니다. 문제는 플랫폼이 커버를 어디서 가져가느냐였고, 저는 그걸 따로 지정하지 않고 있었습니다.

당신의 자동 발행 파이프라인은 영상 본문만 검증하고, 피드에 실제로 보일 커버 한 장은 누가 고르는지 확인한 적이 있나요?

오프셋을 넘기면 될 줄 알았습니다

처음 떠올린 건 커버로 쓸 시점을 지정하는 방법이었습니다. 그런데 커버/썸네일 오프셋 계열 파라미터(cover, thumb_offset)는 릴스 발행에서는 무시됐습니다. 값을 넣어도 결과가 달라지지 않는다는 뜻입니다. 릴스에서 커버를 바꾸려면 이미지 자체를 URL로 넘기는 cover_url 파라미터를 써야 했습니다.

그러면 문제가 두 개로 바뀝니다. 어떤 프레임을 커버로 쓸지 코드가 골라야 하고, 그 이미지를 외부에서 접근 가능한 URL로 올려둬야 합니다.

당신이라면? 영상마다 커버 시점을 사람이 정해 두시겠습니까, 아니면 코드가 고르게 하시겠습니까?

가장 무거운 PNG가 앱 화면이었습니다

저는 코드가 고르게 했습니다. pick_cover라는 함수가 MP4의 여러 지점에서 프레임을 뽑아 각각 PNG로 저장하고, 파일 크기가 가장 큰 프레임을 고릅니다. 단색 인트로는 PNG로 압축하면 아주 작아지고, 글자와 UI 요소가 빽빽한 앱 화면은 커집니다. 그래서 PNG 크기가 최대인 프레임을 앱 화면으로 간주하는 규칙입니다. 고른 프레임은 JPEG로 변환합니다.

그다음 그 JPEG를 제가 쓰는 파일 호스팅 경로에 올리고, 그 URL을 릴스 발행 요청의 cover_url로 넘기게 했습니다. 발행 모듈에는 cover_url 파라미터를 받는 부분만 추가했습니다. 변경은 두 파일, 33줄 추가였습니다.

이 방식의 장점은 영상 구성이 바뀌어도 커버 시점을 다시 지정할 필요가 없다는 점입니다. 인트로 길이가 달라져도 규칙은 같은 답을 냅니다.

자가진단 체크리스트

  • 자동 발행되는 영상의 커버가 실제로 어떤 프레임으로 잡히는지 플랫폼별로 한 번이라도 눈으로 확인했습니까?
  • 커버 지정 파라미터가 해당 게시물 유형(예: 릴스)에서 실제로 적용되는지, 조용히 무시되는지 결과물로 검증했습니까?
  • 영상이 단색 인트로나 로고 화면으로 시작한다면, 그 첫 프레임이 기본 커버가 될 가능성을 따져 봤습니까?

솔직한 부분

PNG 크기가 가장 큰 프레임이 곧 앱 화면이라는 건 휴리스틱일 뿐입니다. 노이즈가 많은 전환 장면이나 복잡한 배경이 있는 프레임이 대신 뽑힐 가능성은 배제하지 못했고, 모든 영상에서 결과를 전수 확인했다는 기록도 없습니다. 커버를 앱 화면으로 바꾼 뒤 조회수나 반응이 달라졌는지도 저는 아직 모릅니다. 이번 수정은 커버가 아무 정보 없는 색 면이던 상태를 없앤 것이지, 그 효과를 측정한 것은 아닙니다.

관련 글