|
import subprocess |
|
import herramientas |
|
import os |
|
|
|
def remux_video(input_path, output_path): |
|
"""Re-muxea un archivo de video MP4.""" |
|
ffmpeg_command_remux = [ |
|
'ffmpeg', |
|
'-i', input_path, |
|
'-c', 'copy', |
|
'-movflags', '+faststart', |
|
output_path |
|
] |
|
try: |
|
subprocess.run(ffmpeg_command_remux, check=True, capture_output=True) |
|
print(f"Re-muxing exitoso de: {input_path} a {output_path}") |
|
return True |
|
except subprocess.CalledProcessError as e: |
|
print(f"Error al re-muxear {input_path}: {e}") |
|
print(f"Salida de error de FFmpeg:\n{e.stderr.decode()}") |
|
return False |
|
except Exception as e: |
|
print(f"Ocurrió un error durante el re-muxing: {e}") |
|
return False |
|
|
|
def unirVideos(): |
|
|
|
directorio_videos = 'resultados' |
|
lista_nombres_archivos = herramientas.lista_archivos(directorio_videos) |
|
archivos_remuxeados = [] |
|
lista_archivo_temporal = 'lista_concat.txt' |
|
|
|
try: |
|
with open(lista_archivo_temporal, 'w') as f_lista: |
|
for nombre_archivo in lista_nombres_archivos: |
|
ruta_completa = os.path.join(directorio_videos, nombre_archivo) |
|
nombre_base, extension = os.path.splitext(nombre_archivo) |
|
ruta_temporal = os.path.join(directorio_videos, f"temp_{nombre_base}{extension}") |
|
if remux_video(ruta_completa, ruta_temporal): |
|
archivos_remuxeados.append(ruta_temporal) |
|
f_lista.write(f"file '{ruta_temporal}'\n") |
|
else: |
|
print("Error al re-muxear un archivo. Abortando la creación de la lista.") |
|
archivos_remuxeados = [] |
|
break |
|
except FileNotFoundError as e: |
|
print(f"Error al abrir o crear el archivo de lista temporal: {e}") |
|
archivos_remuxeados = [] |
|
except Exception as e: |
|
print(f"Ocurrió un error al escribir en el archivo de lista temporal: {e}") |
|
archivos_remuxeados = [] |
|
|
|
if archivos_remuxeados: |
|
ffmpeg_command_concat = [ |
|
'ffmpeg', |
|
'-f', 'concat', |
|
'-safe', '0', |
|
'-i', lista_archivo_temporal, |
|
'-an', |
|
'-c', 'copy', |
|
'video_unido_sin_audio.mp4' |
|
] |
|
|
|
try: |
|
subprocess.run(ffmpeg_command_concat, check=True, capture_output=True) |
|
print("Los videos se han unido exitosamente (usando archivo de lista y archivos remuxeados).") |
|
except subprocess.CalledProcessError as e: |
|
print(f"Error al ejecutar FFmpeg para concatenar (archivo de lista): {e}") |
|
print(f"Salida de error de FFmpeg:\n{e.stderr.decode()}") |
|
except Exception as e: |
|
print(f"Ocurrió un error durante la concatenación (archivo de lista): {e}") |
|
finally: |
|
|
|
for archivo_temporal in archivos_remuxeados: |
|
try: |
|
os.remove(archivo_temporal) |
|
print(f"Archivo temporal eliminado: {archivo_temporal}") |
|
except OSError as e: |
|
print(f"Error al eliminar el archivo temporal {archivo_temporal}: {e}") |
|
try: |
|
os.remove(lista_archivo_temporal) |
|
print(f"Archivo de lista eliminado: {lista_archivo_temporal}") |
|
except OSError as e: |
|
print(f"Error al eliminar el archivo de lista {lista_archivo_temporal}: {e}") |
|
else: |
|
print("No se pudieron re-muxear los archivos o hubo un error al crear la lista, no se intentó la concatenación.") |
|
|