当前位置:   article > 正文

uniapp 安卓ffmpeg音视频处理原生插件_uniapp ffmpeg

uniapp ffmpeg

插件介绍

安卓ffmpeg音视频处理原生插件,支持音视频转换,音视频剪切,添加字幕,添加水印等操作,支持自定义指令,取消指令执行等,功能比较全面,支持RTMP文件推流

插件地址

安卓ffmpeg音视频处理原生插件 - DCloud 插件市场

详细使用文档

 uniapp 安卓ffmpeg音视频处理原生插件

超级福利 

uniapp leven系列插件购买超级福利 

用法

公共方法

插件引入

  const commonModule = uni.requireNativePlugin("leven-ffmpeg-CommonModule");

页面内容

  1. <template>
  2. <view>
  3. <uni-card title="操作文件">
  4. <view class="audio-file-box">
  5. <uni-easyinput v-model="videoPath" placeholder="视频文件路径"></uni-easyinput>
  6. <button style="margin-left: 10px;" type="primary" @click="selectVideoFile">选择视频文件</button>
  7. </view>
  8. <view style="margin-bottom: 5px;"><text style="color: #999999; font-size: 14px;">视频请选择.mp4文件</text></view>
  9. <view style="margin-bottom: 5px;"><text style="color: #999999; font-size: 14px;">转换后的文件路径:{{dirPath}}</text></view>
  10. <view><text style="color: #999999; font-size: 14px;">自定义指令内容:{{command}}</text></view>
  11. </uni-card>
  12. <uni-card title="公共接口">
  13. <button type="primary" @click="filePermission">申请文件权限</button>
  14. <button type="primary" @click="customCommands">自定义指令(以视频翻转为例)</button>
  15. <button type="primary" @click="cancelCommands">取消执行命令</button>
  16. <button type="primary" @click="logStr = ''">清空日志</button>
  17. </uni-card>
  18. <uni-card class="uni-card-box" title="日志">
  19. <view><text style="font-size: 14px; flex-wrap: wrap;">{{logStr}}</text></view>
  20. </uni-card>
  21. </view>
  22. </template>
  23. <script>
  24. const commonModule = uni.requireNativePlugin("leven-ffmpeg-CommonModule");
  25. export default {
  26. data() {
  27. return {
  28. // 视频文件
  29. videoPath: "",
  30. //转换后文件所在目录
  31. dirPath: "/storage/emulated/0/leven-ffmpeg/",
  32. // 自定义指令内容
  33. command: "",
  34. logStr: "",
  35. }
  36. },
  37. methods: {
  38. // 选择视频文件
  39. selectVideoFile() {
  40. commonModule.selectVideoFile(res => {
  41. this.writeLog(JSON.stringify(res))
  42. if (res.code == 0 && res.data && res.data.files && Array.isArray(res.data.files) && res.data.files.length > 0) {
  43. this.videoPath = res.data.files[0].path;
  44. this.command = "ffmpeg -y -i " + this.videoPath + " -vf hflip -c:v libx264 " + this.dirPath + "自定义指令后的文件.mp4";
  45. }
  46. })
  47. },
  48. // 申请文件权限
  49. filePermission() {
  50. commonModule.filePermission(res => {
  51. this.writeLog(JSON.stringify(res))
  52. })
  53. },
  54. // 自定义指令
  55. customCommands() {
  56. commonModule.customCommands({
  57. cmd: this.command
  58. }, res => {
  59. this.writeLog(JSON.stringify(res))
  60. })
  61. },
  62. // 取消执行命令
  63. cancelCommands() {
  64. commonModule.cancelCommands(res => {
  65. this.writeLog(JSON.stringify(res))
  66. })
  67. },
  68. // 写日志
  69. writeLog(str) {
  70. console.log(str);
  71. let logStr = uni.$lv.date.format(null, "yyyy-mm-dd hh:MM:ss") + " " + str + "\n";
  72. this.logStr = logStr + this.logStr;
  73. },
  74. }
  75. }
  76. </script>
  77. <style>
  78. .audio-file-box {
  79. flex-direction: row;
  80. margin-bottom: 5px;
  81. }
  82. </style>

音频操作

插件引入

  const module = uni.requireNativePlugin("leven-ffmpeg-AudioModule");

页面内容

 

  1. <template>
  2. <view>
  3. <uni-card title="操作文件">
  4. <view class="audio-file-box">
  5. <uni-easyinput v-model="audioPath" placeholder="音频文件路径"></uni-easyinput>
  6. <button style="margin-left: 10px;" type="primary" @click="selectAudioFile">选择音频文件</button>
  7. </view>
  8. <view class="audio-file-box">
  9. <uni-easyinput v-model="videoPath" placeholder="视频文件路径"></uni-easyinput>
  10. <button style="margin-left: 10px;" type="primary" @click="selectVideoFile">选择视频文件</button>
  11. </view>
  12. <view style="margin-bottom: 5px;"><text style="color: #999999; font-size: 14px;">音频请选择.mp3,视频请选择.mp4文件</text></view>
  13. <view><text style="color: #999999; font-size: 14px;">转换后的文件路径:{{dirPath}}</text></view>
  14. </uni-card>
  15. <uni-card title="音频操作">
  16. <button type="primary" @click="transformAudio">音频转码</button>
  17. <button type="primary" @click="cutAudio">音频剪切</button>
  18. <button type="primary" @click="concatAudio">音频拼接</button>
  19. <button type="primary" @click="mixAudio">混音</button>
  20. <button type="primary" @click="changeVolume">更改音频音量</button>
  21. <button type="primary" @click="extractAudio">从视频文件抽取音频</button>
  22. <button type="primary" @click="decodeAudio">音频解码PCM</button>
  23. <button type="primary" @click="encodeAudio">音频编码</button>
  24. <button type="primary" @click="audioFadeIn">音频淡入</button>
  25. <button type="primary" @click="audioFadeOut">音频淡出</button>
  26. <button type="primary" @click="audio2Amr">音频转amr</button>
  27. <button type="primary" @click="audioInfo">获取音频信息</button>
  28. <button type="primary" @click="logStr = ''">清空日志</button>
  29. </uni-card>
  30. <uni-card class="uni-card-box" title="日志">
  31. <view><text style="font-size: 14px; flex-wrap: wrap;">{{logStr}}</text></view>
  32. </uni-card>
  33. </view>
  34. </template>
  35. <script>
  36. const commonModule = uni.requireNativePlugin("leven-ffmpeg-CommonModule");
  37. const module = uni.requireNativePlugin("leven-ffmpeg-AudioModule");
  38. export default {
  39. data() {
  40. return {
  41. // 音频文件
  42. audioPath: "",
  43. // 视频文件
  44. videoPath: "",
  45. //转换后文件所在目录
  46. dirPath: "/storage/emulated/0/leven-ffmpeg/",
  47. // 当前选择的文件名称
  48. audioName: "",
  49. logStr: "",
  50. }
  51. },
  52. methods: {
  53. // 选择音频文件
  54. selectAudioFile() {
  55. commonModule.selectAudioFile(res => {
  56. this.writeLog(JSON.stringify(res))
  57. if (res.code == 0 && res.data && res.data.files && Array.isArray(res.data.files) && res.data.files.length > 0) {
  58. this.audioPath = res.data.files[0].path;
  59. this.audioName = res.data.files[0].name.replace(".mp3", "");
  60. }
  61. })
  62. },
  63. // 选择音频文件
  64. selectVideoFile() {
  65. commonModule.selectVideoFile(res => {
  66. this.writeLog(JSON.stringify(res))
  67. if (res.code == 0 && res.data && res.data.files && Array.isArray(res.data.files) && res.data.files.length > 0) {
  68. this.videoPath = res.data.files[0].path;
  69. }
  70. })
  71. },
  72. // 申请文件权限
  73. filePermission() {
  74. commonModule.filePermission(res => {
  75. this.writeLog(JSON.stringify(res))
  76. })
  77. },
  78. // 音频转码
  79. transformAudio() {
  80. module.transformAudio({
  81. //源文件
  82. src: this.audioPath,
  83. // 目标文件
  84. target: this.dirPath + "转码后的音频.aac"
  85. }, res => {
  86. this.writeLog(JSON.stringify(res))
  87. })
  88. },
  89. // 音频剪切
  90. cutAudio() {
  91. module.cutAudio({
  92. //类型,1.根据时长剪切,2.根据结束时间剪切
  93. type: 2,
  94. //源文件
  95. src: this.audioPath,
  96. // 目标文件
  97. target: this.dirPath + "剪切后的音频.mp3",
  98. //开始剪切时间
  99. startTime: 60,
  100. //时长(type=1时有效)
  101. duration: 60,
  102. //剪切结束时间(type=2时有效)
  103. endTime: 120
  104. }, res => {
  105. this.writeLog(JSON.stringify(res))
  106. })
  107. },
  108. // 音频拼接
  109. concatAudio() {
  110. commonModule.selectAudioFile(res => {
  111. if (res.code == 0 && res.data && res.data.files && Array.isArray(res.data.files) && res.data.files.length > 0) {
  112. let path = res.data.files[0].path;
  113. module.concatAudio({
  114. //源文件
  115. src: this.audioPath,
  116. //拼接文件
  117. append: path,
  118. // 目标文件
  119. target: this.dirPath + "拼接后的音频.mp3"
  120. }, res => {
  121. this.writeLog(JSON.stringify(res))
  122. })
  123. }
  124. })
  125. },
  126. // 音频混合
  127. mixAudio() {
  128. commonModule.selectAudioFile(res => {
  129. if (res.code == 0 && res.data && res.data.files && Array.isArray(res.data.files) && res.data.files.length > 0) {
  130. let path = res.data.files[0].path;
  131. module.mixAudio({
  132. //源文件
  133. src: this.audioPath,
  134. //混合文件
  135. mix: path,
  136. // 目标文件
  137. target: this.dirPath + "混音后的音频.mp3"
  138. }, res => {
  139. this.writeLog(JSON.stringify(res))
  140. })
  141. }
  142. })
  143. },
  144. // 更改音频音量
  145. changeVolume() {
  146. module.changeVolume({
  147. //类型,1.固定音量(单位DB),2.音量的倍数
  148. type: 2,
  149. //源文件
  150. src: this.audioPath,
  151. //音量值
  152. // value: 20,
  153. //音量值(不定音量需要传整形,音量的倍数可以是浮点型)
  154. value: 1.5,
  155. // 目标文件
  156. target: this.dirPath + "更改音频音量后的音频.mp3"
  157. }, res => {
  158. this.writeLog(JSON.stringify(res))
  159. })
  160. },
  161. // 抽取音频
  162. extractAudio() {
  163. module.extractAudio({
  164. //源文件
  165. src: this.videoPath,
  166. // 目标文件(只能是aac格式)
  167. target: this.dirPath + "抽取音频后的音频.aac"
  168. }, res => {
  169. this.writeLog(JSON.stringify(res))
  170. })
  171. },
  172. // 音频解码
  173. decodeAudio() {
  174. module.decodeAudio({
  175. //源文件
  176. src: this.audioPath,
  177. // 目标文件(只能是pcm格式)
  178. target: this.dirPath + "解码后的音频.pcm",
  179. //采样率
  180. sampleRate: 44100,
  181. // 声道:1.单声道,2.立体声道
  182. channel: 2
  183. }, res => {
  184. this.writeLog(JSON.stringify(res))
  185. })
  186. },
  187. // 音频编码
  188. encodeAudio() {
  189. module.encodeAudio({
  190. //源文件(只能是pcm格式)
  191. src: this.dirPath + "解码后的音频.pcm",
  192. // 目标文件
  193. target: this.dirPath + "编码后的音频.wav",
  194. //采样率
  195. sampleRate: 44100,
  196. // 声道:1.单声道,2.立体声道
  197. channel: 2
  198. }, res => {
  199. this.writeLog(JSON.stringify(res))
  200. })
  201. },
  202. // 音频淡入
  203. audioFadeIn() {
  204. module.audioFadeIn({
  205. //源文件
  206. src: this.audioPath,
  207. // 目标文件
  208. target: this.dirPath + "音频淡入后的音频.mp3",
  209. //淡入时长,单位:秒
  210. duration: 5
  211. }, res => {
  212. this.writeLog(JSON.stringify(res))
  213. })
  214. },
  215. // 音频淡出
  216. audioFadeOut() {
  217. module.audioFadeOut({
  218. //源文件
  219. src: this.audioPath,
  220. // 目标文件
  221. target: this.dirPath + "音频淡出后的音频.mp3",
  222. //淡出时长,单位:秒
  223. duration: 10
  224. }, res => {
  225. this.writeLog(JSON.stringify(res))
  226. })
  227. },
  228. // 音频转amr
  229. audio2Amr() {
  230. module.audio2Amr({
  231. //源文件
  232. src: this.audioPath,
  233. // 目标文件
  234. target: this.dirPath + "音频转amr后的音频.amr"
  235. }, res => {
  236. this.writeLog(JSON.stringify(res))
  237. })
  238. },
  239. // 获取音频信息
  240. audioInfo() {
  241. module.audioInfo({
  242. //源文件
  243. src: this.audioPath
  244. }, res => {
  245. this.writeLog(JSON.stringify(res))
  246. })
  247. },
  248. // 写日志
  249. writeLog(str) {
  250. console.log(str);
  251. let logStr = uni.$lv.date.format(null, "yyyy-mm-dd hh:MM:ss") + " " + str + "\n";
  252. this.logStr = logStr + this.logStr;
  253. },
  254. // 获取文件的目录
  255. getFileDir() {
  256. }
  257. }
  258. }
  259. </script>
  260. <style>
  261. .audio-file-box {
  262. flex-direction: row;
  263. margin-bottom: 5px;
  264. }
  265. </style>

