genvid / stitcher.py
Moibe's picture
HF Readme
993fe8a
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:
# Limpiar los archivos temporales y el archivo de lista
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.")