File size: 5,110 Bytes
255df7f f8e3a12 8e3c369 96f419b b8e8579 96f419b 8e3c369 e738b55 1125603 8e3c369 5a93262 ca42371 255df7f 87f10b8 36d77a8 f6c296e 5b103a6 255df7f b8e8579 ca42371 8a31738 cd69a04 ca42371 cd69a04 ca42371 cd69a04 ca42371 8a31738 cd69a04 ca42371 cd69a04 ca42371 cd69a04 ca42371 cd69a04 ca42371 4a29a3f ca42371 8e3c369 ea26699 b8e8579 ea26699 3f6bd82 3bde6e5 db8baa3 b0d8952 51b2060 8e3c369 ca42371 51b2060 ca42371 51b2060 38d890f 51b2060 11943dd b0d8952 51b2060 ca42371 51b2060 3bde6e5 89193d4 3bde6e5 3f6bd82 ca42371 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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
from flask import Flask, request, jsonify, send_file
from moviepy.editor import ColorClip,ImageClip, concatenate_videoclips,VideoFileClip
import traceback
import uuid
from concurrent.futures import ThreadPoolExecutor, as_completed
import glob
import os
import requests
import asyncio
from image_fetcher import main
from video import create_text_image
from video2 import video_func
import re
app = Flask(__name__)
SAVE_DIR = "/app/data/video/"
os.makedirs(SAVE_DIR, exist_ok=True)
CLIPS_DIR= "/app/data/video/"
os.makedirs(SAVE_DIR, exist_ok=True)
def extract_english_paragraphs(text):
"""
Extract paragraphs that contain only English text
"""
paragraphs = text.split('\n\n')
english_paragraphs = [paragraphs[0]]
#for para in paragraphs:
# Check if the paragraph contains only English characters
#if not re.search(r'[^\x00-\x7F]', para):
#english_paragraphs.append(para.strip())
return '\n\n'.join(english_paragraphs)
def extract_native_text(text):
paragraphs = text.split('\n\n')
nativelang_paragraphs = paragraphs[1]
#pattern = r'[^\x00-\x7F]'
# Search for the first non-English character
#match = re.search(pattern, text)
#if match:
# Return everything from the first non-English character
#return text[match.start():]
#else:
# If no non-English characters found, return empty string
return nativelang_paragraphs
@app.route("/")
def home():
return "Flask Video Generator is Running"
@app.route("/generate", methods=["POST"])
def generate_video():
try:
data = request.get_json()
userprompt = data.get("duration", '').strip()
prompt=extract_english_paragraphs(userprompt)
lang=extract_native_text(userprompt)
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
if len(lines)==1:
try:
os.remove("/app/data/video/clip0.mp4")
os.remove("/app/data/sound/audio0.mp3")
except Exception as e:
print(e)
#image_folder="/tmp/images"
#image_olst=[]
#create_text_image(lines[0],0,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_link = "/app/data/video/clip0.mp4"
video_func(0,lines,lang)
#for img in image_files:
#os.remove(img)
return send_file(video_link, mimetype='video/mp4')
else:
print("learn deeper")
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) |