capacitor-plugin-video-editor
Capacitor plugin to edit videos
Install (Capacitor 6.x)
npm install @whiteguru/capacitor-plugin-video-editor
npx cap sync
or for Capacitor 5.x
npm install @whiteguru/capacitor-plugin-video-editor@^5.0.6
npx cap sync
or for Capacitor 4.x
npm install @whiteguru/capacitor-plugin-video-editor@^4.0.4
npx cap sync
or for Capacitor 3.x
npm install @whiteguru/capacitor-plugin-video-editor@^3.0.1
npx cap sync
Android
This API requires the following permissions be added to your AndroidManifest.xml
:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
You can also specify those permissions only for the Android versions where they will be requested:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
The storage permissions are for reading video files.
Read about Setting Permissions in the Android Guide for more information on setting Android permissions.
Example
import {
VideoEditor,
MediaFileResult,
} from '@whiteguru/capacitor-plugin-video-editor';
const sourceVideoPath =
'file:///var/mobile/Containers/Data/...../sourceVideo.mp4';
const progressListener = await VideoEditor.addListener(
'transcodeProgress',
info => console.log('info', info),
);
VideoEditor.edit({
path: sourceVideoPath,
transcode: {
width: 720,
height: 480,
keepAspectRatio: true,
},
trim: {
startsAt: 3 * 1000,
endsAt: 10 * 1000,
},
}).then(
(mediaFileResult: MediaFileResult) => {
progressListener.remove();
console.log('mediaPath', mediaFileResult.file.path);
},
error => {
console.error('error', error);
},
);
VideoEditor.thumbnail({
path: sourceVideoPath,
width: 150,
height: 150,
at: 4 * 1000,
}).then(
(thumbMediaFileResult: MediaFileResult) => {
console.log('thumbPath', thumbMediaFileResult.file.path);
},
error => {
console.error('error', error);
},
);
API
edit(...)
edit(options: EditOptions) => Promise<MediaFileResult>
Returns: Promise<MediaFileResult>
thumbnail(...)
thumbnail(options: ThumbnailOptions) => Promise<MediaFileResult>
Returns: Promise<MediaFileResult>
addListener('transcodeProgress', ...)
addListener(eventName: 'transcodeProgress', listenerFunc: (info: ProgressInfo) => void) => Promise<PluginListenerHandle> & PluginListenerHandle
Param | Type |
---|
eventName | 'transcodeProgress' |
listenerFunc | (info: ProgressInfo) => void |
Returns: Promise<PluginListenerHandle> & PluginListenerHandle
Interfaces
MediaFileResult
MediaFile
Prop | Type | Description |
---|
name | string | The name of the file, without path information. |
path | string | The full path of the file, including the name. |
type | string | The file's mime type |
size | number | The size of the file, in bytes. |
EditOptions
TrimOptions
Prop | Type | Description |
---|
startsAt | number | StartsAt in milliseconds |
endsAt | number | EndsAt in milliseconds |
TranscodeOptions
Prop | Type |
---|
height | number |
width | number |
keepAspectRatio | boolean |
fps | number |
ThumbnailOptions
Prop | Type | Description |
---|
path | string | |
at | number | The time position where the frame will be retrieved in milliseconds. |
width | number | |
height | number | |
PluginListenerHandle
Prop | Type |
---|
remove | () => Promise<void> |
ProgressInfo