# API Библиотеки Adaptive Video Converter можно использовать программно в ваших Node.js/TypeScript проектах. ## Установка ```bash npm install @grom13/adaptive-video-converter ``` ## Быстрый старт ```typescript import { convertToDash } from '@grom13/adaptive-video-converter'; const result = await convertToDash({ inputPath: './video.mp4', outputDir: './output' }); console.log('Готово!', result.manifestPath); ``` ## Основные экспорты ### Функции - [`convertToDash()`](/api/convert) — Главная функция конвертации - [Утилиты](/api/utilities) — Вспомогательные функции (checkFFmpeg, getVideoMetadata и др.) - [Профили](/api/profiles) — Работа с профилями качества ### TypeScript типы - [Типы](/api/types) — Все доступные типы и интерфейсы ## Структура API ```typescript // Основная функция 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'; ``` ## Примеры использования ### Базовая конвертация ```typescript import { convertToDash } from '@grom13/adaptive-video-converter'; await convertToDash({ inputPath: './video.mp4', outputDir: './output' }); ``` ### С кастомными профилями ```typescript await convertToDash({ inputPath: './video.mp4', outputDir: './output', customProfiles: ['720', '1080', '1440'] }); ``` ### С обработкой прогресса ```typescript await convertToDash({ inputPath: './video.mp4', outputDir: './output', onProgress: (progress) => { console.log(`${progress.percent}% - ${progress.stage}`); console.log(`ETA: ${progress.eta}s`); } }); ``` ### Выбор кодека и формата ```typescript await convertToDash({ inputPath: './video.mp4', outputDir: './output', codecType: 'dual', // 'h264' | 'av1' | 'dual' format: 'both' // 'dash' | 'hls' | 'both' }); ``` ### С проверкой системы ```typescript 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); } ``` ### С анализом исходного видео ```typescript 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'] }); ``` ## Обработка ошибок ```typescript 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 ```typescript 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()](/api/convert) — Подробная документация основной функции - [Утилиты](/api/utilities) — Вспомогательные функции - [Профили](/api/profiles) — Работа с профилями качества - [Типы](/api/types) — TypeScript типы и интерфейсы