Skip to content

Commit 57ba347

Browse files
committed
add new features
1 parent 5928624 commit 57ba347

4 files changed

Lines changed: 131 additions & 10 deletions

File tree

README.md

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Script de Compresión de Video
1+
# Script de Compresión de Video MP4
22

3-
Este script de Python está diseñado para comprimir videos utilizando HandBrakeCLI en un sistema operativo macOS. El script está optimizado para proporcionar una alta tasa de compresión, reduciendo el tamaño del video en más del 80% en la mayoría de los casos, manteniendo una calidad de video aceptable.
3+
Este script de Python está diseñado para comprimir múltiples videos utilizando HandBrakeCLI en un sistema operativo macOS. El script está optimizado para proporcionar una alta tasa de compresión, reduciendo el tamaño del video en más del 80% en la mayoría de los casos, manteniendo una calidad de video aceptable. Al finalizar el proceso de compresión de todos los videos, el script notificará con un sonido y enviará un correo electrónico mediante el servicio Mailgun (es necesario configurar las variables de entorno para el servicio Mailgun en un archivo `.env`).
44

55
## Requisitos
66

@@ -9,7 +9,7 @@ Este script de Python está diseñado para comprimir videos utilizando HandBrake
99

1010
## Instalación
1111

12-
Descargue HandBrakeCLI desde el [sitio oficial de HandBrake](https://handbrake.fr/downloads2.php)
12+
Descargue HandBrakeCLI desde el <a href="https://handbrake.fr/downloads2.php" target="_blank">sitio oficial de HandBrake</a>
1313

1414
Una vez descargado, copie HandBrakeCLI en su carpeta de Aplicaciones.
1515

@@ -28,10 +28,48 @@ Una vez descargado, copie HandBrakeCLI en su carpeta de Aplicaciones.
2828
cd <ruta_carpeta>
2929
```
3030

31-
3. Ejecuta el script y arrastra el archivo de video a comprimir
31+
3. Crea un entorno virtual:
32+
33+
```bash copyable
34+
python3 -m venv env
35+
```
36+
37+
4. Activa el entorno virtual:
38+
```bash copyable
39+
source env/bin/activate
40+
```
41+
42+
5. Instala las dependencias necesarias desde el archivo requirements.txt:
43+
```bash copyable
44+
pip install -r requirements.txt
45+
```
46+
47+
6. Ejecuta el script, escribe el número de videos a comprimir y copia la ruta de cada video:
3248

3349
```bash copyable
3450
python compress.py
3551
```
3652

37-
El script comprime un video utilizando HandBrakeCLI. Solicita la ruta del video a comprimir y la ruta donde se guardará el video comprimido. El video de salida será un archivo MP4 optimizado, con una tasa de compresión de más del 80%, una resolución de 1080p, una tasa de cuadros de 30 fps, y una tasa de bits de audio de 96 kbps.
53+
El script comprime los videos uno tras otro, utilizando HandBrakeCLI. Solicita la cantidad de videos a comprimir y las rutas de los videos. Los videos comprimidos se guardan en el mismo directorio que los archivos de origen, con un sufijo "_compress" en el nombre del archivo. El video de salida será un archivo MP4 optimizado, con una tasa de compresión de más del 80%, una resolución de 1080p, una tasa de cuadros de 30 fps, y una tasa de bits de audio de 96 kbps.
54+
55+
## Contribuye
56+
57+
¡Te invito a contribuir a este proyecto y hacerlo aún mejor! 😊
58+
59+
Si te gusta este proyecto, no olvides darle una Star ⭐️ en GitHub.
60+
61+
Si deseas contribuir con código, sigue estos pasos:
62+
63+
Haz un fork de este repositorio.
64+
65+
- Crea una rama con tu nueva funcionalidad: git checkout -b feature/nueva-funcionalidad.
66+
- Realiza tus cambios y realiza commits: git commit -m "Añade nueva funcionalidad".
67+
- Envía tus cambios a tu repositorio remoto: git push origin feature/nueva-funcionalidad.
68+
- Abre un Pull Request en este repositorio principal.
69+
70+
Si encuentras algún problema o tienes alguna sugerencia, abre un Issue en el repositorio. Estaré encantado de ayudarte.
71+
72+
Comparte este proyecto con tus amigos y colegas.
73+
74+
Agradecimientos
75+
¡Gracias por tu interés en este proyecto! Esperamos que sea útil y te diviertas explorando y contribuyendo. Si tienes alguna pregunta, no dudes en contactarme.

compress.py

Lines changed: 81 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,36 @@
11
import subprocess
22
import os
3+
import sys
4+
from dotenv import load_dotenv
5+
import requests
6+
import send2trash
7+
8+
9+
def shutdown_option():
10+
"""
11+
Esta función pregunta al usuario si desea que el Mac se apague cuando finalice el proceso de compresión.
12+
"""
13+
# Pregunta al usuario si desea que el Mac se apague al finalizar la compresión
14+
shutdown = input("¿Desea que el Mac se apague cuando finalice el proceso de compresión? \n [1] SI apagar \n [2] NO apagar \n : ").strip()
15+
16+
# Si el usuario eligió apagar el Mac, verifica si el script se está ejecutando con permisos de superusuario
17+
if shutdown == '1':
18+
if os.geteuid() != 0:
19+
print("Para apagar el Mac al finalizar la compresión, debes ejecutar este script como superusuario. Intenta ejecutar el script con 'sudo'.")
20+
sys.exit()
21+
22+
return shutdown
23+
24+
# Llama a la función de opción de apagado al inicio del script y guarda la elección del usuario
25+
shutdown = shutdown_option()
326

427
def comprimir_video(ruta_origen, ruta_destino):
528
"""
6-
Esta función comprime un video usando HandBrakeCLI.
29+
Esta función comprime Multiples videos usando HandBrakeCLI.
730
831
Parámetros:
932
ruta_origen -- Ruta al archivo de video original.
10-
ruta_destino -- Ruta donde se guardará el video comprimido.
33+
ruta_destino -- Ruta donde se guardará el video comprimido, es la misma de Origen.
1134
"""
1235

1336
# Reemplaza las barras invertidas en las rutas de los archivos
@@ -19,8 +42,53 @@ def comprimir_video(ruta_origen, ruta_destino):
1942

2043
# Ejecuta el comando
2144
subprocess.run(' '.join(comando), shell=True)
45+
46+
# Mueve el archivo original a la papelera
47+
send2trash.send2trash(ruta_origen)
48+
49+
def alert_success():
50+
"""
51+
Esta función se ejecuta cuando el script finaliza la compresión.
52+
Genera un sonido de alerta en caso de éxito y envía un correo electrónico.
53+
"""
54+
# Genera un sonido de alerta en caso de éxito
55+
os.system('afplay ok-notification-alert.wav')
56+
# Envía un correo electrónico al finalizar el proceso
57+
send_email("Compresión exitosa", "La compresión de sus videos se realizó satisfactoriamente.", "SUCORREO@gmail.com")
58+
59+
def send_email(subject, text, to):
60+
"""
61+
Esta función se ejecuta para enviar un correo electrónico al finalizar el proceso.
2262
23-
print("¡Bienvenido a Compress MP4, sus archivos se guardarán en el mismo directorio que los archivos de origen!")
63+
Parámetros:
64+
subject -- Asunto del correo electrónico.
65+
text -- Texto del correo electrónico.
66+
to -- Destinatario del correo electrónico.
67+
"""
68+
# Carga las variables de entorno del archivo .env
69+
load_dotenv()
70+
71+
# Hacemos una solicitud POST a la API de Mailgun
72+
response = requests.post(
73+
# La URL de la API de Mailgun para enviar correos electrónicos
74+
"https://api.mailgun.net/v3/mail.SUDOMINIO.com.co/messages",
75+
# Usamos la autenticación básica de HTTP con la clave API de Mailgun
76+
auth=("api", os.getenv("MAILGUN_API_KEY")),
77+
# Los datos del correo electrónico
78+
data={"from": "noreply@mail.SUDOMINIO.com.co",
79+
"to": [to],
80+
"subject": subject,
81+
"text": text})
82+
83+
# Devuelve True si el correo electrónico fue enviado con éxito, False en caso contrario
84+
if response.status_code == 200:
85+
print("Se envio una confirmacion de proceso finalizado al Correo electrónico.")
86+
return True
87+
else:
88+
print("Error al enviar el correo electrónico.")
89+
return False
90+
91+
print("¡Gracias por usar Compress MP4, sus archivos se guardarán en el mismo directorio que los archivos de origen!")
2492
# Solicita la cantidad de videos a comprimir
2593
cantidad_videos = int(input("Ingrese la cantidad de videos a comprimir: ").strip())
2694

@@ -40,8 +108,16 @@ def comprimir_video(ruta_origen, ruta_destino):
40108
# Crea la ruta del archivo de destino en el mismo directorio que el archivo de origen
41109
nombre_archivo = os.path.basename(ruta_origen)
42110
nombre_base, extension = os.path.splitext(nombre_archivo)
43-
nombre_archivo_comprimido = f"{nombre_base}_comprimido{extension}"
111+
nombre_archivo_comprimido = f"{nombre_base}_compressed{extension}"
44112
ruta_destino = os.path.join(ruta_directorio, nombre_archivo_comprimido)
45113

46114
# Uso de la función
47-
comprimir_video(ruta_origen, ruta_destino)
115+
comprimir_video(ruta_origen, ruta_destino)
116+
117+
118+
# Llama a la función de alerta de éxito al finalizar la compresión de todos los videos
119+
alert_success()
120+
121+
# Si el usuario eligió apagar el Mac, lo apaga
122+
if shutdown == '1':
123+
os.system('shutdown -h now')

ok-notification-alert.wav

267 KB
Binary file not shown.

requirements.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
certifi==2023.11.17
2+
charset-normalizer==3.3.2
3+
idna==3.6
4+
python-dotenv==1.0.1
5+
requests==2.31.0
6+
Send2Trash==1.8.2
7+
urllib3==2.1.0

0 commit comments

Comments
 (0)