@sellmind/video-editor-core
v2.0.0
Published
Core library for SellMind Video Editor
Readme
@sellmind-video-editor/core
A TypeScript library for video and audio processing using FFmpeg.
Features
Audio/Video Processing
- Voice/Video Separation: Split video files into separate audio and video tracks
- Voice Integration: Add audio tracks to video files
- Pure Video Extraction: Extract video-only tracks without audio
- Audio Extraction: Extract audio-only tracks from video files
- Audio Track Listing: Get information about audio tracks in video files
Video Processing
- Video Splitting: Split videos into multiple segments
- Video Merging: Combine multiple videos with optional transitions
- Format Conversion: Convert videos between different formats with quality control
- Frame Extraction: Extract frames from videos as images
- Video Analysis: Get detailed video metadata and information
Subtitle Management
- Add Subtitles: Add subtitle tracks to video files
- Remove Subtitles: Remove existing subtitle tracks
- List Subtitles: Get information about subtitle tracks
Installation
npm install @sellmind-video-editor/core
# or
pnpm add @sellmind-video-editor/corePrerequisites
This library requires FFmpeg to be installed on your system:
- macOS:
brew install ffmpeg - Ubuntu/Debian:
sudo apt update && sudo apt install ffmpeg - Windows: Download from FFmpeg official site
Usage
Voice/Video Processing
import {
splitVoiceAndVideo,
addVoiceToVideo,
getPureVideo,
getVoice,
listAudioTracks
} from '@sellmind-video-editor/core';
// Split video into separate audio and video files
await splitVoiceAndVideo({
inputVideo: 'input.mp4',
outputVideo: 'output_video.mp4',
outputAudio: 'output_audio.mp3',
audioFormat: 'mp3',
audioBitrate: '192k',
keepSubtitles: true
});
// Add audio to video
await addVoiceToVideo({
inputVideo: 'video.mp4',
inputAudio: 'audio.mp3',
outputVideo: 'combined.mp4',
audioVolume: 1.0
});
// Extract video without audio
await getPureVideo({
inputVideo: 'input.mp4',
outputVideo: 'video_only.mp4',
keepSubtitles: true
});
// Extract audio only
await getVoice({
inputVideo: 'input.mp4',
outputAudio: 'audio_only.mp3',
format: 'mp3',
bitrate: '192k'
});
// List audio tracks
const audioTracks = await listAudioTracks('input.mp4');
console.log(audioTracks);Video Processing
import {
splitVideo,
mergeVideos,
convertVideoFormat,
extractFrames,
getVideoInfo
} from '@sellmind-video-editor/core';
// Get video information
const videoInfo = await getVideoInfo('input.mp4');
console.log(`Duration: ${videoInfo.duration}s, Resolution: ${videoInfo.width}x${videoInfo.height}`);
// Split video into 30-second segments
await splitVideo({
inputVideo: 'input.mp4',
outputPattern: 'segment_%03d.mp4',
segmentDuration: 30,
outputDir: './segments'
});
// Merge multiple videos with fade transitions
await mergeVideos({
inputVideos: ['video1.mp4', 'video2.mp4', 'video3.mp4'],
outputVideo: 'merged.mp4',
transition: 'fade',
transitionDuration: 1.5
});
// Convert video to WebM format
await convertVideoFormat({
inputVideo: 'input.mp4',
outputVideo: 'output.webm',
outputFormat: 'webm',
quality: 'high',
resolution: '1920x1080'
});
// Extract frames as PNG images
await extractFrames({
inputVideo: 'input.mp4',
outputDir: './frames',
format: 'png',
fps: 1, // 1 frame per second
startTime: 10,
duration: 30
});Subtitle Management
import { addSubtitle, removeSubtitle, listSubtitles } from '@sellmind-video-editor/core';
// Add subtitle to video
await addSubtitle({
inputVideo: 'input.mp4',
subtitleFile: 'subtitles.srt',
outputVideo: 'output_with_subs.mp4',
language: 'en',
title: 'English Subtitles'
});
// Remove subtitle from video
await removeSubtitle({
inputVideo: 'input.mp4',
outputVideo: 'output_no_subs.mp4',
subtitleIndex: 0
});
// List all subtitles
const subtitles = await listSubtitles('input.mp4');
console.log(subtitles);API Reference
Voice/Video Functions
splitVoiceAndVideo(options: SplitVoiceVideoOptions): Promise<void>
Splits a video file into separate audio and video tracks.
Options:
inputVideo(string): Path to input video fileoutputVideo(string): Path for output video fileoutputAudio(string): Path for output audio fileaudioFormat?(AudioFormat): Audio format ('mp3' | 'wav' | 'aac' | 'flac')audioBitrate?(string): Audio bitrate (e.g., '192k', '320k')keepSubtitles?(boolean): Whether to keep subtitles in video output
addVoiceToVideo(options: AddVoiceOptions): Promise<void>
Adds an audio track to a video file.
Options:
inputVideo(string): Path to input video fileinputAudio(string): Path to input audio fileoutputVideo(string): Path for output video fileaudioVolume?(number): Audio volume multiplier (default: 1.0)
getPureVideo(options: PureVideoOptions): Promise<void>
Extracts video track without audio.
Options:
inputVideo(string): Path to input video fileoutputVideo(string): Path for output video filekeepSubtitles?(boolean): Whether to keep subtitles
getVoice(options: VoiceOptions): Promise<void>
Extracts audio track from video.
Options:
inputVideo(string): Path to input video fileoutputAudio(string): Path for output audio fileformat?(AudioFormat): Output audio formatbitrate?(string): Audio bitrate
listAudioTracks(inputVideo: string): Promise<AudioTrack[]>
Lists all audio tracks in a video file.
Returns: Array of AudioTrack objects with:
index(number): Track indexcodec(string): Audio codecchannels(number): Number of audio channelssampleRate(string): Sample ratebitrate(string): Bitratelanguage?(string): Language code if availabletitle?(string): Track title if available
Video Processing Functions
splitVideo(options: SplitVideoOptions): Promise<string[]>
Split a video into multiple segments.
Options:
inputVideo(string): Path to input video fileoutputPattern(string): Output filename pattern (e.g., 'segment_%03d.mp4')segmentDuration(number): Duration of each segment in secondsoutputDir?(string): Output directory pathvideoCodec?(string): Video codec to useaudioCodec?(string): Audio codec to usemaintainQuality?(boolean): Whether to maintain original quality
mergeVideos(options: MergeVideosOptions): Promise<void>
Merge multiple videos into a single video.
Options:
inputVideos(string[]): Array of input video file pathsoutputVideo(string): Path for output merged videovideoCodec?(string): Video codec to useaudioCodec?(string): Audio codec to usetransition?('none' | 'fade' | 'dissolve'): Transition type between videostransitionDuration?(number): Transition duration in seconds
convertVideoFormat(options: ConvertVideoFormatOptions): Promise<void>
Convert video to different format with quality options.
Options:
inputVideo(string): Path to input video fileoutputVideo(string): Path for output video fileoutputFormat('mp4' | 'avi' | 'mov' | 'mkv' | 'webm' | 'flv'): Target formatvideoCodec?(string): Video codec to useaudioCodec?(string): Audio codec to usevideoBitrate?(string): Video bitrateaudioBitrate?(string): Audio bitrateresolution?(string): Target resolution (e.g., '1920x1080')fps?(number): Target frame ratequality?('low' | 'medium' | 'high' | 'ultra'): Quality preset
extractFrames(options: ExtractFramesOptions): Promise<string[]>
Extract frames from video as images.
Options:
inputVideo(string): Path to input video fileoutputDir(string): Directory for output imagesoutputPattern?(string): Output filename pattern (e.g., 'frame_%04d.png')format?('png' | 'jpg' | 'bmp' | 'tiff'): Image formatfps?(number): Extract every nth frame per secondstartTime?(number): Start time in secondsduration?(number): Duration in secondsresolution?(string): Scale frames to specific resolution
getVideoInfo(inputVideo: string): Promise<VideoInfo>
Get detailed video information and metadata.
Returns: VideoInfo object with:
duration(number): Video duration in secondswidth(number): Video width in pixelsheight(number): Video height in pixelsfps(number): Frame ratevideoCodec(string): Video codec nameaudioCodec?(string): Audio codec name if availablebitrate(number): Video bitratesize(number): File size in bytes
Subtitle Functions
addSubtitle(options: AddSubtitleOptions): Promise<void>
Adds subtitle track to video.
Options:
inputVideo(string): Path to input video filesubtitleFile(string): Path to subtitle file (.srt, .vtt, .ass)outputVideo(string): Path for output video filelanguage?(string): Language codetitle?(string): Subtitle track title
removeSubtitle(options: RemoveSubtitleOptions): Promise<void>
Removes subtitle track from video.
Options:
inputVideo(string): Path to input video fileoutputVideo(string): Path for output video filesubtitleIndex(number): Index of subtitle track to remove
listSubtitles(inputVideo: string): Promise<SubtitleTrack[]>
Lists all subtitle tracks in a video file.
Returns: Array of SubtitleTrack objects with:
index(number): Track indexcodec(string): Subtitle codeclanguage?(string): Language code if availabletitle?(string): Track title if available
Error Handling
All functions throw errors for:
- Missing input files
- Invalid file formats
- FFmpeg processing errors
- File system permission issues
Always wrap function calls in try-catch blocks:
try {
await splitVoiceAndVideo({
inputVideo: 'input.mp4',
outputVideo: 'video.mp4',
outputAudio: 'audio.mp3'
});
} catch (error) {
console.error('Processing failed:', error.message);
}Development
Building
pnpm buildDevelopment Mode
pnpm devTesting
Create test files in the examples/ directory and run:
pnpm dev
node examples/your-test.jsLicense
MIT License - see LICENSE file for details.
