# AI Video Brief — 화질/음질 선택 다운로드 기능 추가 **소요 시간**: 9분 **Context 사용량**: input 780k / output 58k tokens (추정값) ## 요청 내용 다운로드 가능한 영상 해상도들을 항목으로 보여주고 클릭 시 그 화질로 다운로드. 음성도 품질 목록을 보여주고 사용자가 선택. ## 구현 내용 (`ai_video_brief`) ### 백엔드 - `downloader.list_formats(url)` — 유튜브 제공 포맷을 조회해 영상: (해상도, fps) 조합별 대표 1개 (video-only 우선 + 코덱 우선순위 av01>vp9>avc1, 예상 크기 포함) 음성: 비트레이트별 대표 1개 (kbps, 확장자, 예상 크기) - `GET /api/formats?url=...` — 선택 화면용 목록 API - `POST /api/jobs` 확장: `format_id`(선택 스트림), `video_only`(병합 필요 여부), `quality_label`(표시용) - `download_video`: format_id 지정 시 `{fid}+bestaudio/...` 폴백 체인, 진행형(소리 포함) 스트림은 `{fid}/best` - `download_audio`: format_id 지정 시 해당 스트림 → mp3 변환 ### 웹 화면 - 🎬/🎵 버튼 클릭 → 즉시 다운로드 대신 **품질 선택 패널** 표시 - "품질 목록을 가져오는 중…" 로딩 → 항목 목록 (최상단 항목에 "추천" 배지) - 영상: "1080p 24fps · av01 · 약 537MB", 음성: "129kbps · m4a · 약 56MB" 형식 - 항목 클릭 → 그 품질로 다운로드 시작, 닫기 버튼으로 취소 - 완료 후 링크에 선택/실제 품질 표시 ## 테스트 결과 - ✅ 목록 API: DJI 영상 → 영상 8개(144p~4K, 크기 포함) / 음성 4개 정상 - ✅ 영상 선택 다운로드: 144p 15fps 선택 → ffprobe로 정확히 144p/15fps 수신 확인 - ✅ 음성 선택 다운로드: 47kbps 선택 → 완료, 품질 라벨 표시 확인 ## 다음 에이전트 참고 - 4K 등 1080p 초과 화질도 이제 선택 패널에서 받을 수 있음 (`VIDEO_MAX_HEIGHT`는 '자동 최고' 경로에만 적용) - 영상 항목의 예상 크기는 영상 스트림만의 크기 (소리 병합 시 소폭 증가) — "약" 표기로 처리