import io from mutagen import File as MutagenFile # Demande explicite : une vidéo importée dans "Mes assets" ne doit jamais # dépasser 5 minutes (voir l'action "vidéo", game_engine/rendering/ # collision_rules.py — pensée pour une courte cinématique/cutscene, pas un # film entier), même esprit que MAX_AUDIO_SECONDS pour un son. MAX_VIDEO_SECONDS = 300 def validate_video_duration( content: bytes, filename: str = "video.mp4", max_seconds: int = MAX_VIDEO_SECONDS ) -> str | None: """Lit la durée d'un fichier vidéo MP4 (seul format accepté à l'upload, voir routes/assets/upload_user_asset.py — mutagen ne sait pas lire fiablement la durée de webm/mov/avi, contrairement au conteneur MP4/ MOV ISO base media, qu'il décode via mutagen.mp4) et renvoie un message d'erreur (français, prêt à afficher) si elle dépasse `max_seconds`, ou si le format n'a pas pu être reconnu du tout (repli prudent : un fichier illisible n'est jamais accepté silencieusement). Renvoie None si la durée est correcte. filename (juste l'extension importe) : contrairement à un son (voir validate_audio_duration.py), la détection MP4 de mutagen SANS indice de nom de fichier échoue silencieusement sur certains fichiers (moov/ftyp minimaux) — passer ".mp4" explicitement la rend fiable.""" video = MutagenFile(io.BytesIO(content), filename=filename) if video is None or video.info is None or not getattr(video.info, "length", None): return "Format vidéo non reconnu." duration = video.info.length if duration > max_seconds: return f"Cette vidéo dépasse {max_seconds // 60} minutes (durée : {int(duration)} secondes)." return None