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.")