当用户单击html页面上的按钮时,我正在使用moviepy创建新电影。我想将新电影退还给用户。 但是电影创作需要时间。仅在创建文件后才能对send_file做什么?
@app.route('/createVideo', methods=['POST'])
def createVideo():
content = request.get_json()
videoPromo = content['videoPromo']
videoPerso = content['videoPerso']
subclip1 = VideoFileClip(videoPromo)
subclip2 = VideoFileClip(content['videoPerso'])
subclip = concatenate_videoclips([subclip1, subclip2], method="compose")
subclip.write_videofile("out.mp4",progress_bar = False)
vid_path = os.path.join(MEDIA_PATH, 'out.mp4')
return send_file(vid_path)
我的HTML代码:
<video id="videoPromo" controls class="video-js vjs-default-skin vjs-big-play-centered">
<source src="http://localhost:5000/var/myvideo.mp4" type="video/mp4">
</video>
<video id="videoPerso" controls class="video-js vjs-default-skin vjs-big-play-centered">
<source src="http://localhost:5000/var/oceans.mp4#t=0.7" type="video/mp4">
</video>
<div class="btn-group" role="group" aria-label="...">
<button class="create-video btn btn-default" type="button">Create Video</button>
</div>
<script>
$(".create-video").click(function(){
$.ajax({
type: "POST",
url: "/createVideo",
data: JSON.stringify({ videoPerso: $("#videoPerso source").attr("src") , videoPromo: $("#videoPromo source").attr("src")}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){ console.log(data);
},
failure: function(errMsg) {
alert(errMsg);
}
});
});
</script>
答案 0 :(得分:0)
如果您的任务花费了一段时间,并且您不想让用户等待(并阻止python解释器!),则可以返回一个临时结果,说“处理中……”,然后执行使用某种任务队列(例如celery)的后台任务。
在您的页面上,您可以定期轮询某个终结点,以查看后台任务是否已完成视频的创建,并在获得该URL后取回该URL。取回网址后,您可以向用户显示视频。