uniapp裁剪視頻使用ffmpeg

<template>
  <view>
    <button @click="cutVideo">Cut Video</button>
  </view>
</template>

<script>
import ffmpeg from 'ffmpeg.js'

export default {
  methods: {
    async cutVideo() {
      try {
        // 首先,獲取視頻文件
        const file = await uni.chooseVideo({
          sourceType: ['album', 'camera']
        })
        console.log(file)

        // 然後,使用 ffmpeg 庫來截取視頻的前三秒和後三秒
        const video1 = await ffmpeg({
          MEMFS: [{ name: file.tempFilePath, data: file.tempFilePath }],
          arguments: ['-i', file.tempFilePath, '-ss', '0', '-t', '3', '-c', 'copy', 'output1.mp4']
        })
        const video2 = await ffmpeg({
          MEMFS: [{ name: file.tempFilePath, data: file.tempFilePath }],
          arguments: ['-i', file.tempFilePath, '-ss', '-3', '-t', '3', '-c', 'copy', 'output2.mp4']
        })
        console.log(video1, video2)

        // 最後,使用 ffmpeg 庫將兩個視頻合併起來
        const output = await ffmpeg({
          MEMFS: [
            { name: 'output1.mp4', data: video1 },
            { name: 'output2.mp4', data: video2 }
          ],
          arguments: ['-i', 'output1.mp4', '-i', 'output2.mp4', '-filter_complex', '[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]', '-map', '[outv]', '-map', '[outa]', 'output.mp4']
        })
        console.log(output)

        // 將合併後的視頻保存到本地
        uni.saveFile({
          tempFilePath: output,
          success: function (res) {
            const savedFilePath = res.savedFilePath
            console.log(savedFilePath)
          }
        })
      } catch (e) {
        console.error(e)
      }
    }
  }
}
</script>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章