# Профили качества Работа с профилями качества видео (разрешения, битрейты, FPS). ## DEFAULT_PROFILES Массив дефолтных профилей качества. **Сигнатура:** ```typescript const DEFAULT_PROFILES: VideoProfile[] ``` **Содержимое:** | Профиль | Разрешение | Видео битрейт | Аудио битрейт | FPS | |---------|------------|---------------|---------------|-----| | 360p | 640×360 | 800k | 96k | 30 | | 480p | 854×480 | 1400k | 128k | 30 | | 720p | 1280×720 | 2500k | 128k | 30 | | 1080p | 1920×1080 | 5000k | 192k | 30 | | 1440p | 2560×1440 | 8000k | 192k | 30 | | 2160p (4K) | 3840×2160 | 16000k | 192k | 30 | **Пример:** ```typescript import { DEFAULT_PROFILES } from '@grom13/adaptive-video-converter'; console.log('Доступные профили:', DEFAULT_PROFILES.length); DEFAULT_PROFILES.forEach(profile => { console.log(`${profile.name}: ${profile.width}×${profile.height} @ ${profile.videoBitrate}`); }); ``` --- ## selectProfiles() Автоматический выбор профилей на основе метаданных исходного видео. **Сигнатура:** ```typescript function selectProfiles( metadata: VideoMetadata, customProfiles?: string[] ): VideoProfile[] ``` **Параметры:** - `metadata` — Метаданные исходного видео (из `getVideoMetadata()`) - `customProfiles` — Опциональные кастомные профили как строки **Возвращает:** Массив выбранных профилей **Логика автовыбора:** | Исходное разрешение | Выбранные профили | |---------------------|-------------------| | ≤ 720p | 360p, 480p, 720p | | 1080p | 360p, 720p, 1080p | | 1440p | 720p, 1080p, 1440p | | 2160p (4K) | 1080p, 1440p, 2160p | **Особенности:** - FPS профилей соответствует исходному видео (до 120fps max) - Битрейты рассчитываются автоматически по формуле BPP (Bits Per Pixel) - Создаются варианты с высоким FPS если исходное видео поддерживает **Примеры:** ### Автовыбор профилей ```typescript import { getVideoMetadata, selectProfiles } from '@grom13/adaptive-video-converter'; const metadata = await getVideoMetadata('./video.mp4'); const profiles = selectProfiles(metadata); console.log('Выбранные профили:'); profiles.forEach(p => { console.log(`- ${p.name}: ${p.width}×${p.height} @ ${p.fps}fps, ${p.videoBitrate}`); }); ``` ### С кастомными профилями ```typescript import { getVideoMetadata, selectProfiles } from '@grom13/adaptive-video-converter'; const metadata = await getVideoMetadata('./video.mp4'); // Парсинг кастомных профилей const profiles = selectProfiles(metadata, ['720', '1080', '1440']); // Профили будут созданы на основе исходного FPS ``` ### С высоким FPS ```typescript import { getVideoMetadata, selectProfiles } from '@grom13/adaptive-video-converter'; const metadata = await getVideoMetadata('./gameplay.mp4'); // Если исходное видео 60fps, создаст профили: // 720p@60, 1080p@60, 1440p@60 const profiles = selectProfiles(metadata, ['720@60', '1080@60', '1440@60']); ``` --- ## VideoProfile интерфейс ```typescript interface VideoProfile { name: string; // Название (например, "1080p", "720p@60") width: number; // Ширина в пикселях height: number; // Высота в пикселях videoBitrate: string; // Видео битрейт (например, "5000k") audioBitrate: string; // Аудио битрейт (например, "128k") fps: number; // Кадров в секунду } ``` --- ## Создание кастомных профилей ### Вручную ```typescript import type { VideoProfile } from '@grom13/adaptive-video-converter'; import { convertToDash } from '@grom13/adaptive-video-converter'; const myProfiles: VideoProfile[] = [ { name: '720p-high', width: 1280, height: 720, videoBitrate: '3500k', // Выше стандартного audioBitrate: '192k', fps: 30 }, { name: '1080p-ultra', width: 1920, height: 1080, videoBitrate: '8000k', // Выше стандартного audioBitrate: '256k', fps: 60 } ]; await convertToDash({ input: './video.mp4', outputDir: './output', profiles: myProfiles }); ``` ### С расчетом битрейта ```typescript import type { VideoProfile } from '@grom13/adaptive-video-converter'; // BPP (Bits Per Pixel) формула function calculateBitrate( width: number, height: number, fps: number, bpp: number = 0.1 // По умолчанию 0.1 ): string { const bitrate = Math.round(width * height * fps * bpp / 1000); return `${bitrate}k`; } const profile: VideoProfile = { name: '1080p60', width: 1920, height: 1080, videoBitrate: calculateBitrate(1920, 1080, 60, 0.1), // ~12000k audioBitrate: '192k', fps: 60 }; ``` --- ## Форматы строк для customProfiles ### Базовый формат ``` [@] ``` **Примеры:** - `'360'` → 360p @ 30fps - `'720'` → 720p @ 30fps - `'1080'` → 1080p @ 30fps ### С указанием FPS ``` @ ``` **Примеры:** - `'720@60'` → 720p @ 60fps - `'1080@60'` → 1080p @ 60fps - `'1440@120'` → 1440p @ 120fps ### Комбинации ```typescript const profiles = ['360', '720@30', '1080@60', '1440@120']; ``` --- ## Рекомендации по битрейтам ### Стандартное качество (BPP ~0.1) | Профиль | Битрейт | |---------|---------| | 360p @ 30fps | 800k | | 480p @ 30fps | 1400k | | 720p @ 30fps | 2500k | | 1080p @ 30fps | 5000k | | 1440p @ 30fps | 8000k | | 2160p @ 30fps | 16000k | ### Высокое качество (BPP ~0.15) | Профиль | Битрейт | |---------|---------| | 720p @ 30fps | 3800k | | 1080p @ 30fps | 7500k | | 1440p @ 30fps | 12000k | | 2160p @ 30fps | 24000k | ### Высокий FPS Для 60fps — умножить на 2 Для 120fps — умножить на 4 **Примеры:** - 1080p @ 60fps: 5000k × 2 = 10000k - 1440p @ 120fps: 8000k × 4 = 32000k --- ## Валидация профилей При использовании `selectProfiles()` или `convertToDash()` автоматически происходит: 1. **Проверка разрешения** — не превышает исходное 2. **Проверка FPS** — не превышает исходный 3. **Ограничение FPS** — максимум 120fps 4. **Расчет битрейтов** — автоматически если не указаны **Пример:** ```typescript // Если исходное видео 1080p @ 30fps const profiles = selectProfiles(metadata, ['720@60', '1080', '1440']); // Результат: // - 720p @ 30fps (FPS понижен до исходного) // - 1080p @ 30fps // - 1440p → ПРОПУЩЕН (разрешение выше исходного) ``` --- ## Интеграция с convertToDash() ```typescript import { getVideoMetadata, selectProfiles, convertToDash } from '@grom13/adaptive-video-converter'; // 1. Получить метаданные const metadata = await getVideoMetadata('./video.mp4'); // 2. Выбрать профили const profiles = selectProfiles(metadata, ['720', '1080', '1440']); // 3. Конвертация await convertToDash({ input: './video.mp4', outputDir: './output', profiles // Использовать выбранные профили }); ``` --- ## См. также - [convertToDash()](/api/convert) — Главная функция - [Утилиты](/api/utilities) — getVideoMetadata() - [Типы](/api/types) — VideoProfile тип