react-native-video-processing

react-native-video-processing

React Native视频处理库支持修剪压缩和预览功能

react-native-video-processing是一个跨平台视频处理库,支持iOS和Android。它提供视频修剪、压缩、预览和信息获取等功能。开发者可使用VideoPlayer组件或ProcessingManager API实现各种视频处理操作。该库具有简单易用的接口,支持自定义主题和尺寸,为React Native应用提供了灵活的视频处理方案。支持多种常见视频格式,如MP4、MOV等,并且在处理大文件时保持良好的性能表现。

react-native-video-processingReact Native视频处理移动应用开发开源库Github开源项目

react-native-视频处理

构建状态 语义化发布 npm 版本 npm 包

开始使用

npm install react-native-video-processing --save
yarn add react-native-video-processing

你可以通过运行以下命令进行测试

$ npm test$ yarn test

安装

注意:对于 RN 0.4x 版本使用 1.0 版本,对于 RN 0.3x 版本使用 0.16 版本

[Android]

  • 打开 android/app/src/main/java/[...]/MainApplication.java

  • 在文件顶部的导入部分添加 import com.shahenlibrary.RNVideoProcessingPackage;

  • 在 getPackages() 方法返回的列表中添加新的 new RNVideoProcessingPackage()

  • android/settings.gradle 文件末尾添加以下行:

include ':react-native-video-processing'
project(':react-native-video-processing').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video-processing/android')
  • android/app/build.gradle 文件的 dependencies 块内插入以下行:
    compile project(':react-native-video-processing')
  • AndroidManifest.xml 文件中添加以下行:
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

[iOS]

  1. 在 Xcode 中,右键点击你的 Xcode 项目并创建一个名为 RNVideoProcessingNew Group

  2. 进入 node_modules/react-native-video-processing/ios/RNVideoProcessing 并将 .swift 文件拖到你刚刚创建的组下。选择 Create folder references 选项(如果未选中)。

  3. 对子目录 RNVideoTrimmerRNTrimmerViewICGVideoTrimmer 及其下的所有文件重复步骤 1 和 2。确保保持文件夹层次结构相同。

  4. 进入 node_modules/react-native-video-processing/ios/GPUImage/framework 并将 GPUImage.xcodeproj 拖到 Xcode 中你项目的根目录。

    项目结构

  5. 在你项目的 Build Phases 下,确保你添加的 .swift 文件出现在 Compile Sources 中。

  6. 在你项目的 General 标签下,将以下框架添加到 Linked Frameworks and Libraries 中:

  • CoreMedia
  • CoreVideo
  • OpenGLES
  • AVFoundation
  • QuartzCore
  • MobileCoreServices
  • GPUImage
  1. GPUImage.frameworkiOS 添加到 Embedded Binaries 中。

  2. 导航到你项目的桥接头文件 <ProjectName-Bridging-Header.h> 并添加 #import "RNVideoProcessing.h"

  3. 清理并运行你的项目。

查看以下视频以获取更多设置参考。

设置