视频操作

插件引入

  const module = uni.requireNativePlugin("leven-ffmpeg-VideoModule");

页面内容

  1. <template>
  2. <view>
  3. <uni-card title="操作文件">
  4. <view class="audio-file-box">
  5. <uni-easyinput v-model="waterPath" placeholder="水印文件路径"></uni-easyinput>
  6. <button style="margin-left: 10px;" type="primary" @click="selectImageFile">选择水印文件</button>
  7. </view>
  8. <view class="audio-file-box">
  9. <uni-easyinput v-model="videoPath" placeholder="视频文件路径"></uni-easyinput>
  10. <button style="margin-left: 10px;" type="primary" @click="selectVideoFile">选择视频文件</button>
  11. </view>
  12. <view style="margin-bottom: 5px;"><text style="color: #999999; font-size: 14px;">水印请选择.png,视频请选择.mp4文件</text></view>
  13. <view><text style="color: #999999; font-size: 14px;">转换后的文件路径:{{dirPath}}</text></view>
  14. </uni-card>
  15. <uni-card title="视频操作">
  16. <button type="primary" @click="transformVideo">视频转码</button>
  17. <button type="primary" @click="extractVideo">从视频文件抽取视频(无声音)</button>
  18. <button type="primary" @click="mixAudioVideo">音视频合成</button>
  19. <button type="primary" @click="cutVideo">视频剪切</button>
  20. <button type="primary" @click="concatVideo">视频拼接</button>
  21. <button type="primary" @click="screenShot">视频封面</button>
  22. <button type="primary" @click="frame2Image">视频某一帧的图片</button>
  23. <button type="primary" @click="video2Image">视频转图片</button>
  24. <button type="primary" @click="waterMarkImage">添加水印图片</button>
  25. <button type="primary" @click="video2Gif">视频转成Gif</button>
  26. <!-- <button type="primary" @click="screenRecord">屏幕录制</button> -->
  27. <button type="primary" @click="image2Video">图片合成视频</button>
  28. <button type="primary" @click="multiVideo">多画面拼接</button>
  29. <button type="primary" @click="reverseVideo">视频反序倒播</button>
  30. <button type="primary" @click="denoiseVideo">视频降噪</button>
  31. <button type="primary" @click="picInPicVideo">画中画</button>
  32. <button type="primary" @click="videoScaleMultiple">视频倍数缩放</button>
  33. <button type="primary" @click="videoScaleWidthHeight">视频宽高缩放</button>
  34. <button type="primary" @click="videoSpeed">视频倍速播放</button>
  35. <button type="primary" @click="video2Yuv">视频转yuv</button>
  36. <button type="primary" @click="yuv2H264">YUV转H264</button>
  37. <button type="primary" @click="video2HLS">视频切片</button>
  38. <button type="primary" @click="hls2Video">切片合成视频</button>
  39. <button type="primary" @click="videoParams">参数调节(亮度,对比度,饱和度)</button>
  40. <button type="primary" @click="videoRotation">视频旋转</button>
  41. <button type="primary" @click="videoFlip">视频翻转</button>
  42. <button type="primary" @click="videoInfo">获取视频信息</button>
  43. <button type="primary" @click="logStr = ''">清空日志</button>
  44. </uni-card>
  45. <uni-card class="uni-card-box" title="日志">
  46. <view><text style="font-size: 14px; flex-wrap: wrap;">{{logStr}}</text></view>
  47. </uni-card>
  48. </view>
  49. </template>
  50. <script>
  51. const commonModule = uni.requireNativePlugin("leven-ffmpeg-CommonModule");
  52. const module = uni.requireNativePlugin("leven-ffmpeg-VideoModule");
  53. export default {
  54. data() {
  55. return {
  56. // 水印文件
  57. waterPath: "",
  58. // 视频文件
  59. videoPath: "",
  60. //转换后文件所在目录
  61. dirPath: "/storage/emulated/0/leven-ffmpeg/",
  62. // 当前选择的文件名称
  63. audioName: "",
  64. logStr: "",
  65. }
  66. },
  67. methods: {
  68. // 选择水印文件
  69. selectImageFile() {
  70. commonModule.selectImageFile(res => {
  71. this.writeLog(JSON.stringify(res))
  72. if (res.code == 0 && res.data && res.data.files && Array.isArray(res.data.files) && res.data.files.length > 0) {
  73. this.waterPath = res.data.files[0].path;
  74. }
  75. })
  76. },
  77. // 选择视频文件
  78. selectVideoFile() {
  79. commonModule.selectVideoFile(res => {
  80. this.writeLog(JSON.stringify(res))
  81. if (res.code == 0 && res.data && res.data.files && Array.isArray(res.data.files) && res.data.files.length > 0) {
  82. this.videoPath = res.data.files[0].path;
  83. }
  84. })
  85. },
  86. // 视频转码
  87. transformVideo() {
  88. module.transformVideo({
  89. //源文件
  90. src: this.videoPath,
  91. // 目标文件
  92. target: this.dirPath + "转码后的视频.avi"
  93. }, res => {
  94. this.writeLog(JSON.stringify(res))
  95. })
  96. },
  97. // 抽取视频
  98. extractVideo() {
  99. module.extractVideo({
  100. //源文件
  101. src: this.videoPath,
  102. // 目标文件
  103. target: this.dirPath + "抽取后的视频.mp4"
  104. }, res => {
  105. this.writeLog(JSON.stringify(res))
  106. })
  107. },
  108. // 音视频合成
  109. mixAudioVideo() {
  110. module.mixAudioVideo({
  111. //视频源文件
  112. videoSrc: this.dirPath + "抽取后的视频.mp4",
  113. //音频源文件
  114. audioSrc: this.dirPath + "抽取音频后的音频.aac",
  115. // 目标文件
  116. target: this.dirPath + "音视频合成后的视频.mp4"
  117. }, res => {
  118. this.writeLog(JSON.stringify(res))
  119. })
  120. },
  121. // 视频剪切
  122. cutVideo() {
  123. module.cutVideo({
  124. //源文件
  125. src: this.videoPath,
  126. // 目标文件
  127. target: this.dirPath + "剪切后的视频.mp4",
  128. // 剪切开始时间(单位:秒)
  129. startTime: 0,
  130. // 剪切时长(单位:秒)
  131. duration: 5,
  132. }, res => {
  133. this.writeLog(JSON.stringify(res))
  134. })
  135. },
  136. // 视频拼接
  137. concatVideo() {
  138. module.concatVideo({
  139. //源文件
  140. src: this.videoPath,
  141. // 拼接的视频
  142. append: this.videoPath,
  143. // 目标文件
  144. target: this.dirPath + "拼接后的视频.mp4"
  145. }, res => {
  146. this.writeLog(JSON.stringify(res))
  147. })
  148. },
  149. // 视频拼接
  150. screenShot() {
  151. module.screenShot({
  152. //源文件
  153. src: this.videoPath,
  154. // 目标文件
  155. target: this.dirPath + "视频的截图.jpg",
  156. // 截图宽度,可以不传,默认:0(按视频宽度)
  157. width: 0,
  158. // 截图高度,可以不传,默认:0(按视频高度)
  159. height: 0
  160. }, res => {
  161. this.writeLog(JSON.stringify(res))
  162. })
  163. },
  164. // 视频某一帧的图片
  165. frame2Image() {
  166. module.frame2Image({
  167. //源文件
  168. src: this.videoPath,
  169. // 目标文件
  170. target: this.dirPath + "视频某一帧的图片的截图.jpg",
  171. // 某一帧的时间,格式:hh:mm:ss.xxx
  172. time: "00:00:05.123"
  173. }, res => {
  174. this.writeLog(JSON.stringify(res))
  175. })
  176. },
  177. // 视频转图片
  178. video2Image() {
  179. module.video2Image({
  180. //源文件
  181. src: this.videoPath,
  182. // 目标文件夹
  183. target: this.dirPath + "video2Image/",
  184. }, res => {
  185. this.writeLog(JSON.stringify(res))
  186. })
  187. },
  188. // 添加水印图片
  189. waterMarkImage() {
  190. module.waterMarkImage({
  191. //源文件
  192. src: this.videoPath,
  193. //水印文件
  194. water: this.waterPath,
  195. // 目标文件夹
  196. target: this.dirPath + "添加水印后的视频.mp4",
  197. // 水印位置,1.左上角(默认),2.右上角,3.右下角,4.左下角
  198. position: 2
  199. }, res => {
  200. this.writeLog(JSON.stringify(res))
  201. })
  202. },
  203. // 视频转gif
  204. video2Gif() {
  205. module.video2Gif({
  206. //源文件
  207. src: this.videoPath,
  208. // 目标文件
  209. target: this.dirPath + "视频转gif后的图片.gif",
  210. //开始时间,单位:秒
  211. startTime: 0,
  212. // 时长,单位:秒
  213. duration: 5
  214. }, res => {
  215. this.writeLog(JSON.stringify(res))
  216. })
  217. },
  218. // 图片转视频
  219. image2Video() {
  220. module.image2Video({
  221. //源文件(图片列表的文件夹)
  222. src: this.dirPath + "video2Image/",
  223. // 目标文件
  224. target: this.dirPath + "图片转视频后的视频.mp4",
  225. }, res => {
  226. this.writeLog(JSON.stringify(res))
  227. })
  228. },
  229. // 多画面拼接
  230. multiVideo() {
  231. module.multiVideo({
  232. //源文件
  233. src: this.videoPath,
  234. //要拼接的文件
  235. append: this.videoPath,
  236. // 目标文件
  237. target: this.dirPath + "多画面拼接后的视频.mp4",
  238. // 布局方向,1.横向拼接,2.垂直拼接
  239. direction: 1
  240. }, res => {
  241. this.writeLog(JSON.stringify(res))
  242. })
  243. },
  244. // 视频反序倒播
  245. reverseVideo() {
  246. module.reverseVideo({
  247. //源文件
  248. src: this.videoPath,
  249. // 目标文件
  250. target: this.dirPath + "视频反序倒播后的视频.mp4"
  251. }, res => {
  252. this.writeLog(JSON.stringify(res))
  253. })
  254. },
  255. // 视频降噪
  256. denoiseVideo() {
  257. module.denoiseVideo({
  258. //源文件
  259. src: this.videoPath,
  260. // 目标文件
  261. target: this.dirPath + "视频降噪后的视频.mp4"
  262. }, res => {
  263. this.writeLog(JSON.stringify(res))
  264. })
  265. },
  266. // 画中画
  267. picInPicVideo() {
  268. module.picInPicVideo({
  269. //源文件
  270. src: this.videoPath,
  271. //画中画文件
  272. append: this.videoPath,
  273. // 画中画宽度
  274. width: 300,
  275. // 画中画高度
  276. height: 200,
  277. // 画中画位置,1.左上角(默认),2.右上角,3.右下角,4.左下角
  278. position: 2,
  279. // 目标文件
  280. target: this.dirPath + "画中画后的视频.mp4"
  281. }, res => {
  282. this.writeLog(JSON.stringify(res))
  283. })
  284. },
  285. // 视频倍数缩放
  286. videoScaleMultiple() {
  287. module.videoScaleMultiple({
  288. //源文件
  289. src: this.videoPath,
  290. // 类型,1.缩小,2.放大
  291. type: 1,
  292. // 缩放的倍数
  293. value: 2,
  294. // 目标文件
  295. target: this.dirPath + "视频倍数缩放后的视频.mp4"
  296. }, res => {
  297. this.writeLog(JSON.stringify(res))
  298. })
  299. },
  300. // 视频宽高缩放
  301. videoScaleWidthHeight() {
  302. module.videoScaleWidthHeight({
  303. //源文件
  304. src: this.videoPath,
  305. // 宽度,-1.高度等比例缩放
  306. width: 200,
  307. // 高度,-1.宽度等比例缩放
  308. height: 300,
  309. // 目标文件
  310. target: this.dirPath + "视频宽高缩放后的视频.mp4"
  311. }, res => {
  312. this.writeLog(JSON.stringify(res))
  313. })
  314. },
  315. // 视频倍数播放
  316. videoSpeed() {
  317. module.videoSpeed({
  318. //源文件
  319. src: this.videoPath,
  320. // 播放速度,取值范围:[0.25,4] 小于1快速播放,大于1慢速播放
  321. speed: 2,
  322. // 目标文件
  323. target: this.dirPath + "视频倍数播放后的视频.mp4"
  324. }, res => {
  325. this.writeLog(JSON.stringify(res))
  326. })
  327. },
  328. // 视频转YUV
  329. video2Yuv() {
  330. module.video2Yuv({
  331. //源文件
  332. src: this.videoPath,
  333. // 目标文件
  334. target: this.dirPath + "视频转YUV后的文件.yuv"
  335. }, res => {
  336. this.writeLog(JSON.stringify(res))
  337. })
  338. },
  339. // YUV转H264
  340. yuv2H264() {
  341. module.yuv2H264({
  342. //源文件
  343. src: this.dirPath + "视频转YUV后的文件.yuv",
  344. // 转换后的宽度,默认:720
  345. width: 720,
  346. // 转换后的高度,默认:1280
  347. height: 1280,
  348. // 目标文件
  349. target: this.dirPath + "YUV转H264后的文件.h264"
  350. }, res => {
  351. this.writeLog(JSON.stringify(res))
  352. })
  353. },
  354. // 视频切片
  355. video2HLS() {
  356. module.video2HLS({
  357. //源文件
  358. src: this.videoPath,
  359. // 切片时长
  360. splitTime: 5,
  361. // 目标文件
  362. target: this.dirPath + "hls/切片文件.m3u8"
  363. }, res => {
  364. this.writeLog(JSON.stringify(res))
  365. })
  366. },
  367. // 切片合成视频
  368. hls2Video() {
  369. module.hls2Video({
  370. //切片文件
  371. src: this.dirPath + "hls/切片文件.m3u8",
  372. // 目标文件
  373. target: this.dirPath + "切片合成的视频后的视频.mp4"
  374. }, res => {
  375. this.writeLog(JSON.stringify(res))
  376. })
  377. },
  378. // 视频参数调节
  379. videoParams() {
  380. module.videoParams({
  381. //源文件
  382. src: this.videoPath,
  383. // 亮度,有效值[-1.0,1.0],默认:0
  384. bright: 0.1,
  385. //对比度,有效值[-2.0,2.0],默认:0
  386. contrast: 0.9,
  387. // 饱和度,有效值[0,3.0],默认:1
  388. saturation: 3,
  389. // 目标文件
  390. target: this.dirPath + "视频参数调节后的视频.mp4"
  391. }, res => {
  392. this.writeLog(JSON.stringify(res))
  393. })
  394. },
  395. // 视频旋转
  396. videoRotation() {
  397. module.videoRotation({
  398. //源文件
  399. src: this.videoPath,
  400. // 旋转类型,1.顺时针旋转画面90度,2.逆时针旋转画面90度,3.顺时针旋转画面90度再水平翻转, 0.逆时针旋转画面90度水平翻转
  401. transpose: 1,
  402. // 目标文件
  403. target: this.dirPath + "视频旋转后的视频.mp4"
  404. }, res => {
  405. this.writeLog(JSON.stringify(res))
  406. })
  407. },
  408. // 视频翻转
  409. videoFlip() {
  410. module.videoFlip({
  411. //源文件
  412. src: this.videoPath,
  413. // 翻转类型,1.水平翻转,2.垂直翻转
  414. type: 1,
  415. // 目标文件
  416. target: this.dirPath + "视频翻转后的视频.mp4"
  417. }, res => {
  418. this.writeLog(JSON.stringify(res))
  419. })
  420. },
  421. // 获取视频信息
  422. videoInfo() {
  423. module.videoInfo({
  424. //源文件
  425. src: this.videoPath
  426. }, res => {
  427. this.writeLog(JSON.stringify(res))
  428. })
  429. },
  430. // 写日志
  431. writeLog(str) {
  432. console.log(str);
  433. let logStr = uni.$lv.date.format(null, "yyyy-mm-dd hh:MM:ss") + " " + str + "\n";
  434. this.logStr = logStr + this.logStr;
  435. },
  436. // 获取文件的目录
  437. getFileDir() {
  438. }
  439. }
  440. }
  441. </script>
  442. <style>
  443. .audio-file-box {
  444. flex-direction: row;
  445. margin-bottom: 5px;
  446. }
  447. </style>

