8.1 KiB
8.1 KiB
Профили качества
Работа с профилями качества видео (разрешения, битрейты, FPS).
DEFAULT_PROFILES
Массив дефолтных профилей качества.
Сигнатура:
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 |
Пример:
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()
Автоматический выбор профилей на основе метаданных исходного видео.
Сигнатура:
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 если исходное видео поддерживает
Примеры:
Автовыбор профилей
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}`);
});
С кастомными профилями
import {
getVideoMetadata,
selectProfiles
} from '@grom13/adaptive-video-converter';
const metadata = await getVideoMetadata('./video.mp4');
// Парсинг кастомных профилей
const profiles = selectProfiles(metadata, ['720', '1080', '1440']);
// Профили будут созданы на основе исходного FPS
С высоким FPS
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 интерфейс
interface VideoProfile {
name: string; // Название (например, "1080p", "720p@60")
width: number; // Ширина в пикселях
height: number; // Высота в пикселях
videoBitrate: string; // Видео битрейт (например, "5000k")
audioBitrate: string; // Аудио битрейт (например, "128k")
fps: number; // Кадров в секунду
}
Создание кастомных профилей
Вручную
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
});
С расчетом битрейта
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
Базовый формат
<resolution>[@<fps>]
Примеры:
'360'→ 360p @ 30fps'720'→ 720p @ 30fps'1080'→ 1080p @ 30fps
С указанием FPS
<resolution>@<fps>
Примеры:
'720@60'→ 720p @ 60fps'1080@60'→ 1080p @ 60fps'1440@120'→ 1440p @ 120fps
Комбинации
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() автоматически происходит:
- Проверка разрешения — не превышает исходное
- Проверка FPS — не превышает исходный
- Ограничение FPS — максимум 120fps
- Расчет битрейтов — автоматически если не указаны
Пример:
// Если исходное видео 1080p @ 30fps
const profiles = selectProfiles(metadata, ['720@60', '1080', '1440']);
// Результат:
// - 720p @ 30fps (FPS понижен до исходного)
// - 1080p @ 30fps
// - 1440p → ПРОПУЩЕН (разрешение выше исходного)
Интеграция с convertToDash()
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() — Главная функция
- Утилиты — getVideoMetadata()
- Типы — VideoProfile тип