add vitepress

This commit is contained in:
2025-12-03 22:46:15 +03:00
parent d85cb263ce
commit 0ccd16c1cf
15 changed files with 5802 additions and 4 deletions

236
docs/api/index.md Normal file
View File

@@ -0,0 +1,236 @@
# 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 типы и интерфейсы