Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cv2
- def calcula_escala_font(texto, font, thickness_base, ancho_frame, margin):
- # Medimos a escala 1.0
- (w_texto, _), _ = cv2.getTextSize(texto, font, 1.0, thickness_base)
- # Ajustamos la escala para que el texto + 2*margin entre en el frame
- escala = (ancho_frame - 1*margin) / w_texto
- return escala
- # Parámetros
- video_path = "./video.mp4"
- cap = cv2.VideoCapture(video_path)
- fps = cap.get(cv2.CAP_PROP_FPS)
- w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
- h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
- fourcc = cv2.VideoWriter_fourcc(*"mp4v")
- out = cv2.VideoWriter("video_con_margen.mp4", fourcc, fps, (w, h))
- texto = "Hola Hola"
- font = cv2.FONT_HERSHEY_SIMPLEX
- thickness_base = 2
- # 1) Espacio al borde del vídeo
- margin_video = 100
- # 2) Padding interno del rectángulo al texto
- pad_text = 20
- # Calcula escala y grosor
- fontScale = calcula_escala_font(texto, font, thickness_base, w, margin_video)
- thickness = max(1, int(thickness_base * fontScale))
- # Recalculamos tamaño del texto y coordenadas
- (text_w, text_h), baseline = cv2.getTextSize(texto, font, fontScale, thickness)
- # Centrado (toma en cuenta sólo el ancho disponible: w - 2*margin_video)
- x = margin_video + ((w - 2*margin_video) - text_w) // 2
- y = (h + text_h) // 2
- while True:
- ret, frame = cap.read()
- if not ret: break
- t = cap.get(cv2.CAP_PROP_POS_MSEC) / 1000.0
- if 0.0 <= t <= 5.0:
- # Fondo negro (usa pad_text para el interior)
- tl = (x - pad_text, y - text_h - baseline - pad_text)
- br = (x + text_w + pad_text, y + baseline + pad_text)
- cv2.rectangle(frame, tl, br, (0,0,0), cv2.FILLED)
- # Texto centrado dentro del rectángulo
- cv2.putText(frame, texto, (x, y),
- font, fontScale, (255,255,255),
- thickness, cv2.LINE_AA)
- out.write(frame)
- cap.release()
- out.release()
- print("✓ Vídeo generado como video_con_margen.mp4")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement