import type { ConversionOptions } from '@/types/conversion'; export interface FormatPreset { id: string; name: string; description: string; icon: string; category: 'video' | 'audio' | 'image'; outputFormat: string; options: ConversionOptions; } /** * Predefined format presets for common use cases */ export const FORMAT_PRESETS: FormatPreset[] = [ // Video Presets { id: 'youtube-video', name: 'YouTube Video', description: '1080p MP4, optimized for YouTube', icon: '🎬', category: 'video', outputFormat: 'mp4', options: { videoCodec: 'libx264', videoBitrate: '5M', videoResolution: '1920x-1', videoFps: 30, audioCodec: 'aac', audioBitrate: '192k', }, }, { id: 'instagram-video', name: 'Instagram Video', description: 'Square 1:1 format for Instagram', icon: '📸', category: 'video', outputFormat: 'mp4', options: { videoCodec: 'libx264', videoBitrate: '3M', videoResolution: '1080x-1', // Will be cropped to square videoFps: 30, audioCodec: 'aac', audioBitrate: '128k', }, }, { id: 'twitter-video', name: 'Twitter Video', description: '720p, optimized for Twitter', icon: '🐦', category: 'video', outputFormat: 'mp4', options: { videoCodec: 'libx264', videoBitrate: '2M', videoResolution: '1280x-1', videoFps: 30, audioCodec: 'aac', audioBitrate: '128k', }, }, { id: 'web-video', name: 'Web Optimized', description: 'Small file size for web streaming', icon: '🌐', category: 'video', outputFormat: 'mp4', options: { videoCodec: 'libx264', videoBitrate: '1.5M', videoResolution: '854x-1', videoFps: 24, audioCodec: 'aac', audioBitrate: '96k', }, }, // Audio Presets { id: 'podcast-audio', name: 'Podcast', description: 'MP3, optimized for voice', icon: '🎙️', category: 'audio', outputFormat: 'mp3', options: { audioCodec: 'libmp3lame', audioBitrate: '128k', audioSampleRate: 44100, audioChannels: 2, }, }, { id: 'music-high-quality', name: 'High Quality Music', description: 'MP3, 320kbps for music', icon: '🎵', category: 'audio', outputFormat: 'mp3', options: { audioCodec: 'libmp3lame', audioBitrate: '320k', audioSampleRate: 48000, audioChannels: 2, }, }, { id: 'audiobook', name: 'Audiobook', description: 'Mono, small file size', icon: '📚', category: 'audio', outputFormat: 'mp3', options: { audioCodec: 'libmp3lame', audioBitrate: '64k', audioSampleRate: 22050, audioChannels: 1, }, }, // Image Presets { id: 'web-thumbnail', name: 'Web Thumbnail', description: 'JPG, 800px width, optimized', icon: '🖼️', category: 'image', outputFormat: 'jpg', options: { imageQuality: 85, imageWidth: 800, }, }, { id: 'hd-image', name: 'HD Image', description: 'PNG, high quality, lossless', icon: '🎨', category: 'image', outputFormat: 'png', options: { imageQuality: 100, }, }, { id: 'social-media-image', name: 'Social Media', description: 'JPG, 1200px, optimized', icon: '📱', category: 'image', outputFormat: 'jpg', options: { imageQuality: 90, imageWidth: 1200, }, }, { id: 'web-optimized-image', name: 'Web Optimized', description: 'WebP, small file size', icon: '⚡', category: 'image', outputFormat: 'webp', options: { imageQuality: 80, }, }, ]; /** * Get presets by category */ export function getPresetsByCategory(category: 'video' | 'audio' | 'image'): FormatPreset[] { return FORMAT_PRESETS.filter(preset => preset.category === category); } /** * Get preset by ID */ export function getPresetById(id: string): FormatPreset | undefined { return FORMAT_PRESETS.find(preset => preset.id === id); }