- ACE-Step 1.5 음악 생성 (과학적 근거 기반) - FLUX 이미지 생성 (신카이 마코토 스타일) - ffmpeg 영상 렌더링 (워터마크 포함) - YouTube Data API 롱폼 업로드 - 프롬프트 및 문서 포함
278 lines
8.4 KiB
Markdown
Executable File
278 lines
8.4 KiB
Markdown
Executable File
# Animily Music 프로젝트 계획
|
||
|
||
> 반려동물 음악 유튜브 롱폼 자동 생성 파이프라인
|
||
|
||
---
|
||
|
||
## 개요
|
||
|
||
| 항목 | 값 |
|
||
|------|-----|
|
||
| 서버 | 192.168.0.46 (AI 서버) |
|
||
| 프로젝트 경로 | `/home/javamon/project/animily_music/` |
|
||
| 음악 생성 | ACE-Step 1.5 (localhost:8001) |
|
||
| 이미지 생성 | FLUX via ComfyUI (localhost:8188) |
|
||
| 영상 합성 | ffmpeg |
|
||
| 업로드 | YouTube Data API (롱폼) |
|
||
| 크론탭 | 매주 토요일 02:00 (주석 처리 상태) |
|
||
| 기존 코드 | 절대 수정 금지 (완전 독립 프로젝트) |
|
||
|
||
---
|
||
|
||
## 음악 생성 전략
|
||
|
||
### ACE-Step 제한
|
||
|
||
- 1회 최대 생성: **10분 (600초)**
|
||
- 세그먼트 방식으로 긴 곡 구성
|
||
|
||
### 길이별 구성
|
||
|
||
| 영상 길이 | 음악 생성 | 방식 |
|
||
|----------|----------|------|
|
||
| **2시간 (기본)** | 10분 × 12세그먼트 = ~119분 | 크로스페이드 이어붙이기 |
|
||
| 6시간 | 2시간 음악 × 3회 반복 | ffmpeg loop |
|
||
| 12시간 | 2시간 음악 × 6회 반복 | ffmpeg loop |
|
||
|
||
### 세그먼트 이어붙이기 규칙
|
||
|
||
- 12개 세그먼트 각각 약 10분 (595초) 생성
|
||
- 세그먼트 간 5초 크로스페이드 → 약 119분 완성
|
||
- 동일 key/BPM 유지, caption만 미세 변주 (단조로움 방지)
|
||
- 마지막 세그먼트는 자연스러운 페이드아웃
|
||
|
||
---
|
||
|
||
## 영상 구성
|
||
|
||
### 화면
|
||
|
||
| 요소 | 위치 | 상세 |
|
||
|------|------|------|
|
||
| 배경 이미지 | 전체 화면 | FLUX 생성 (1920×1080, 16:9) |
|
||
| Ken Burns 효과 | 전체 | 미세한 줌인/패닝 (정지 느낌 방지) |
|
||
| **워터마크** | **우측 상단** | 영상 처음부터 끝까지 상시 표시 |
|
||
|
||
### 워터마크 상세
|
||
|
||
| 항목 | 값 |
|
||
|------|-----|
|
||
| 텍스트 | **ANIMILY** |
|
||
| 위치 | 우측 상단 (x=w-tw-80, y=40) |
|
||
| 폰트 | ONE Mobile OTF Bold (`/usr/share/fonts/truetype/ONE_Mobile_Bold.otf`) |
|
||
| 폰트 크기 | 36 (롱폼 16:9 기준) |
|
||
| 색상 | white @ 40% 투명도 |
|
||
| 그림자 | black @ 30%, offset (1,1) |
|
||
| 표시 시간 | **영상 전체 (처음부터 끝까지 상시)** |
|
||
|
||
#### ffmpeg 워터마크 필터
|
||
|
||
```
|
||
drawtext=text='ANIMILY':fontfile=/usr/share/fonts/truetype/ONE_Mobile_Bold.otf:fontsize=36:fontcolor=white@0.4:x=w-tw-80:y=40:shadowcolor=black@0.3:shadowx=1:shadowy=1
|
||
```
|
||
|
||
> 참고: 기존 쇼츠(1080x1920 세로)는 fontsize=30, x=w-tw-25, y=25
|
||
> 롱폼(1920x1080 가로)은 비율에 맞게 조정
|
||
|
||
### 이미지 스타일
|
||
|
||
- **화풍**: 신카이 마코토 스타일
|
||
- **주제**: 반려동물 + 자연 풍경 (평화로운 분위기)
|
||
- **해상도**: 1920×1080 (16:9 가로)
|
||
- **영상당 1장** 생성 (썸네일 겸용)
|
||
|
||
### FLUX 프롬프트 예시
|
||
|
||
```
|
||
makoto shinkai style, dreamy golden hour sky with layered clouds,
|
||
a peaceful meadow with a sleeping puppy curled up in soft grass,
|
||
warm sunlight filtering through trees, detailed sky gradients,
|
||
soft bokeh, cinematic wide shot composition, 8k quality, no text, no watermark
|
||
```
|
||
|
||
---
|
||
|
||
## 유튜브 업로드 설정
|
||
|
||
### 메타데이터
|
||
|
||
| 항목 | 값 |
|
||
|------|-----|
|
||
| 카테고리 | 음악 (10) |
|
||
| 공개 설정 | 즉시 공개 (public) |
|
||
| 재생목록 | **뮤직큐우** (`PLr8dPYZT-hCUjL-OgPxJdF81Dvn_g8Vbg`) |
|
||
|
||
### 제목 형식
|
||
|
||
```
|
||
🐕 강아지가 좋아하는 음악 2시간 | 수면음악, 분리불안 완화 [과학적 검증]
|
||
🐱 고양이가 편안해지는 음악 6시간 | 퍼링 주파수 기반 [수면, 휴식]
|
||
🐾 반려동물 힐링 음악 12시간 | 솔로 피아노, 스트레스 해소
|
||
```
|
||
|
||
### 설명 (description)
|
||
|
||
```
|
||
{title}
|
||
|
||
🎵 저작권 프리 음악 (Copyright Free)
|
||
본 음악은 AI로 생성된 저작권 프리 음악입니다.
|
||
개인/상업적 용도 모두 자유롭게 사용하실 수 있습니다.
|
||
출처 표기 없이 자유롭게 사용 가능합니다.
|
||
|
||
🎵 Copyright Free Music
|
||
This music is AI-generated and copyright-free.
|
||
Free to use for any personal or commercial purpose.
|
||
No attribution required.
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
🔬 과학적 근거
|
||
• University of Glasgow + Scottish SPCA (2017): 레게/소프트록에서 개 스트레스 최소
|
||
• Through a Dog's Ear (2008): 50-60 BPM 솔로 피아노에서 70%+ 진정 반응
|
||
• Snowdon & Teie (2015): 고양이는 퍼링 주파수(25-50Hz)에 긍정 반응
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
🐾 반려동물 행동교정 플랫폼 애니밀리
|
||
📲 앱 다운로드: 앱스토어/구글플레이에서 '애니밀리' 검색
|
||
🌐 https://conimals.co.kr/
|
||
|
||
🤖 AI 생성 음악 (ACE-Step 1.5)
|
||
|
||
#반려동물음악 #강아지수면음악 #고양이음악 #펫힐링 #저작권프리
|
||
#dogmusic #catmusic #petrelaxation #copyrightfree #royaltyfree
|
||
```
|
||
|
||
### 고정 댓글
|
||
|
||
```
|
||
🎵 저작권 프리 음악입니다!
|
||
개인/상업적 용도 모두 자유롭게 사용하세요.
|
||
출처 표기 불필요, 다운로드 자유 ✅
|
||
|
||
🎵 This is copyright-free music!
|
||
Free for personal and commercial use.
|
||
No attribution needed ✅
|
||
```
|
||
|
||
---
|
||
|
||
## 프로젝트 구조
|
||
|
||
```
|
||
/home/javamon/project/animily_music/
|
||
├── config.py # 설정 (API URL, 경로, 채널 정보)
|
||
├── generate_music.py # ACE-Step API → 12세그먼트 생성 + 크로스페이드
|
||
├── generate_image.py # FLUX (ComfyUI API) → 신카이 마코토 이미지
|
||
├── render_video.py # 이미지 + 음악 + 워터마크 → ffmpeg 영상
|
||
├── upload_youtube.py # YouTube Data API 롱폼 업로드 + 고정댓글
|
||
├── scheduler.py # 메인 오케스트레이터
|
||
├── prompts/
|
||
│ ├── dog_music.json # 강아지 음악 프롬프트 (과학 기반)
|
||
│ ├── cat_music.json # 고양이 음악 프롬프트 (퍼링 기반)
|
||
│ └── image_prompts.json # FLUX 이미지 프롬프트 (신카이 스타일)
|
||
├── outputs/ # 임시 생성물 (영상 완성 후 정리)
|
||
├── logs/
|
||
├── token_animily.pickle # YouTube OAuth token
|
||
├── requirements.txt
|
||
└── venv/
|
||
```
|
||
|
||
---
|
||
|
||
## 모듈별 역할
|
||
|
||
### generate_music.py
|
||
|
||
1. 프롬프트 로드 (dog/cat 랜덤 or 스케줄)
|
||
2. ACE-Step API에 10분 세그먼트 12개 순차 요청
|
||
3. 각 세그먼트 동일 key/BPM, caption만 변주
|
||
4. pydub로 5초 크로스페이드 이어붙이기
|
||
5. 최종 ~119분 WAV 출력
|
||
|
||
### generate_image.py
|
||
|
||
1. FLUX 프롬프트 로드 (신카이 마코토 + 반려동물)
|
||
2. ComfyUI API (localhost:8188) 호출
|
||
3. 1920×1080 이미지 1장 생성
|
||
4. 썸네일용 리사이즈 (1280×720) 별도 저장
|
||
|
||
### render_video.py
|
||
|
||
1. ffmpeg: 이미지 → Ken Burns 효과 (미세 줌/패닝)
|
||
2. 워터마크 "ANIMILY" 우측 상단 오버레이
|
||
3. 오디오 합성
|
||
4. 6시간/12시간은 2시간 영상을 ffmpeg concat으로 반복
|
||
5. 출력: MP4 (H.264 + AAC)
|
||
|
||
### upload_youtube.py
|
||
|
||
1. YouTube Data API v3 (OAuth2)
|
||
2. 영상 업로드 (public, 카테고리: 음악)
|
||
3. 재생목록 추가/생성
|
||
4. 고정 댓글 작성 (저작권 프리 안내)
|
||
|
||
### scheduler.py
|
||
|
||
1. 콘텐츠 종류 결정 (강아지/고양이/혼합, 길이)
|
||
2. generate_music → generate_image → render_video → upload
|
||
3. 완료 후 outputs/ 정리
|
||
4. 로그 기록
|
||
|
||
---
|
||
|
||
## 크론탭
|
||
|
||
```bash
|
||
# 반려동물 음악 롱폼 (매주 토요일 02:00) - 비활성
|
||
# 0 2 * * 6 cd /home/javamon/project/animily_music && /home/javamon/project/animily_music/venv/bin/python scheduler.py >> /home/javamon/project/animily_music/logs/cron.log 2>&1
|
||
```
|
||
|
||
---
|
||
|
||
## GPU 리소스 충돌 방지
|
||
|
||
- 기존 auto_shorts 스케줄: 01:01 (프리캐시) → 03:00 (영상 생성)
|
||
- animily_music: **토요일 02:00** → auto_shorts와 시간 겹침 없음 (토요일만)
|
||
- ACE-Step과 FLUX/ComfyUI는 순차 실행 (동시 사용 시 OOM)
|
||
- 순서: ACE-Step 음악 생성 → ACE-Step 종료 → ComfyUI FLUX 이미지 → 종료 → ffmpeg 렌더
|
||
|
||
---
|
||
|
||
## 콘텐츠 스케줄 (주 1회)
|
||
|
||
| 주차 | 대상 | 길이 | 비고 |
|
||
|------|------|------|------|
|
||
| 1주 | 강아지 수면음악 | 2시간 | 솔로 피아노 |
|
||
| 2주 | 고양이 릴렉스 | 2시간 | 퍼링 앰비언트 |
|
||
| 3주 | 강아지 분리불안 | 6시간 | 소프트 레게 |
|
||
| 4주 | 반려동물 종합 | 12시간 | 하프 + 피아노 |
|
||
|
||
→ 4주 사이클 반복, 프롬프트 변주로 매번 다른 곡
|
||
|
||
---
|
||
|
||
## 의존성 (requirements.txt)
|
||
|
||
```
|
||
pydub
|
||
google-auth
|
||
google-auth-oauthlib
|
||
google-api-python-client
|
||
requests
|
||
Pillow
|
||
```
|
||
|
||
---
|
||
|
||
## 참고
|
||
|
||
- 과학적 근거 상세: [PET_MUSIC_GENERATION.md](PET_MUSIC_GENERATION.md)
|
||
- 기존 쇼츠 파이프라인: `/home/javamon/project/auto_shorts/` (수정 금지)
|
||
- ACE-Step 문서: `/home/javamon/ACE-Step-1.5/README.md`
|
||
|
||
---
|
||
|
||
*작성: 2026-04-21*
|