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

5.5 KiB
Raw Blame History

API Библиотеки

Adaptive Video Converter можно использовать программно в ваших Node.js/TypeScript проектах.

Установка

npm install @grom13/adaptive-video-converter

Быстрый старт

import { convertToDash } from '@grom13/adaptive-video-converter';

const result = await convertToDash({
  inputPath: './video.mp4',
  outputDir: './output'
});

console.log('Готово!', result.manifestPath);

Основные экспорты

Функции

  • convertToDash() — Главная функция конвертации
  • Утилиты — Вспомогательные функции (checkFFmpeg, getVideoMetadata и др.)
  • Профили — Работа с профилями качества

TypeScript типы

  • ТипыВсе доступные типы и интерфейсы

Структура API

// Основная функция
export { convertToDash } from './core/converter';

// Утилиты
export {
  checkFFmpeg,
  checkMP4Box,
  checkNvenc,
  checkAV1Support,
  getVideoMetadata,
  selectAudioBitrate
} from './utils';

// Профили
export {
  DEFAULT_PROFILES,
  selectProfiles
} from './config/profiles';

// Типы
export type {
  DashConvertOptions,
  DashConvertResult,
  VideoProfile,
  ThumbnailConfig,
  ConversionProgress,
  VideoMetadata,
  VideoOptimizations,
  CodecType
} from './types';

Примеры использования

Базовая конвертация

import { convertToDash } from '@grom13/adaptive-video-converter';

await convertToDash({
  inputPath: './video.mp4',
  outputDir: './output'
});

С кастомными профилями

await convertToDash({
  inputPath: './video.mp4',
  outputDir: './output',
  customProfiles: ['720', '1080', '1440']
});

С обработкой прогресса

await convertToDash({
  inputPath: './video.mp4',
  outputDir: './output',
  onProgress: (progress) => {
    console.log(`${progress.percent}% - ${progress.stage}`);
    console.log(`ETA: ${progress.eta}s`);
  }
});

Выбор кодека и формата

await convertToDash({
  inputPath: './video.mp4',
  outputDir: './output',
  codecType: 'dual',      // 'h264' | 'av1' | 'dual'
  format: 'both'          // 'dash' | 'hls' | 'both'
});

С проверкой системы

import {
  convertToDash,
  checkFFmpeg,
  checkNvenc
} from '@grom13/adaptive-video-converter';

// Проверка перед конвертацией
try {
  await checkFFmpeg();
  const hasNvenc = await checkNvenc();

  console.log('NVENC:', hasNvenc ? 'доступен' : 'недоступен');

  await convertToDash({
    inputPath: './video.mp4',
    outputDir: './output'
  });
} catch (error) {
  console.error('Ошибка:', error.message);
}

С анализом исходного видео

import {
  getVideoMetadata,
  convertToDash
} from '@grom13/adaptive-video-converter';

// Получить метаданные
const metadata = await getVideoMetadata('./video.mp4');

console.log('Разрешение:', `${metadata.width}×${metadata.height}`);
console.log('FPS:', metadata.fps);
console.log('Длительность:', metadata.duration, 'сек');

// Конвертация с учетом метаданных
await convertToDash({
  inputPath: './video.mp4',
  outputDir: './output',
  customProfiles: metadata.height >= 1080
    ? ['720', '1080', '1440']
    : ['360', '720']
});

Обработка ошибок

import { convertToDash } from '@grom13/adaptive-video-converter';

try {
  const result = await convertToDash({
    inputPath: './video.mp4',
    outputDir: './output'
  });

  console.log('✅ Успешно:', result.manifestPath);
} catch (error) {
  if (error.message.includes('FFmpeg not found')) {
    console.error('❌ FFmpeg не установлен');
  } else if (error.message.includes('MP4Box not found')) {
    console.error('❌ MP4Box не установлен');
  } else {
    console.error('❌ Ошибка:', error.message);
  }
}

Интеграция в Express

import express from 'express';
import multer from 'multer';
import { convertToDash } from '@grom13/adaptive-video-converter';
import { promises as fs } from 'fs';

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/convert', upload.single('video'), async (req, res) => {
  try {
    const result = await convertToDash({
      inputPath: req.file.path,
      outputDir: './public/videos',
      onProgress: (progress) => {
        // Можно отправлять через WebSocket
        console.log(`${progress.percent}%`);
      }
    });

    // Удалить временный файл
    await fs.unlink(req.file.path);

    res.json({
      success: true,
      manifestPath: result.manifestPath
    });
  } catch (error) {
    res.status(500).json({
      success: false,
      error: error.message
    });
  }
});

app.listen(3000);

Следующие шаги

  • convertToDash() — Подробная документация основной функции
  • Утилиты — Вспомогательные функции
  • Профили — Работа с профилями качества
  • Типы — TypeScript типы и интерфейсы