Update app.py
Browse files
app.py
CHANGED
|
@@ -10,6 +10,7 @@ import nltk
|
|
| 10 |
import textwrap
|
| 11 |
import os
|
| 12 |
import glob
|
|
|
|
| 13 |
|
| 14 |
# Ensure 'punkt' is downloaded for nltk
|
| 15 |
try:
|
|
@@ -17,22 +18,26 @@ try:
|
|
| 17 |
except LookupError:
|
| 18 |
nltk.download('punkt')
|
| 19 |
|
| 20 |
-
#
|
| 21 |
-
|
| 22 |
-
from imageio_ffmpeg import get_ffmpeg_exe
|
| 23 |
-
get_ffmpeg_exe()
|
| 24 |
-
except Exception as e:
|
| 25 |
-
print(f"Error downloading ffmpeg: {e}")
|
| 26 |
-
print("Attempting to download ffmpeg using a different method...")
|
| 27 |
try:
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
print("
|
| 31 |
-
except
|
| 32 |
-
print(
|
| 33 |
-
|
| 34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
|
|
|
|
|
|
|
| 36 |
|
| 37 |
description = " Video Story Generator with Audio \n PS: Generation of video by using Artificial Intelligence by dalle-mini and distilbart and gtss "
|
| 38 |
title = "Video Story Generator with Audio by using dalle-mini and distilbart and gtss "
|
|
@@ -59,9 +64,9 @@ def get_output_video(text):
|
|
| 59 |
The required models will be downloaded to models_root if they are not already there.
|
| 60 |
Set the dtype to torch.float16 to save GPU memory.
|
| 61 |
If you have an Ampere architecture GPU you can use torch.bfloat16.
|
| 62 |
-
|
| 63 |
float32 is faster than float16 but uses more GPU memory.
|
| 64 |
-
|
| 65 |
|
| 66 |
def generate_image(
|
| 67 |
is_mega: bool,
|
|
@@ -123,7 +128,7 @@ def get_output_video(text):
|
|
| 123 |
y_text = text_start_height
|
| 124 |
lines = textwrap.wrap(text, width=40)
|
| 125 |
for line in lines:
|
| 126 |
-
line_width, line_height = font.
|
| 127 |
draw.text(((image_width - line_width) / 2, y_text),
|
| 128 |
line, font=font, fill=text_color)
|
| 129 |
y_text += line_height
|
|
@@ -133,7 +138,7 @@ def get_output_video(text):
|
|
| 133 |
Testing draw_multiple_line_text
|
| 134 |
'''
|
| 135 |
image = image_input
|
| 136 |
-
fontsize =
|
| 137 |
path_font = "/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf"
|
| 138 |
if not os.path.exists(path_font):
|
| 139 |
# Try alternative location on different systems
|
|
@@ -239,6 +244,16 @@ def get_output_video(text):
|
|
| 239 |
final_clip.write_videofile(outname, fps=fps)
|
| 240 |
|
| 241 |
combine_audio(movie_name, export_path, movie_final) # create a new file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 242 |
return 'result_final.mp4'
|
| 243 |
|
| 244 |
|
|
|
|
| 10 |
import textwrap
|
| 11 |
import os
|
| 12 |
import glob
|
| 13 |
+
import subprocess
|
| 14 |
|
| 15 |
# Ensure 'punkt' is downloaded for nltk
|
| 16 |
try:
|
|
|
|
| 18 |
except LookupError:
|
| 19 |
nltk.download('punkt')
|
| 20 |
|
| 21 |
+
# Function to check and install FFmpeg if not found
|
| 22 |
+
def ensure_ffmpeg_installed():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
try:
|
| 24 |
+
# Check if FFmpeg is installed by running ffmpeg -version
|
| 25 |
+
subprocess.run(['ffmpeg', '-version'], check=True, capture_output=True, text=True)
|
| 26 |
+
print("FFmpeg is already installed.")
|
| 27 |
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
| 28 |
+
print("FFmpeg not found. Attempting to install...")
|
| 29 |
+
try:
|
| 30 |
+
# Install FFmpeg using the system package manager (apt for Debian/Ubuntu)
|
| 31 |
+
subprocess.run(['apt', 'update'], check=True)
|
| 32 |
+
subprocess.run(['apt', 'install', '-y', 'ffmpeg'], check=True)
|
| 33 |
+
print("FFmpeg installed successfully using apt.")
|
| 34 |
+
except subprocess.CalledProcessError as e:
|
| 35 |
+
print(f"Failed to install FFmpeg using apt: {e}")
|
| 36 |
+
print("Please install FFmpeg manually and ensure it is in your system's PATH.")
|
| 37 |
+
raise
|
| 38 |
|
| 39 |
+
# Ensure FFmpeg is installed before proceeding
|
| 40 |
+
ensure_ffmpeg_installed()
|
| 41 |
|
| 42 |
description = " Video Story Generator with Audio \n PS: Generation of video by using Artificial Intelligence by dalle-mini and distilbart and gtss "
|
| 43 |
title = "Video Story Generator with Audio by using dalle-mini and distilbart and gtss "
|
|
|
|
| 64 |
The required models will be downloaded to models_root if they are not already there.
|
| 65 |
Set the dtype to torch.float16 to save GPU memory.
|
| 66 |
If you have an Ampere architecture GPU you can use torch.bfloat16.
|
| 67 |
+
Set the device to either "cuda" or "cpu". Once everything has finished initializing,
|
| 68 |
float32 is faster than float16 but uses more GPU memory.
|
| 69 |
+
'''
|
| 70 |
|
| 71 |
def generate_image(
|
| 72 |
is_mega: bool,
|
|
|
|
| 128 |
y_text = text_start_height
|
| 129 |
lines = textwrap.wrap(text, width=40)
|
| 130 |
for line in lines:
|
| 131 |
+
line_width, line_height = font.getbbox(line)[2:4] # Use getbbox for better size calculation
|
| 132 |
draw.text(((image_width - line_width) / 2, y_text),
|
| 133 |
line, font=font, fill=text_color)
|
| 134 |
y_text += line_height
|
|
|
|
| 138 |
Testing draw_multiple_line_text
|
| 139 |
'''
|
| 140 |
image = image_input
|
| 141 |
+
fontsize = 20 # Increased font size
|
| 142 |
path_font = "/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf"
|
| 143 |
if not os.path.exists(path_font):
|
| 144 |
# Try alternative location on different systems
|
|
|
|
| 244 |
final_clip.write_videofile(outname, fps=fps)
|
| 245 |
|
| 246 |
combine_audio(movie_name, export_path, movie_final) # create a new file
|
| 247 |
+
|
| 248 |
+
# Cleanup intermediate files
|
| 249 |
+
for f in file_names:
|
| 250 |
+
os.remove(f)
|
| 251 |
+
for f in mp3_names:
|
| 252 |
+
os.remove(f)
|
| 253 |
+
os.remove("result_new.mp4")
|
| 254 |
+
os.remove("result.mp3")
|
| 255 |
+
|
| 256 |
+
|
| 257 |
return 'result_final.mp4'
|
| 258 |
|
| 259 |
|