插件方法

公共方法

  1. 申请文件权限
  2. 自定义指令
  3. 取消执行命令

音频操作 

  1. 音频转码
  2. 音频剪切
  3. 音频拼接
  4. 混音
  5. 更改音频音量
  6. 从视频文件抽取音频
  7. 音频解码PCM
  8. 音频编码
  9. 音频淡入
  10. 音频淡出
  11. 音频转amr
  12. 获取音频信息

视频操作

  1.  视频转码
  2. 从视频文件抽取视频(无声音)
  3. 音视频合成
  4. 视频剪切
  5. 视频拼接
  6. 视频封面
  7. 视频某一帧的图片
  8. 视频转图片
  9. 添加水印图片
  10. 视频转成Gif
  11. 图片合成视频
  12. 多画面拼接
  13. 视频反序倒播
  14. 视频降噪
  15. 画中画
  16. 视频倍数缩放
  17. 视频宽高缩放
  18. 视频倍速播放
  19. 视频转yuv
  20. YUV转H264
  21. 视频切片
  22. 切片合成视频
  23. 参数调节
  24. 视频旋转
  25. 视频翻转
  26. 获取视频信息
  27. 视频压缩
  28. 注册推流服务
  29. 开始推流
  30. 关闭推流

具体方法的使用请参考使用说明文档 

联系作者

 购买插件前请先试用,试用通过再购买。在试用中如果遇到任何问题,可与作者联系,QQ:334106817,将全力协助你使用本插件。

图片预览

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/683449
推荐阅读
相关标签
  

闽ICP备14008679号