updated app.py
This commit is contained in:
Binary file not shown.
Binary file not shown.
153
app.py
153
app.py
@@ -24,7 +24,7 @@ app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(app.instance
|
|||||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||||
|
|
||||||
# Set maximum content length to 1GB
|
# Set maximum content length to 1GB
|
||||||
app.config['MAX_CONTENT_LENGTH'] = 2048 * 2048 * 2048 # 1GB, adjust as needed
|
app.config['MAX_CONTENT_LENGTH'] = 2048 * 2048 * 2048 # 2GB, adjust as needed
|
||||||
|
|
||||||
# Ensure the instance folder exists
|
# Ensure the instance folder exists
|
||||||
os.makedirs(app.instance_path, exist_ok=True)
|
os.makedirs(app.instance_path, exist_ok=True)
|
||||||
@@ -122,6 +122,83 @@ def convert_pdf_to_images(input_file, output_folder):
|
|||||||
image_filename = f"{base_name}_{i + 1}.jpg"
|
image_filename = f"{base_name}_{i + 1}.jpg"
|
||||||
image_path = os.path.join(output_folder, image_filename)
|
image_path = os.path.join(output_folder, image_filename)
|
||||||
image.save(image_path, 'JPEG')
|
image.save(image_path, 'JPEG')
|
||||||
|
|
||||||
|
# Delete the original PDF file after conversion
|
||||||
|
if os.path.exists(input_file):
|
||||||
|
os.remove(input_file)
|
||||||
|
print(f"Original PDF file deleted: {input_file}")
|
||||||
|
|
||||||
|
def convert_video(input_file, output_folder):
|
||||||
|
""" Converts a video file to MP4 format with H.264 codec, 720p resolution, and 30 FPS.
|
||||||
|
Args:
|
||||||
|
input_file (str): Path to the input video file.
|
||||||
|
output_folder (str): Path to the folder where the converted video will be saved.
|
||||||
|
Returns:
|
||||||
|
str: Path to the converted video file, or None if conversion fails.
|
||||||
|
"""
|
||||||
|
if not os.path.exists(output_folder):
|
||||||
|
os.makedirs(output_folder)
|
||||||
|
|
||||||
|
# Generate the output file path
|
||||||
|
base_name = os.path.splitext(os.path.basename(input_file))[0]
|
||||||
|
output_file = os.path.join(output_folder, f"{base_name}.mp4")
|
||||||
|
|
||||||
|
# FFmpeg command to convert the video
|
||||||
|
command = [
|
||||||
|
"ffmpeg",
|
||||||
|
"-i", input_file, # Input file
|
||||||
|
"-c:v", "libx264", # Video codec: H.264
|
||||||
|
"-preset", "fast", # Encoding speed/quality tradeoff
|
||||||
|
"-crf", "23", # Constant Rate Factor (quality, lower is better)
|
||||||
|
"-vf", "scale=-1:720", # Scale video to 720p (preserve aspect ratio)
|
||||||
|
"-r", "30", # Frame rate: 30 FPS
|
||||||
|
"-c:a", "aac", # Audio codec: AAC
|
||||||
|
"-b:a", "128k", # Audio bitrate
|
||||||
|
output_file # Output file
|
||||||
|
]
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Run the FFmpeg command
|
||||||
|
subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
print(f"Video converted successfully: {output_file}")
|
||||||
|
return output_file
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
print(f"Error converting video: {e.stderr.decode()}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def convert_video_and_update_playlist(file_path, original_filename, target_type, target_id, duration):
|
||||||
|
print(f"Starting video conversion for: {file_path}")
|
||||||
|
converted_file = convert_video(file_path, app.config['UPLOAD_FOLDER'])
|
||||||
|
if converted_file:
|
||||||
|
converted_filename = os.path.basename(converted_file)
|
||||||
|
print(f"Video converted successfully: {converted_filename}")
|
||||||
|
|
||||||
|
# Use the application context to interact with the database
|
||||||
|
with app.app_context():
|
||||||
|
# Update the database with the converted filename
|
||||||
|
if target_type == 'group':
|
||||||
|
group = Group.query.get_or_404(target_id)
|
||||||
|
for player in group.players:
|
||||||
|
content = Content.query.filter_by(player_id=player.id, file_name=original_filename).first()
|
||||||
|
if content:
|
||||||
|
content.file_name = converted_filename
|
||||||
|
elif target_type == 'player':
|
||||||
|
content = Content.query.filter_by(player_id=target_id, file_name=original_filename).first()
|
||||||
|
if content:
|
||||||
|
content.file_name = converted_filename
|
||||||
|
|
||||||
|
db.session.commit()
|
||||||
|
print(f"Database updated with converted video: {converted_filename}")
|
||||||
|
|
||||||
|
# Delete the original file only if it exists
|
||||||
|
if os.path.exists(file_path):
|
||||||
|
os.remove(file_path)
|
||||||
|
print(f"Original file deleted: {file_path}")
|
||||||
|
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(f"Video conversion failed for: {file_path}")
|
||||||
|
|
||||||
|
|
||||||
# Convert EMU to pixels
|
# Convert EMU to pixels
|
||||||
def emu_to_pixels(emu):
|
def emu_to_pixels(emu):
|
||||||
@@ -643,80 +720,6 @@ def delete_group_media(group_id, content_id):
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
return redirect(url_for('manage_group', group_id=group_id))
|
return redirect(url_for('manage_group', group_id=group_id))
|
||||||
|
|
||||||
def convert_video(input_file, output_folder):
|
|
||||||
"""
|
|
||||||
Converts a video file to MP4 format with H.264 codec, 720p resolution, and 30 FPS.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
input_file (str): Path to the input video file.
|
|
||||||
output_folder (str): Path to the folder where the converted video will be saved.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: Path to the converted video file, or None if conversion fails.
|
|
||||||
"""
|
|
||||||
if not os.path.exists(output_folder):
|
|
||||||
os.makedirs(output_folder)
|
|
||||||
|
|
||||||
# Generate the output file path
|
|
||||||
base_name = os.path.splitext(os.path.basename(input_file))[0]
|
|
||||||
output_file = os.path.join(output_folder, f"{base_name}.mp4")
|
|
||||||
|
|
||||||
# FFmpeg command to convert the video
|
|
||||||
command = [
|
|
||||||
"ffmpeg",
|
|
||||||
"-i", input_file, # Input file
|
|
||||||
"-c:v", "libx264", # Video codec: H.264
|
|
||||||
"-preset", "fast", # Encoding speed/quality tradeoff
|
|
||||||
"-crf", "23", # Constant Rate Factor (quality, lower is better)
|
|
||||||
"-vf", "scale=-1:720", # Scale video to 720p (preserve aspect ratio)
|
|
||||||
"-r", "30", # Frame rate: 30 FPS
|
|
||||||
"-c:a", "aac", # Audio codec: AAC
|
|
||||||
"-b:a", "128k", # Audio bitrate
|
|
||||||
output_file # Output file
|
|
||||||
]
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Run the FFmpeg command
|
|
||||||
subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
||||||
print(f"Video converted successfully: {output_file}")
|
|
||||||
return output_file
|
|
||||||
except subprocess.CalledProcessError as e:
|
|
||||||
print(f"Error converting video: {e.stderr.decode()}")
|
|
||||||
return None
|
|
||||||
|
|
||||||
def convert_video_and_update_playlist(file_path, original_filename, target_type, target_id, duration):
|
|
||||||
print(f"Starting video conversion for: {file_path}")
|
|
||||||
converted_file = convert_video(file_path, app.config['UPLOAD_FOLDER'])
|
|
||||||
if converted_file:
|
|
||||||
converted_filename = os.path.basename(converted_file)
|
|
||||||
print(f"Video converted successfully: {converted_filename}")
|
|
||||||
|
|
||||||
# Use the application context to interact with the database
|
|
||||||
with app.app_context():
|
|
||||||
# Update the database with the converted filename
|
|
||||||
if target_type == 'group':
|
|
||||||
group = Group.query.get_or_404(target_id)
|
|
||||||
for player in group.players:
|
|
||||||
content = Content.query.filter_by(player_id=player.id, file_name=original_filename).first()
|
|
||||||
if content:
|
|
||||||
content.file_name = converted_filename
|
|
||||||
elif target_type == 'player':
|
|
||||||
content = Content.query.filter_by(player_id=target_id, file_name=original_filename).first()
|
|
||||||
if content:
|
|
||||||
content.file_name = converted_filename
|
|
||||||
|
|
||||||
db.session.commit()
|
|
||||||
print(f"Database updated with converted video: {converted_filename}")
|
|
||||||
|
|
||||||
# Delete the original file only if it exists
|
|
||||||
if os.path.exists(file_path):
|
|
||||||
os.remove(file_path)
|
|
||||||
print(f"Original file deleted: {file_path}")
|
|
||||||
|
|
||||||
|
|
||||||
else:
|
|
||||||
print(f"Video conversion failed for: {file_path}")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(host='0.0.0.0', port=5000, debug=True)
|
app.run(host='0.0.0.0', port=5000, debug=True)
|
||||||
Binary file not shown.
Reference in New Issue
Block a user