在uniapp中nvue页面中将上传的视频通过前端获取第一帧,并将第一帧图片作为封面保存到后端<video style="height: 350rpx;width: 750rpx;" :src="urls"/><view @click="upload(item)"> upload(item) { uni.chooseVideo({count: 1,sourceType: ['camera', 'album'],success: (e) => {filePath: e.tempFilePath解决案例
时间: 2024-04-05 22:34:42 浏览: 73
以下是完整的代码实现:
```javascript
<template>
<view>
<video style="height: 350rpx;width: 750rpx;" :src="videoUrl"/>
<button @tap="upload">上传视频</button>
</view>
</template>
<script>
export default {
data() {
return {
videoUrl: ''
}
},
methods: {
upload() {
uni.chooseVideo({
count: 1,
sourceType: ['camera', 'album'],
success: (res) => {
const tempFilePath = res.tempFilePath;
uni.getVideoInfo({
src: tempFilePath,
success: (infoRes) => {
const duration = infoRes.duration;
const thumbnailWidth = 720;
const thumbnailHeight = 1280;
const thumbnailCount = 1;
const thumbnails = [];
const interval = duration / (thumbnailCount + 1);
for (let i = 1; i <= thumbnailCount; i++) {
const thumbnailTime = i * interval;
const thumbnailName = `thumbnail-${Date.now()}.jpg`;
const thumbnailPath = `${tempFilePath}_${thumbnailName}`;
const thumbnailUrl = `http://localhost:3000/${thumbnailName}`;
const command = `ffmpeg -i ${tempFilePath} -ss ${thumbnailTime} -vframes 1 -s ${thumbnailWidth}*${thumbnailHeight} ${thumbnailPath}`;
uni.request({
url: 'http://localhost:3000/execute',
method: 'POST',
data: {
command: command
},
success: (res) => {
thumbnails.push(thumbnailUrl);
if (thumbnails.length === thumbnailCount) {
const thumbnailUrl = thumbnails[0];
const videoUrl = `http://localhost:3000/${Date.now()}.mp4`;
uni.request({
url: 'http://localhost:3000/upload',
method: 'POST',
data: {
videoUrl: videoUrl,
thumbnailUrl: thumbnailUrl
},
success: (res) => {
this.videoUrl = videoUrl;
}
})
}
}
})
}
}
})
}
})
}
}
}
</script>
```
在上述代码中,我们通过 `uni.chooseVideo` 方法选择了一个视频,并获取了视频的路径 `tempFilePath`。然后,我们通过 `uni.getVideoInfo` 方法获取了视频的时长 `duration`,并计算出了每个缩略图的时间间隔 `interval`。
接下来,我们通过循环生成了每个缩略图的命令,并通过 `uni.request` 方法执行了命令。在执行命令的同时,我们将缩略图的访问路径 `thumbnailUrl` 存储到了 `thumbnails` 数组中。
当所有缩略图都生成完成后,我们选择其中一个作为视频封面,并将视频和封面的访问路径发送到后端。在后端,我们可以保存视频和封面,然后将视频的访问路径返回给前端,最后更新页面中的视频地址。
需要注意的是,这里的后端接口 `http://localhost:3000/upload` 和 `http://localhost:3000/execute` 都是需要自己实现的。
阅读全文