ai-clone/frontend-ai/unpackage/dist/build/mp-weixin/pages/video-gen/video-gen.js

2 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";const e=require("../../common/vendor.js"),s=require("../../config/api.js"),t={data:()=>({imageUrl:"",imageFile:null,prompt:"",promptPlaceholder:"描述你想要的视频效果,支持中文,例如:一个人在微笑着说话,背景是温馨的客厅",duration:10,durations:[2,3,4,5,6,8,10,12],videoName:"",generating:!1,progress:0,progressText:"准备中...",generatedVideo:"",message:{text:"",type:"info"}}),methods:{chooseImage(){e.index.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:s=>{const t=s.tempFilePaths[0],r=s.tempFiles&&s.tempFiles[0]?s.tempFiles[0]:null,o=e=>{this.imageUrl=e,this.imageFile=r,this.showMessage("照片已选择","success")};e.index.getFileInfo({filePath:t,success:s=>{const r=2097152;if(s.size&&s.size>r){this.showMessage("图片超过2MB正在自动压缩...","info");const s=[60,40,20],i=(t,a)=>{t>=s.length?this.showMessage("图片压缩后仍超过2MB请换一张更小的图片建议拍照/截图后再上传)","error"):e.index.compressImage({src:a,quality:s[t],success:s=>{e.index.getFileInfo({filePath:s.tempFilePath,success:e=>{e.size&&e.size<=r?o(s.tempFilePath):i(t+1,s.tempFilePath)},fail:e=>{console.error("获取压缩后文件信息失败:",e),i(t+1,s.tempFilePath)}})},fail:e=>{console.error("压缩图片失败:",e),this.showMessage("图片过大且压缩失败,请换一张更小的图片","error")}})};i(0,t)}else o(t)},fail:e=>{console.error("获取文件信息失败:",e),o(t)}})},fail:e=>{console.error("选择图片失败:",e),this.showMessage("选择图片失败","error")}})},async generateVideo(){if(this.imageUrl){this.generating=!0,this.progress=0,this.progressText="正在上传照片...";try{this.progress=10,this.progressText="照片上传中...";const e=await s.uploadFile({url:"/api/photo-revival/volcengine-video",filePath:this.imageUrl,name:"photo",formData:{text:"",prompt:this.prompt||"",duration:this.duration,name:this.videoName||"火山引擎视频"}});this.progress=30,this.progressText="视频生成中,请稍候...";const t=setInterval((()=>{this.progress<90&&(this.progress+=2)}),2e3);setTimeout((()=>{if(clearInterval(t),this.progress=100,this.progressText="视频生成完成!","success"!==e.status)throw new Error(e.message||"视频生成失败");this.generatedVideo=s.API_BASE+e.videoUrl,this.showMessage("视频生成成功!","success"),this.generating=!1}),3e3)}catch(e){console.error("生成视频失败:",e),this.showMessage("生成失败: "+(e.message||"未知错误"),"error"),this.generating=!1,this.progress=0}}else this.showMessage("请先上传照片","error")},saveToAlbum(){this.generatedVideo?e.index.downloadFile({url:this.generatedVideo,success:s=>{200===s.statusCode&&e.index.saveVideoToPhotosAlbum({filePath:s.tempFilePath,success:()=>{this.showMessage("已保存到相册","success")},fail:e=>{console.error("保存失败:",e),this.showMessage("保存失败,请检查相册权限","error")}})},fail:e=>{console.error("下载失败:",e),this.showMessage("下载失败","error")}}):this.showMessage("没有可保存的视频","error")},reset(){this.imageUrl="",this.imageFile=null,this.prompt="",this.duration=10,this.videoName="",this.generatedVideo="",this.progress=0,this.progressText="准备中...",this.message.text=""},showMessage(e,s="info"){this.message={text:e,type:s},setTimeout((()=>{this.message.text=""}),3e3)}}};const r=e._export_sfc(t,[["render",function(s,t,r,o,i,a){return e.e({a:i.message.text},i.message.text?{b:e.t(i.message.text),c:e.n(i.message.type)}:{},{d:i.imageUrl},i.imageUrl?{e:i.imageUrl}:{},{f:e.o(((...e)=>a.chooseImage&&a.chooseImage(...e))),g:i.promptPlaceholder,h:i.prompt,i:e.o((e=>i.prompt=e.detail.value)),j:e.t(i.prompt.length),k:e.f(i.durations,((s,t,r)=>({a:e.t(s),b:s,c:e.n(i.duration===s?"active":""),d:e.o((e=>i.duration=s),s)}))),l:i.videoName,m:e.o((e=>i.videoName=e.detail.value)),n:i.generating},(i.generating,{}),{o:!i.imageUrl||i.generating,p:e.o(((...e)=>a.generateVideo&&a.generateVideo(...e))),q:i.generating},i.generating?{r:e.t(i.progressText),s:i.progress+"%"}:{},{t:i.generatedVideo},i.generatedVideo?{v:i.generatedVideo,w:e.o(((...e)=>a.saveToAlbum&&a.saveToAlbum(...e))),x:e.o(((...e)=>a.reset&&a.reset(...e)))}:{})}],["__scopeId","data-v-2ed74c00"]]);wx.createPage(r);