File size: 3,656 Bytes
993fe8a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
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.")
|