Files
2025-12-03 22:46:15 +03:00

237 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 типы и интерфейсы