import os import requests import threading os.environ["IMAGEIO_FFMPEG_EXE"] = "/usr/bin/ffmpeg" from flask import Flask, request, jsonify from components.video import process_full_video app = Flask(__name__) def process_and_call_webhook(url, video_id, times, webhook_url, filename): try: os.makedirs("videos", exist_ok=True) os.makedirs("temp", exist_ok=True) print(f"Working on video {filename}") processed_files = process_full_video(filename, times) payload = { "videosProcessedQuantity": len(processed_files), "filename": filename, "processedFiles": processed_files, "url": url, "videoId": video_id, "error": False, } try: resp = requests.post(webhook_url, json=payload, timeout=30) print(f"Webhook status: {resp.status_code}, content: {resp.text}") except Exception as webhook_error: print(f"Erro ao chamar webhook: {webhook_error}") except Exception as e: payload = { "videosProcessedQuantity": 0, "filename": filename, "processedFiles": processed_files, "url": url, "videoId": video_id, "error": str(e), } try: resp = requests.post(webhook_url, json=payload, timeout=30) print(f"Webhook send error status: {resp.status_code}") print(str(e)) except Exception as webhook_error: print(f"Erro ao chamar webhook: {webhook_error}") print(f"Erro no processamento: {e}") @app.route('/process', methods=['POST']) def process_video(): data = request.get_json() if not data or not ("url" in data or "videoId" in data): return jsonify({"error": "Informe 'url' ou 'videoId'"}), 400 url = data.get("url") video_id = data.get("videoId") times = data.get("times", []) webhook_url = data.get("webhookUrl") if not webhook_url: return jsonify({"error": "Informe 'webhookUrl'"}), 400 filename = data.get("filename") if not filename: return jsonify({"error": "Informe 'filename'"}), 400 threading.Thread( target=process_and_call_webhook, args=(url, video_id, times, webhook_url, filename), daemon=True ).start() return jsonify({"message": f"{video_id if video_id else url}"}), 200 if __name__ == '__main__': app.run(host="0.0.0.0", port=5000, debug=True)