MotionStitch Lite

모션포토를 이어붙여 하이라이트 영상을 만드는 크로스플랫폼 앱
Flutter | Android & iOS v2.6.5 (build 62) - ExoPlayer Transformer 기반 Play Store 출시 · OAuth 검증 심사 중
🌸 사용자용 페이지로 이동: 앱 홈 (사용자 매뉴얼) · 개인정보처리방침 · 서비스 약관 · 계정·데이터 삭제

프로젝트 개요

MotionStitch Lite란?

스마트폰으로 촬영한 모션포토(Motion Photo)에서 비디오 클립과 스틸 사진을 추출하고, 이를 시간순으로 이어붙여 하이라이트 요약 영상을 자동으로 만들어주는 앱입니다.

Flutter 기반으로 Android와 iOS를 동시에 지원하며, 기본 기능에 집중한 무료 Lite 버전입니다.

모션포토란?

삼성 갤럭시, 구글 픽셀 등 스마트폰에서 사진 촬영 시 전후 약 1~3초의 짧은 영상을 함께 저장하는 기능입니다. JPEG 파일 안에 MP4 비디오가 내장되어 있는 형태로, 일반 갤러리 앱에서는 사진으로만 보이지만 실제로는 살아 움직이는 순간을 담고 있습니다.

기획 배경

DigestMovie에서 MotionStitch로

이 프로젝트는 기존에 개발한 안드로이드 전용 앱 DigestMovie(다이제스트무비)를 기반으로 합니다.

왜 Flutter인가?

버전 전략

Lite MotionStitch Lite

  • 무료 배포
  • 기본 기능에 집중
  • 모션포토 추출 + 이어붙이기 핵심 기능
  • 기본 출력 설정 (해상도, 비율)
  • 앱 사용성 검증 및 사용자 피드백 수집 목적

Pro MotionStitch (상용)

  • 유료 판매 (별도 프로젝트)
  • 고급 편집 기능 포함
  • 다양한 효과, 전환, 필터
  • 고급 출력 옵션
  • Lite에서 검증된 기능을 기반으로 확장

버전 분리의 이유

Lite vs Pro 기능 비교

기능 Lite Pro
모션포토 스캔 및 선택OO
비디오 클립 추출OO
스틸 사진 추출OO
자동 이어붙이기OO
셔터 효과음OO
기본 출력 설정 (해상도/비율)OO
갤러리 저장OO
고급 전환 효과-O
커스텀 필터/색보정-O
배경 음악 추가-O
자막/텍스트 오버레이-O
클라우드 백업/공유-O

* Pro 기능은 추후 기획에 따라 변경될 수 있음

기술 스택

Core

Flutter Dart Android iOS

미디어 처리

ExoPlayer Transformer (Android) AVFoundation (iOS) H.264 코덱 MP4 출력

UI / 상태관리

Material 3 Provider (ChangeNotifier) 로컬 파일시스템

DigestMovie와의 기술 비교

항목DigestMovie (기존)MotionStitch Lite (신규)
프레임워크Kotlin + Jetpack ComposeFlutter + Dart
플랫폼Android OnlyAndroid + iOS
미디어 처리ffmpeg-kit (Android)ExoPlayer Transformer (Android) / AVFoundation (iOS)
UIMaterial 3 (Compose)Material 3 (Flutter)
상태관리ViewModel + StateFlowProvider (ChangeNotifier)
저장소MediaStore API플랫폼별 갤러리 API

핵심 워크플로우

사용자 시나리오

1. 홈 화면

[새로 만들기] 또는 [내 갤러리] 선택

2. 날짜 범위 선택

커스텀 달력으로 모션포토 검색 기간 설정

3. 모션포토 선택

그리드 뷰에서 원하는 모션포토 다중 선택 (전체 선택/해제 토글)

4. 미리보기 & 설정

선택한 사진 순서 확인, 출력 설정(해상도, 비율) 조정

5. 영상 생성

비디오 클립 추출 → 셔터음 + 스틸 사진 삽입 → MP4 인코딩

6. 완료 & 저장

갤러리에 저장, 재생/공유 가능

개발 로드맵

Phase 0: 프로젝트 설정 ✓

Flutter 프로젝트 생성, 기획 문서 작성, 개발 환경 구성

Phase 1: 핵심 기능 구현 (Android) ✓

모션포토 파싱(삼성/Google XMP), 비디오/스틸 추출, 모션스티치 무비 생성, 갤러리 저장

Phase 2: UI 구현 ✓

홈, 픽, 미리보기, 처리, 완료, 갤러리, YouTube 관련 7개 화면 구현. Provider 기반 상태관리.

Phase 3: Android 부가 기능 ✓ (v1.3.0)

• AdMob 하단 배너 광고 (showAds 플래그로 ON/OFF)
• YouTube 업로드 전체 흐름 (Google Sign-In + YouTube Data API resumable upload)
• 채널 사전 체크 + 단계별 안내 화면
• 갤러리 카드에 YouTube 상태 표시 (회색/빨간색 + URL 검증)
• SharedPreferences 업로드 이력 + ValueNotifier 자동 갱신
• Firebase App Distribution 배포

Phase 3.5: ExoPlayer Transformer 마이그레이션 ✓ (v2.0.0)

• ffmpeg-kit-16kb 완전 제거 → ExoPlayer Transformer 전면 전환
• APK 크기 198MB → 58MB (-71%)
• 인코딩 속도: 60장 5분 → 1분30초, 220장 7분
• 출력 파일 크기 400MB → 180MB (-55%)
• Integration Test 프레임워크 도입 (3그룹, 6개 테스트)
• dead 코드 정리 (6파일, 644줄 삭제)

Phase 4: iOS 포팅 (진행 중)

✓ Phase 1: GADApplicationIdentifier 추가로 광고 SDK 크래시 해결
✓ Phase 2: AppDelegate.swift 표준 패턴 작성, Method Channel 7개 dispatcher, scanMotionPhotos(PhotoKit Live Photo) 실구현, iOS deployment target 14 상향, iOS 광고 비활성화
✓ 시뮬레이터에서 홈 화면 정상 표시
◯ Phase 3: AVFoundation 기반 processDigestMovie 본격 구현 (Live Photo .mov 추출 → 클립 합성 → MP4 인코딩 → 갤러리 저장)
◯ 실기 검증, 라이브포토 샘플 테스트
◯ Google Sign-In iOS URL scheme 설정

Phase 5: 테스트 & 배포

QA 테스트, Play Store / App Store 등록

Android 빌드/배포 현황

iOS 포팅 결정사항