contaigents
Version:
Modular AI Content Ecosystem with Audio Generation
164 lines (163 loc) • 5.67 kB
JavaScript
import { FFmpegTool } from '../services/tools/FFmpegTool.js';
export async function testFFmpegTool() {
console.log('🎬 Testing FFmpeg Tool...\n');
const baseDir = process.cwd();
const ffmpegTool = new FFmpegTool(baseDir);
// Test 1: Check tool definition
console.log('📋 Tool Definition:');
const definition = ffmpegTool.getDefinition();
console.log(`Name: ${definition.name}`);
console.log(`Description: ${definition.description}`);
console.log(`Parameters: ${definition.parameters.length} parameters`);
console.log();
// Test 2: Show agent guidance
console.log('🤖 Agent Guidance:');
const guidance = ffmpegTool.getAgentGuidance();
console.log(guidance);
console.log();
// Test 3: Check FFmpeg availability
console.log('🔍 Checking FFmpeg availability...');
try {
const result = await ffmpegTool.execute({
operation: 'extract_audio',
input_file: 'nonexistent.mp4',
output_file: 'test.mp3'
});
if (!result.success && result.error?.includes('FFmpeg is not installed')) {
console.log('❌ FFmpeg is not installed. Please install FFmpeg to use this tool.');
console.log(' Install instructions:');
console.log(' - macOS: brew install ffmpeg');
console.log(' - Ubuntu: sudo apt install ffmpeg');
console.log(' - Windows: Download from https://ffmpeg.org/download.html');
}
else if (!result.success && result.error?.includes('Input file not found')) {
console.log('✅ FFmpeg is available (input file validation working)');
}
else {
console.log('✅ FFmpeg tool is ready');
}
}
catch (error) {
console.log(`❌ Error testing FFmpeg: ${error.message}`);
}
console.log();
// Test 4: Show example operations
console.log('📝 Example Operations:');
const examples = [
{
name: 'Extract Audio from Video',
params: {
operation: 'extract_audio',
input_file: 'video.mp4',
output_file: 'audio.mp3',
format: 'mp3',
quality: 'high'
}
},
{
name: 'Trim Video Clip',
params: {
operation: 'trim',
input_file: 'long_video.mp4',
output_file: 'clip.mp4',
start_time: '00:01:23',
end_time: '00:02:15'
}
},
{
name: 'Convert Audio Format',
params: {
operation: 'convert_format',
input_file: 'audio.wav',
output_file: 'audio.mp3',
format: 'mp3',
quality: '320k'
}
},
{
name: 'Resize Video',
params: {
operation: 'resize',
input_file: 'large_video.mp4',
output_file: 'small_video.mp4',
resolution: '1280x720',
quality: 'medium'
}
},
{
name: 'Add Watermark',
params: {
operation: 'overlay',
input_file: 'video.mp4',
output_file: 'watermarked.mp4',
overlay_file: 'logo.png',
overlay_position: 'top-right'
}
},
{
name: 'Add Text Overlay',
params: {
operation: 'overlay',
input_file: 'video.mp4',
output_file: 'titled.mp4',
text: 'My Video Title',
font_size: '32'
}
},
{
name: 'Extract GIF',
params: {
operation: 'extract_gif',
input_file: 'video.mp4',
output_file: 'animation.gif',
start_time: '00:00:10',
duration: '00:00:05'
}
},
{
name: 'Merge Videos',
params: {
operation: 'merge',
input_file: 'video1.mp4',
output_file: 'merged.mp4',
additional_files: ['video2.mp4', 'video3.mp4']
}
},
{
name: 'Replace Audio Track',
params: {
operation: 'replace_audio',
input_file: 'video.mp4',
output_file: 'dubbed.mp4',
additional_files: ['new_audio.mp3']
}
},
{
name: 'Change Playback Speed',
params: {
operation: 'speed',
input_file: 'normal.mp4',
output_file: 'fast.mp4',
speed: '2.0'
}
}
];
examples.forEach((example, index) => {
console.log(`${index + 1}. ${example.name}:`);
console.log(` Parameters: ${JSON.stringify(example.params, null, 2)}`);
console.log();
});
console.log('🎯 Key Features:');
console.log('• Comprehensive audio/video processing');
console.log('• Smart parameter validation');
console.log('• Security checks and path restrictions');
console.log('• Quality presets and format detection');
console.log('• Detailed error messages and guidance');
console.log('• Support for complex operations like overlays and merging');
console.log();
console.log('✅ FFmpeg Tool test completed!');
}
// Run test if called directly
if (import.meta.url === `file://${process.argv[1]}`) {
testFFmpegTool().catch(console.error);
}