diff --git a/__pycache__/extensions.cpython-311.pyc b/__pycache__/extensions.cpython-311.pyc index b4d531f..2cd6633 100644 Binary files a/__pycache__/extensions.cpython-311.pyc and b/__pycache__/extensions.cpython-311.pyc differ diff --git a/__pycache__/models.cpython-311.pyc b/__pycache__/models.cpython-311.pyc index a95e6d5..92eb3f5 100644 Binary files a/__pycache__/models.cpython-311.pyc and b/__pycache__/models.cpython-311.pyc differ diff --git a/app.py b/app.py index 8fceb5c..e6eb8a4 100644 --- a/app.py +++ b/app.py @@ -24,7 +24,7 @@ app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(app.instance app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 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 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_path = os.path.join(output_folder, image_filename) 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 def emu_to_pixels(emu): @@ -643,80 +720,6 @@ def delete_group_media(group_id, content_id): db.session.commit() 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__': app.run(host='0.0.0.0', port=5000, debug=True) \ No newline at end of file diff --git a/instance/dashboard.db b/instance/dashboard.db index af29767..52f9433 100644 Binary files a/instance/dashboard.db and b/instance/dashboard.db differ