Instagram Reels API 업로드 영상 요구 사항

Instagram API는 공개 video_url의 Reels를 cURL로 가져옵니다. MP4·MOV, H.264·HEVC, 23–60 fps, 3초–15분, 300 MB 규칙마다 Sume MP4를 맞추는 법.

읽는 시간 6분Sume
전체 글

Instagram Graph API로 Reels를 게시하려면, Instagram이 공개 서버에서 cURL로 가져가는 video_url을 넘깁니다. 파일은 moov atom이 앞에 있는 MOV나 MP4여야 하고, 23–60 fps의 H.264나 HEVC, 48 kHz 이하의 AAC 오디오, 너비 최대 1,920픽셀, 길이 3초–15분, 크기 최대 300 MB여야 합니다. media.sume.com에 있는 Sume MP4는 공개되어 있으므로 그 URL을 video_url에 넣을 수 있습니다. 먼저 프로브 값을 이 목록과 대조하세요.

Instagram 규칙은 Meta의 IG User Media 레퍼런스와 콘텐츠 게시 가이드에서, Facebook 규칙은 Reels 게시 API 가이드에서 인용했으며, 모두 2026-09-27에 확인했습니다. Sume 관련 사실은 Timeline 1.0, 영상 트림, 오디오 분리, 영상 검사 문서에서 가져왔습니다.

Instagram과 Facebook의 Reels 영상 요구 사항은 무엇인가요?

Instagram 레퍼런스에는 Reels 규격이 하나 나와 있습니다. Facebook 페이지는 별도의 API로 Reels를 게시하며, 그 API에는 자체 규격이 있습니다.

Meta의 IG User Media, 콘텐츠 게시, Reels 게시 API 페이지 기준, 2026-09-27 확인.
항목Instagram ReelsFacebook Reels
컨테이너MOV 또는 MP4, edit list 없음, moov atom을 앞에 배치.mp4(권장)
영상HEVC 또는 H.264, 프로그레시브, closed GOP, 4:2:0H.264, H.265, VP9 또는 AV1; 4:2:0; 프로그레시브; 2–5초 closed GOP; 고정 프레임 레이트
프레임 레이트23–60 fps24–60 fps
화면가로 최대 1,920픽셀; 비율 0.01:1–10:1, 9:16 권장9:16; 1080×1920 권장, 최소 540×960
길이3초–15분3–90초
파일 크기, 영상 비트레이트300 MB; VBR 최대 25 Mbps명시 없음
오디오AAC, 최대 48 kHz, 모노 또는 스테레오, 128 kbpsAAC Low Complexity, 48 kHz, 스테레오, 128 kbps 이상
게시 한도24시간당 API 게시물 100개; 캐러셀 섹션에는 50개24시간당 API 게시물 30개

Sume로 Reels 규격 영상을 만들려면 어떻게 하나요?

aspect_ratio: "9:16"(모델별 화면 비율)과 3초 이상의 duration으로 생성하세요. wan-3.0은 2초도 받지만, 이는 Instagram 최솟값보다 짧습니다. 클립이 하나라면 output: { width, height, fps }를 붙인 POST /v1/video-trim 재인코딩이 오디오를 AAC로 유지합니다. 클립이 여러 개라면 Timeline 1.0이 기본으로 1080×1920을 렌더링하는데, 이 크기는 Instagram의 가로 1,920픽셀 한도 안에 들고 Facebook 권장 크기와 같습니다. Timeline의 output.fps 값(24, 25, 30, 60)도 두 프레임 레이트 범위 안에 있습니다.

현재 Timeline 렌더는 소리를 클립이 아니라 오디오 스파인과 선택 사항인 사운드트랙에서 가져오므로, POST /v1/audio-detach로 클립의 오디오 트랙을 분리해 audio.url로 넘기세요. 생성 클립 자체의 인코딩은 문서화되어 있지 않습니다. 아래 인코더 설정은 Timeline, 필터, 그리고 트림의 기본 exact 모드에 적용됩니다.

Meta 목록과 다른 설정은 무엇이고, 어떻게 맞추나요?