更新 ffmpeg 二进制文件

  1. 克隆 mobile-ffmpeg
  2. 设置项目,参见 README 中的 Prerequisites
  3. 修改 build/android-ffmpeg.sh 以生成二进制文件(更多信息
    1. 删除 --disable-programs 行
    2. 将 --disable-static 行改为 --enable-static
    3. 删除 --enable-shared 行
  4. 编译二进制文件:./android.sh --lts --disable-arm-v7a-neon --enable-x264 --enable-gpl --speed。命令可能以 failed 结束。这没关系,因为我们修改了构建脚本。确保每个构建输出:ffmpeg: ok
  5. prebuilt/[android-arm|android-arm64|android-x86|android-x86_64]/ffmpeg/bin/ffmpeg 中找到 ffmpeg 二进制文件
  6. 复制并重命名二进制文件到 android/src/main/jniLibs/[armeabi-v7a|arm64-v8a|x86|x86_64]/libffmpeg.so。确保你将二进制文件从 ffmpeg 重命名为 libffmpeg.so

使用示例

import React, { Component } from 'react'; import { View } from 'react-native'; import { VideoPlayer, Trimmer } from 'react-native-video-processing'; class App extends Component { trimVideo() { const options = { startTime: 0, endTime: 15, quality: VideoPlayer.Constants.quality.QUALITY_1280x720, // 仅适用于 iOS saveToCameraRoll: true, // 默认为 false // 仅适用于 iOS saveWithCurrentDate: true, // 默认为 false // 仅适用于 iOS }; this.videoPlayerRef.trim(options) .then((newSource) => console.log(newSource)) .catch(console.warn); } compressVideo() { const options = { width: 720, height: 1280, bitrateMultiplier: 3, saveToCameraRoll: true, // 默认为 false,仅适用于 iOS saveWithCurrentDate: true, // 默认为 false,仅适用于 iOS minimumBitrate: 300000, removeAudio: true, // 默认为 false }; this.videoPlayerRef.compress(options) .then((newSource) => console.log(newSource)) .catch(console.warn); } getPreviewImageForSecond(second) { const maximumSize = { width: 640, height: 1024 }; // 默认值为 { width: 1080, height: 1080 },仅适用于iOS this.videoPlayerRef.getPreviewForSecond(second, maximumSize) // maximumSize 仅适用于iOS .then((base64String) => console.log('这是图片的BASE64编码', base64String)) .catch(console.warn); } getVideoInfo() { this.videoPlayerRef.getVideoInfo() .then((info) => console.log(info)) .catch(console.warn); } render() { return ( <View style={{ flex: 1 }}> <VideoPlayer ref={ref => this.videoPlayerRef = ref} startTime={30} // 秒 endTime={120} // 秒 play={true} // 默认为false replay={true} // 视频结束后是否重新播放 rotate={true} // 如果视频是横向拍摄的,使用此属性来旋转视频,仅适用于iOS source={'file:///sdcard/DCIM/....'} playerWidth={300} // 仅适用于iOS playerHeight={500} // 仅适用于iOS style={{ backgroundColor: 'black' }} resizeMode={VideoPlayer.Constants.resizeMode.CONTAIN} onChange={({ nativeEvent }) => console.log({ nativeEvent })} // 每秒获取当前时间 /> <Trimmer source={'file:///sdcard/DCIM/....'} height={100} width={300} onTrackerMove={(e) => console.log(e.currentTime)} // 仅适用于iOS currentTime={this.video.currentTime} // 使用此属性设置跟踪器位置,仅适用于iOS themeColor={'white'} // 仅适用于iOS thumbWidth={30} // 仅适用于iOS trackerColor={'green'} // 仅适用于iOS onChange={(e) => console.log(e.startTime, e.endTime)} /> </View> ); } }

或者你可以使用ProcessingManager而不挂载VideoPlayer组件:

import React, { Component } from 'react'; import { View } from 'react-native'; import { ProcessingManager } from 'react-native-video-processing'; export class App extends Component { componentWillMount() { const { source } = this.props; ProcessingManager.getVideoInfo(source) .then(({ duration, size, frameRate, bitrate }) => console.log(duration, size, frameRate, bitrate)); // 在iOS上可以通过使用远程文件作为源来裁剪远程文件 ProcessingManager.trim(source, options) // 类似VideoPlayer的trim选项 .then((data) => console.log(data)); ProcessingManager.compress(source, options) // 类似VideoPlayer的compress选项 .then((data) => console.log(data)); ProcessingManager.reverse(source) // 反转源视频 .then((data) => console.log(data)); // 返回新的文件源 ProcessingManager.boomerang(source) // 创建源视频的"回旋镖"效果(正向播放然后反向播放) .then((data) => console.log(data)); // 返回新的文件源 const maximumSize = { width: 100, height: 200 }; ProcessingManager.getPreviewForSecond(source, forSecond, maximumSize) .then((data) => console.log(data)) } render() { return <View />; } }

如果这个项目对你有帮助,请<html> <a href="https://www.buymeacoffee.com/FnENSxi" target="_blank"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3c310ea8-1e06-408e-9416-4e3f4f02befe.png" alt="给我买杯咖啡" style="height: auto !important;width: auto;" ></a>

</html>

贡献

  1. 请遵循eslint样式指南。
  2. 请使用$ npm run commit提交。

路线图

  1. 使用FFMpeg替代MP4Parser
  2. 添加应用GLSL滤镜的能力
  3. Android应能够压缩视频
  4. 更多处理选项
  5. 为Android创建原生裁剪器组件
  6. 提供独立API
  7. 在README中描述API方法及其参数

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具使用教程AI营销产品酷表ChatExcelAI智能客服
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

数据安全AI助手热门AI工具AI辅助写作AI论文工具论文写作智能生成大纲
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

热门AI工具AI办公办公工具智能排版AI生成PPT博思AIPPT海量精品模板AI创作
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多