Files
adaptive-video-converter/docs/api/profiles.md
2025-12-03 22:46:15 +03:00

8.1 KiB
Raw Permalink Blame History

Профили качества

Работа с профилями качества видео (разрешения, битрейты, 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() автоматически происходит:

  1. Проверка разрешения — не превышает исходное
  2. Проверка FPS — не превышает исходный
  3. Ограничение FPS — максимум 120fps
  4. Расчет битрейтов — автоматически если не указаны

Пример:

// Если исходное видео 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  // Использовать выбранные профили
});

См. также