기존 GhiVideo 저장소 HEAD의 트래킹 소스 362개 파일을 복제. (node_modules·storage·빌드 산출물·대용량 미디어는 .gitignore 규칙대로 제외) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
34 lines
2.0 KiB
Markdown
34 lines
2.0 KiB
Markdown
# AI Video Brief — "왜 60프레임이 아니냐" 질문 조사 + 화질/프레임 표시 추가
|
|
|
|
**소요 시간**: 10분
|
|
**Context 사용량**: input 720k / output 52k tokens (추정값)
|
|
|
|
## 질문
|
|
|
|
저장한 동영상이 60fps가 아니라 30fps 정도밖에 안 되는 이유.
|
|
|
|
## 조사 결과 (결론: 다운로드 문제 아님, 원본이 24fps)
|
|
|
|
- ffprobe로 저장 파일 확인: 사용자가 받은 영상들은 1080p **23.98fps**(AV1), 1920x960 **29.97fps**
|
|
- 해당 영상("1시간으로 끝내는 DJI 미니 5 프로 사용 설명서", oItten2naxk)의 유튜브 제공 포맷 전수 조사:
|
|
144p~2160p(4K) **전부 24fps만 존재** — 원본이 24fps로 업로드된 영상
|
|
- 유튜브는 원본보다 높은 프레임을 생성하지 않으므로 60fps는 불가능. 다운로더는 제공되는 최고 품질(1080p24)을 정상적으로 받았음
|
|
- 추가 발견: 이 영상은 4K까지 제공되지만 기본 상한 `VIDEO_MAX_HEIGHT=1080`이라 1080p로 받음 (환경변수로 조정 가능)
|
|
|
|
## 보완 구현
|
|
|
|
1. `downloader.download_video()` — 포맷 선택에서 `ext=mp4` 코덱 제한 제거
|
|
(`bestvideo[height<=H]+bestaudio` → mp4 통에 병합). vp9만 60fps를 제공하는 옛 영상도 프레임을 놓치지 않게.
|
|
반환값을 `(경로, {height, fps})` 튜플로 변경.
|
|
2. `main.py` — `result["quality"]`에 "1080p 24fps" 형식 저장
|
|
3. 웹 화면 — 다운로드 완료 링크에 실제 받은 화질/프레임 표시: "⬇️ mp4 저장 (240p 15fps · 0.5MB)"
|
|
|
|
## 테스트
|
|
|
|
- ✅ 테스트 영상 다운로드 → "240p 15fps · 0.5MB" 정확히 표시 (2005년 저화질 영상이라 정상)
|
|
|
|
## 다음 에이전트 참고
|
|
|
|
- 사용자가 프레임/화질 관련 질문 시: 먼저 `ffprobe`로 저장 파일 확인 → yt-dlp `extract_info`로 유튜브 제공 포맷 목록과 비교. 원본 fps 이상은 어떤 방법으로도 불가능.
|
|
- 4K로 받고 싶다는 요청이 오면 `VIDEO_MAX_HEIGHT=2160` 환경변수 (run.sh 실행 전 export).
|