https://github.com/fausto95/react-native-forge
A powerful video processing module for React Native and Expo. Providing essential video manipulation features with native implementation for iOS and Android
https://github.com/fausto95/react-native-forge
expo expo-av expo-video react-native react-native-video
Last synced: 3 months ago
JSON representation
A powerful video processing module for React Native and Expo. Providing essential video manipulation features with native implementation for iOS and Android
- Host: GitHub
- URL: https://github.com/fausto95/react-native-forge
- Owner: Fausto95
- Created: 2025-01-25T13:57:55.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-25T14:16:38.000Z (over 1 year ago)
- Last Synced: 2025-10-18T02:52:55.016Z (6 months ago)
- Topics: expo, expo-av, expo-video, react-native, react-native-video
- Language: Kotlin
- Homepage: https://www.npmjs.com/package/react-native-forge
- Size: 2.31 MB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# React Native Forge
A powerful video processing module for React Native and Expo. Providing essential video manipulation features with native implementation for iOS and Android
## Demo
## Installation
```bash
npx expo install react-native-forge
```
## Features
- Generate video frames at specific timestamps
- Extract all frames from a video
- Get video duration
- Pad video to specific aspect ratios
- Cross-platform support (iOS, Android, Web)
## API Reference
### getAllFrames
Extracts all frames from a video at one-second intervals.
```typescript
function getAllFrames(
inputPath: string,
outputFolder: string,
duration: number,
size?: { width: number; height: number }
): Promise;
```
Parameters:
- inputPath : Path to the input video file
- outputFolder : Directory where frames will be saved
- duration : Duration of the video in seconds
- size (optional): Desired dimensions for the output frames
Returns: Promise resolving to an array of frame file paths
### getFrame
Extracts a single frame from a video at a specific timestamp.
```typescript
function getFrame(
inputPath: string,
outputPath: string,
timestamp: number,
quality?: number,
size?: { width: number; height: number }
): Promise;
```
Parameters:
- inputPath : Path to the input video file
- outputPath : Path where the frame will be saved
- timestamp : Time in seconds to extract the frame from
- quality (optional): JPEG compression quality (1-100, default: 15)
- size (optional): Desired dimensions for the output frame
Returns: Promise resolving to the output file path
### padToRatio
Pads a video to match a specific aspect ratio.
```typescript
function padToRatio(
inputPath: string,
outputPath: string,
targetRatio: number
): Promise<{ outputPath: string; ratio: number }>;
```
Parameters:
- inputPath : Path to the input video file
- outputPath : Path where the processed video will be saved
- targetRatio : Desired aspect ratio (width/height)
Returns: Promise resolving to an object containing the output path and final ratio
### getDuration
Gets the duration of a video in seconds.
```typescript
function getDuration(inputPath: string): Promise;
```
Parameters:
- inputPath : Path to the video file
Returns: Promise resolving to the video duration in seconds
| Feature | iOS | Android |
| --------------------- | --- | ------- |
| Generate All Frames | ✅ | ✅ |
| Generate Single Frame | ✅ | ✅ |
| Pad Video | ✅ | ✅ |
| Get Duration | ✅ | ✅ |
## Example Usage
```typescript
import ReactNativeForge from "react-native-forge";
// Extract a frame at 5 seconds
const frame = await ReactNativeForge.getFrame(
"file:///path/to/video.mp4",
"file:///path/to/output.jpg",
5,
80,
{ width: 1280, height: 720 }
);
// Get video duration
const duration = await ReactNativeForge.getDuration(
"file:///path/to/video.mp4"
);
// Extract all frames
const frames = await ReactNativeForge.getAllFrames(
"file:///path/to/video.mp4",
"file:///path/to/frames",
duration,
{ width: 1280, height: 720 }
);
```
## License
MIT
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.