먼저 무료 frames: false 검사를 실행하세요. 프로브는 fps, width, audio_sample_rate, audio_channels, size_bytes를 알려 줍니다. 그런 다음 항목별로 아래와 같이 맞추세요.

  • 샘플 레이트와 채널: Facebook은 48 kHz 스테레오를 명시합니다. 트림에는 샘플 레이트 필드가 없고, 오디오 분리의 channels는 source나 mono만 받으므로, 스테레오 트랙을 sample_rate: 48000으로 분리해 Timeline의 audio.url로 쓰고, 결과물에서 audio_sample_rate와 audio_channels를 확인하세요.
  • 오디오 비트레이트와 GOP: Sume 인코더는 AAC를 192 kbps로 쓰고 GOP를 약 일 초로 제한하며, 둘 다 설정할 수 없습니다(전체 인코더 설정). 192 kbps는 Facebook의 최저 기준인 128 kbps를 넘습니다. Instagram 항목은 128 kbps라고만 적고 최저 기준인지 상한인지는 밝히지 않습니다. GOP 상한은 Facebook의 2–5초보다 짧습니다.
  • 영상 비트레이트: 비트레이트 필드가 없으므로 size_bytes × 8 ÷ duration_seconds ÷ 1,000,000을 계산해 Instagram의 25 Mbps와 비교하세요.
  • 프로그레시브 스캔, edit list, closed GOP 여부는 Sume 문서에 설명되어 있지 않습니다. 컨테이너가 실패하면 직접 쓰는 도구로 확인하세요.

Instagram에 영상을 어떻게 넘기나요?

GET /v1/jobs/{id}/result에서 MP4의 media.sume.com URL을 가져오세요. 완료된 Job에는 그곳의 공개 아티팩트가 포함될 수 있고, media.sume.com에 호스팅된 Sume 미디어는 만료되지 않습니다(URL 수명). /v1/videos/{id}/content는 API 키가 필요하므로 넘기지 마세요. 커버 이미지로는 POST /v1/video-frames를 쓸 수 있으며, 이 엔드포인트는 최대 300초 길이의 클립에서 소스 크기의 내구성 JPEG 스틸을 반환합니다. Instagram은 9:16이 아닌 cover_url을 가운데 9:16 영역으로 잘라 씁니다.

Timeline, 필터, 트림은 MP4를 +faststart로 기록하며, FFmpeg 문서는 이 옵션을 moov atom을 맨 앞으로 옮기는 것으로 설명합니다. Meta 레퍼런스에 나온 대로 컨테이너를 만든 다음, 컨테이너 ID로 media_publish를 호출하세요.

POST https://graph.facebook.com/v25.0/<IG_USER_ID>/media
  ?media_type=REELS
  &video_url=https://media.sume.com/artifacts/artf_demo/reel.mp4
  &cover_url=https://media.sume.com/artifacts/artf_demo/cover.jpg
  &access_token=<USER_ACCESS_TOKEN>

API 게시를 제한하는 다른 요소는 무엇인가요?

Meta 페이지에는 파일 설정으로 바꿀 수 없는 한도도 있습니다.

  • 컨테이너는 24시간 뒤 만료되며, 계정마다 롤링 24시간 동안 400개까지 만들 수 있습니다. 영상 업로드는 비동기이므로, 컨테이너의 status_code가 FINISHED가 된 뒤 게시하세요.
  • 게시물 한도에 대해서는 Meta 가이드의 내용이 서로 엇갈립니다. 요청 한도 섹션은 24시간 이동 기간에 API로 게시한 게시물 100개라고 하고, 캐러셀 섹션은 24시간 동안 게시물 50개라고 합니다. GET /<IG_ID>/content_publishing_limit으로 계정의 현재 사용량을 볼 수 있습니다.
  • is_ai_generated는 컨테이너에 AI 사용을 스스로 밝히는 선택 항목입니다.
  • Facebook의 호스팅 파일 업로드는 robots.txt가 facebookexternalhit 사용자 에이전트를 막는 사이트의 파일을 거부합니다. Sume 문서는 robots.txt를 다루지 않으므로, 이 업로드가 실패하면 대신 파일 바이트를 보내세요.

출처

관련 글

미디어 도구 카테고리의 다른 글

미디어 도구 글 전체 보기

작성자 Sume