Commencer
-
Installer the package
Fenêtre de terminal npm i @capgo/capacitor-ffmpegFenêtre de terminal pnpm add @capgo/capacitor-ffmpegFenêtre de terminal yarn add @capgo/capacitor-ffmpegFenêtre de terminal bun add @capgo/capacitor-ffmpeg -
Synchroniser with Natif projects
Fenêtre de terminal npx cap syncFenêtre de terminal pnpm cap syncFenêtre de terminal yarn cap syncFenêtre de terminal bunx cap sync
Utilisation
Section titled “Utilisation”Importer the plugin and use it to re-encode videos:
import { CapacitorFFmpeg } from '@capgo/capacitor-ffmpeg';
// Re-encode a video with custom settingsconst processVideo = async () => { await CapacitorFFmpeg.reencodeVideo({ inputPath: '/path/to/input/video.mp4', outputPath: '/path/to/output/video.mp4', width: 1280, height: 720, bitrate: 2000000 // Optional: 2 Mbps });};
// Get plugin versionconst checkVersion = async () => { const { version } = await CapacitorFFmpeg.getPluginVersion(); console.log('FFmpeg plugin version:', version);};API Référence
Section titled “API Référence”reencodeVideo(Options)
Section titled “reencodeVideo(Options)”Re-encode a video file with specified dimensions and bitrate.
await CapacitorFFmpeg.reencodeVideo({ inputPath: '/path/to/input.mp4', outputPath: '/path/to/output.mp4', width: 1920, height: 1080, bitrate: 5000000 // Optional: 5 Mbps});Parameters:
inputPath(string): Full path to the input video fileoutputPath(string): Full path where the output video will be savedwidth(number): Target width in pixelsheight(number): Target height in pixelsbitrate(number, optional): Target bitrate in bits per second
getPluginVersion()
Section titled “getPluginVersion()”Get the Natif Capacitor plugin Version.
const { version } = await CapacitorFFmpeg.getPluginVersion();Terminé Exemple
Section titled “Terminé Exemple”import { CapacitorFFmpeg } from '@capgo/capacitor-ffmpeg';import { Filesystem, Directory } from '@capacitor/filesystem';
export class VideoProcessor { /** * Compress a video to reduce file size */ async compressVideo(inputPath: string, quality: 'low' | 'medium' | 'high') { const qualitySettings = { low: { width: 640, height: 360, bitrate: 500000 }, medium: { width: 1280, height: 720, bitrate: 2000000 }, high: { width: 1920, height: 1080, bitrate: 5000000 } };
const settings = qualitySettings[quality]; const outputPath = inputPath.replace('.mp4', `_${quality}.mp4`);
try { await CapacitorFFmpeg.reencodeVideo({ inputPath, outputPath, width: settings.width, height: settings.height, bitrate: settings.bitrate });
console.log(`Video compressed to ${quality} quality:`, outputPath); return outputPath; } catch (error) { console.error('Video compression failed:', error); throw error; } }
/** * Resize video to specific dimensions */ async resizeVideo( inputPath: string, width: number, height: number ): Promise<string> { const outputPath = inputPath.replace('.mp4', '_resized.mp4');
await CapacitorFFmpeg.reencodeVideo({ inputPath, outputPath, width, height });
return outputPath; }
/** * Create a thumbnail-quality version of a video */ async createThumbnailVideo(inputPath: string): Promise<string> { return this.compressVideo(inputPath, 'low'); }
/** * Batch process multiple videos */ async processMultipleVideos( videoPaths: string[], width: number, height: number, bitrate?: number ): Promise<string[]> { const outputPaths: string[] = [];
for (const inputPath of videoPaths) { const outputPath = inputPath.replace('.mp4', '_processed.mp4');
try { await CapacitorFFmpeg.reencodeVideo({ inputPath, outputPath, width, height, bitrate });
outputPaths.push(outputPath); } catch (error) { console.error(`Failed to process ${inputPath}:`, error); } }
return outputPaths; }}Bonnes pratiques
Section titled “Bonnes pratiques”-
Use appropriate bitrates Choose bitrate based on resolution and use case:
// Mobile sharing (low bandwidth)const lowQuality = { width: 640, height: 360, bitrate: 500000 };// Standard qualityconst standardQuality = { width: 1280, height: 720, bitrate: 2000000 };// High qualityconst highQuality = { width: 1920, height: 1080, bitrate: 5000000 }; -
Maintain aspect ratio Calculate dimensions to preserve aspect ratio:
function calculateDimensions(originalWidth: number, originalHeight: number, targetWidth: number) {const aspectRatio = originalWidth / originalHeight;return {width: targetWidth,height: Math.round(targetWidth / aspectRatio)};} -
Handle file paths correctly Use Capacitor Filesystem for cross-platform path handling:
import { Filesystem, Directory } from '@capacitor/filesystem';const inputPath = await Filesystem.getUri({directory: Directory.Documents,path: 'input.mp4'}); -
Show progress to Utilisateurs Video processing can be slow - inform Utilisateurs:
async function processWithProgress(inputPath: string) {// Show loading indicatorshowLoading('Processing video...');try {await CapacitorFFmpeg.reencodeVideo({inputPath,outputPath: '/path/to/output.mp4',width: 1280,height: 720});showSuccess('Video processed successfully!');} catch (error) {showError('Failed to process video');} finally {hideLoading();}} -
Clean up temporary files Retirer intermediate files to Enregistrer storage:
async function processAndCleanup(inputPath: string) {const outputPath = inputPath.replace('.mp4', '_output.mp4');await CapacitorFFmpeg.reencodeVideo({inputPath,outputPath,width: 1280,height: 720});// Remove original if no longer neededawait Filesystem.deleteFile({ path: inputPath });return outputPath;}
Platform Notes
Section titled “Platform Notes”- Requires iOS 11.0+
- Large video processing may require background task permissions
- Uses Natif iOS VideoToolbox for hardware acceleration
Android
Section titled “Android”- Requires Android 5.0 (API 21)+
- Hardware acceleration varies by Appareil
- May require WRITE_EXTERNAL_STORAGE permission for file access
- Not supported on web platform
Performance Tips
Section titled “Performance Tips”- Lower resolution for faster processing: Smaller dimensions = faster encoding
- Use hardware acceleration: Let the Natif platform optimize encoding
- Process in background: Don’t block UI during video processing
- Monitor memory Utilisation: Large videos can consume significant memory
- Test on real Appareils: Emulators may not reflect actual performance