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