📷 모션포토 vs 라이브포토

안드로이드 모션포토와 아이폰 라이브포토 — 공통점과 차이점
← 프로젝트 문서 홈으로

📌 둘 다 "사진을 찍는 순간의 짧은 움직임"을 함께 담는 기능이에요. 겉보기엔 비슷하지만, 파일을 저장하는 방식이 근본적으로 달라서 앱이 영상을 꺼내는 방법도 플랫폼마다 다릅니다. 이 페이지는 그 공통점과 차이점을 정리해, MotionStitch가 양쪽을 어떻게 다루는지 이해하는 바탕이 됩니다.

🤝 공통점 — 본질은 같아요

⚖️ 핵심 차이 한눈에 보기

🤖 안드로이드 모션포토

  • 삼성: 모션포토 / 구글 픽셀: Top Shot·모션
  • JPEG 파일 하나 안에 MP4 영상이 통째로 내장
  • 파일 끝에 MP4를 붙이고, XMP 메타데이터로 위치 표시
  • 영상 코덱: 주로 H.264
  • 길이: 약 1~3초

🍎 아이폰 라이브포토

  • Apple: Live Photo(라이브 포토)
  • 정지사진(HEIC) + 동영상(.MOV) 두 개의 별도 파일
  • 고유 식별자로 사진–영상을 한 쌍으로 묶음(PhotoKit)
  • 영상 코덱: 주로 HEVC(H.265)
  • 길이: 약 3초(셔터 전후 1.5초씩)

📋 항목별 상세 비교

항목🤖 안드로이드 모션포토🍎 아이폰 라이브포토
파일 구조 JPEG 한 개 안에 MP4 내장 (단일 파일) HEIC/JPEG + .MOV 두 개의 파일 쌍
묶는 방식 XMP 메타데이터(MotionPhoto/MicroVideo)에 MP4 시작 오프셋 기록 사진·영상에 같은 asset identifier를 넣어 시스템이 한 쌍으로 인식
이미지 포맷 JPEG HEIC(고효율) 또는 JPEG
영상 코덱 주로 H.264 (일부 HEVC) 주로 HEVC(H.265), 구형은 H.264
영상 길이 약 1~3초 약 3초 (앞 1.5초 + 뒤 1.5초)
대표(키) 프레임 촬영 순간의 프레임 고정 키 포토 — 사용자가 대표 프레임 변경 가능
오디오 보통 포함 (없는 경우도 있음) 포함
영상 추출 방법 JPEG 바이트에서 MP4 부분을 잘라냄 (파서) PhotoKit API로 영상(.MOV)에 접근 (PHAsset)
시스템 식별 MediaStore의 이미지 + 모션포토 마커 PHAsset mediaSubtype = photoLive

🗂️ 파일이 저장되는 모습

같은 "움직이는 사진"이라도 디스크에 저장되는 형태가 이렇게 달라요:

🤖 모션포토 — 파일 1개
📄 IMG_1234.jpg
┣ JPEG 정지 이미지 데이터
┣ XMP 메타데이터 (MP4 위치 표시)
┗ 📹 내장 MP4 영상 (파일 끝에 append)

→ 한 파일을 열어 안에서 MP4를 분리

🍎 라이브포토 — 파일 2개 (한 쌍)
🖼️ IMG_1234.HEIC (정지사진)
📹 IMG_1234.MOV (동영상)
🔗 동일 asset identifier로 연결

→ 시스템이 묶어둔 영상 파일에 접근

🔄 서로 주고받으면 어떻게 될까?

두 형식은 서로 직접 호환되지 않아요. 기기 간에 전송하면 보통 움직임이 사라집니다.

⚠️ 그래서 MotionStitch는 "각 기기에서 직접 촬영한" 모션포토·라이브포토를 그 기기에서 바로 처리하는 것을 전제로 해요. 다른 기기에서 전송받아 움직임이 빠진 사진은 영상 클립을 추출할 수 없어요.

🧩 MotionStitch는 이 차이를 어떻게 다루나

추출 방식이 근본적으로 다르기 때문에, 미디어 처리는 플랫폼별 네이티브 코드로 나눠서 합니다.

🤖 Android

  • JPEG 안의 MP4를 XMP/시그니처로 찾아 분리 (모션포토 파서)
  • Media3 Transformer로 클립·정지·셔터음 합성
  • 용어 표기: "모션포토"

🍎 iOS

  • PhotoKit으로 라이브포토 쌍에 접근 → .MOV 추출
  • AVFoundation으로 클립·정지 합성
  • 용어 표기: "라이브포토"

→ 그래서 앱 화면의 안내 문구도 기기에 맞춰 "모션포토 / 라이브포토"로 자동 표기돼요.

✅ 한 줄 요약

둘 다 "정지사진 + 짧은 영상"이라는 본질은 같지만, 안드로이드는 JPEG 한 파일에 영상을 숨겨 담고, 아이폰은 사진과 영상을 두 파일로 따로 두고 묶어요. 그래서 영상을 꺼내는 방법이 플랫폼마다 다르고, 서로 전송하면 움직임이 사라집니다.