File size: 3,930 Bytes
255df7f f8e3a12 8e3c369 96f419b 8e3c369 1125603 8e3c369 4032e5f 255df7f 87f10b8 255df7f 8e3c369 ea26699 3f6bd82 3bde6e5 9b19eb5 1125603 8e3c369 1125603 36e3155 1125603 ebd1c2f 1125603 ebd1c2f 1125603 ebd1c2f e9902d8 1125603 e9902d8 1125603 e9902d8 ebd1c2f 1125603 e9902d8 1125603 8c36521 1125603 8c36521 1125603 ebd1c2f 1125603 e9902d8 1125603 e9902d8 1125603 e9902d8 1125603 e9902d8 1125603 e9902d8 1125603 e5ecc3a 1125603 8e3c369 1125603 82f17cb 24d493c 5553637 82f17cb b020f69 82f17cb 1125603 6ec513d 1125603 89193d4 3bde6e5 89193d4 3bde6e5 3f6bd82 87f10b8 1125603 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
from flask import Flask, request, jsonify, send_file
from moviepy.editor import ColorClip,ImageClip, concatenate_videoclips,VideoFileClip
import traceback
import uuid
import glob
import os
import asyncio
from image_fetcher import main
from video import create_text_image
from video2 import video_func
app = Flask(__name__)
@app.route("/")
def home():
return "Flask Video Generator is Running"
@app.route("/generate", methods=["POST"])
def generate_video():
try:
data = request.get_json()
prompt = data.get("duration", '').strip()
prompts=prompt.replace("**","")
print(prompts)
if prompts == '':
return jsonify({"error": "prompts be must"}), 400
image_folder = "/tmp/images"
#line=prompts.splitlines()
#asyncio.run(main(line))
raw_lines = prompts.splitlines(keepends=False)
lines = []
i = 0
while i < len(raw_lines):
line = raw_lines[i].strip()
# Check if current line is a heading
if line.strip().startswith("#") and (line.endswith('?') or line.endswith(':')):
block = line # Start block with heading
i += 1
# Accumulate body lines until next heading or 5+ lines
paragraph_lines = []
while i < len(raw_lines):
next_line = raw_lines[i].strip()
# Stop if next line is a heading
if next_line.strip().startswith("#") and (next_line.endswith('?') or next_line.endswith(':')):
break
paragraph_lines.append(next_line)
i += 1
# If we've gathered enough lines for a slide, break to next
if len(paragraph_lines) >= 5:
break
# Combine heading + paragraph
if paragraph_lines:
block += '\n' + '\n'.join(paragraph_lines)
lines.append(block)
else:
# Group normal lines (not part of any heading)
block_lines = []
count = 0
while i < len(raw_lines) and count < 5:
next_line = raw_lines[i].strip()
# If this is a heading, break to handle it separately
if next_line.strip().startswith("#") and (next_line.endswith('?') or next_line.endswith(':')):
break
block_lines.append(next_line)
i += 1
count += 1
if block_lines:
lines.append('\n'.join(block_lines))
# Print or use lines as slides
image_olst=[]
for id in range(len(lines)):
create_text_image(lines[id],id,image_olst)
image_files = sorted(glob.glob(os.path.join(image_folder, "*.png")))
if not image_files:
raise ValueError("No images found in folder!")
video_path = f"/tmp/video_{uuid.uuid4().hex}.mp4"
for id in range(len(lines)):
video_func(id,lines)
print(id,lines[id])
clips = []
for id in range(len(lines)):
clip = VideoFileClip(f"/app/data/video/clip{id}.mp4")
clips.append(clip)
final_video = concatenate_videoclips(clips,method="compose")
final_video.write_videofile(video_path, fps=24)
for img in image_files:
os.remove(img)
return send_file(video_path, mimetype='video/mp4')
except Exception as e:
traceback.print_exc()
return jsonify({"error": str(e)}), 500
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)
# Example call (remove or change in your actual app) |