# 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`는 '자동 최고' 경로에만 적용)
- 영상 항목의 예상 크기는 영상 스트림만의 크기 (소리 병합 시 소폭 증가) — "약" 표기로 처리
