diff --git a/components/media/ConversionOptions.tsx b/components/media/ConversionOptions.tsx index 4a40d5a..5565d38 100644 --- a/components/media/ConversionOptions.tsx +++ b/components/media/ConversionOptions.tsx @@ -1,7 +1,7 @@ 'use client'; import * as React from 'react'; -import { ChevronDown, ChevronUp, Sparkles } from 'lucide-react'; +import { ChevronDown, ChevronUp } from 'lucide-react'; import { Card } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Slider } from '@/components/ui/slider'; @@ -22,14 +22,6 @@ interface ConversionOptionsProps { disabled?: boolean; } -interface QualityPreset { - id: string; - name: string; - description: string; - icon: string; - options: ConversionOptions; -} - export function ConversionOptionsPanel({ inputFormat, outputFormat, @@ -38,141 +30,8 @@ export function ConversionOptionsPanel({ disabled = false, }: ConversionOptionsProps) { const [isExpanded, setIsExpanded] = React.useState(false); - const [selectedPreset, setSelectedPreset] = React.useState(null); - - // Quality presets based on output format category - const getPresets = (): QualityPreset[] => { - const category = outputFormat.category; - - if (category === 'video') { - return [ - { - id: 'high-quality', - name: 'High Quality', - description: 'Best quality, larger file size', - icon: '', - options: { - videoBitrate: '5M', - videoCodec: outputFormat.extension === 'webm' ? 'libvpx' : 'libx264', - audioBitrate: '192k', - audioCodec: outputFormat.extension === 'webm' ? 'libvorbis' : 'aac', - }, - }, - { - id: 'balanced', - name: 'Balanced', - description: 'Good quality, moderate size', - icon: '', - options: { - videoBitrate: '2M', - videoCodec: outputFormat.extension === 'webm' ? 'libvpx' : 'libx264', - audioBitrate: '128k', - audioCodec: outputFormat.extension === 'webm' ? 'libvorbis' : 'aac', - }, - }, - { - id: 'small-file', - name: 'Small File', - description: 'Smaller size, lower quality', - icon: '', - options: { - videoBitrate: '1M', - videoCodec: outputFormat.extension === 'webm' ? 'libvpx' : 'libx264', - audioBitrate: '96k', - audioCodec: outputFormat.extension === 'webm' ? 'libvorbis' : 'aac', - }, - }, - { - id: 'web-optimized', - name: 'Web Optimized', - description: 'Fast loading for web', - icon: '', - options: { - videoBitrate: '1.5M', - videoCodec: 'libvpx', - audioBitrate: '128k', - audioCodec: 'libvorbis', - videoResolution: '720x-1', - }, - }, - ]; - } else if (category === 'audio') { - return [ - { - id: 'high-quality', - name: 'High Quality', - description: 'Best audio quality', - icon: '', - options: { - audioBitrate: '320k', - audioCodec: outputFormat.extension === 'mp3' ? 'libmp3lame' : 'default', - }, - }, - { - id: 'balanced', - name: 'Balanced', - description: 'Good quality, smaller size', - icon: '', - options: { - audioBitrate: '192k', - audioCodec: outputFormat.extension === 'mp3' ? 'libmp3lame' : 'default', - }, - }, - { - id: 'small-file', - name: 'Small File', - description: 'Minimum file size', - icon: '', - options: { - audioBitrate: '128k', - audioCodec: outputFormat.extension === 'mp3' ? 'libmp3lame' : 'default', - }, - }, - ]; - } else if (category === 'image') { - return [ - { - id: 'high-quality', - name: 'High Quality', - description: 'Best image quality', - icon: '', - options: { - imageQuality: 95, - }, - }, - { - id: 'balanced', - name: 'Balanced', - description: 'Good quality', - icon: '', - options: { - imageQuality: 85, - }, - }, - { - id: 'web-optimized', - name: 'Web Optimized', - description: 'Optimized for web', - icon: '', - options: { - imageQuality: 75, - }, - }, - ]; - } - - return []; - }; - - const presets = getPresets(); - - const handlePresetClick = (preset: QualityPreset) => { - setSelectedPreset(preset.id); - onOptionsChange({ ...options, ...preset.options }); - }; const handleOptionChange = (key: string, value: any) => { - setSelectedPreset(null); // Clear preset when manual change onOptionsChange({ ...options, [key]: value }); }; @@ -407,36 +266,10 @@ export function ConversionOptionsPanel({ return ( - {/* Presets Section */} - {presets.length > 0 && ( -
-
- -

Quality Presets

-
-
- {presets.map((preset) => ( - - ))} -
-
- )} - {/* Advanced Options Toggle */} - ))} - - -
- Select a preset to automatically configure optimal settings for your use case -
-
- ); -} diff --git a/lib/media/utils/formatPresets.ts b/lib/media/utils/formatPresets.ts deleted file mode 100644 index 3e32cc1..0000000 --- a/lib/media/utils/formatPresets.ts +++ /dev/null @@ -1,188 +0,0 @@ -import type { ConversionOptions } from '@/types/media'; - -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); -}