newvd / Vidu /utils /union.py
nmrprogs's picture
Upload 23 files
70b382b verified
import os
import subprocess
def obtener_lista_videos(folder_path):
"""
Obtiene una lista de archivos MP4 en el directorio especificado, ordenados por nombre.
:param folder_path: Ruta de la carpeta donde están los videos
:return: Lista de rutas a los archivos de video
"""
videos = [os.path.join(folder_path, filename) for filename in sorted(os.listdir(folder_path)) if filename.endswith(".mp4")]
return videos
def crear_lista_txt(folder_path, lista_txt_path):
"""
Crea un archivo de lista de texto con las rutas a los archivos MP4 en el directorio especificado.
:param folder_path: Ruta de la carpeta donde están los videos
:param lista_txt_path: Ruta del archivo de lista de texto
"""
videos = obtener_lista_videos(folder_path)
with open(lista_txt_path, 'w') as f:
for video in videos:
f.write(f"file '{video}'\n")
def unir_videos_con_lista(lista_txt_path, output_video):
"""
Une los videos MP4 usando un archivo de lista de texto.
:param lista_txt_path: Ruta del archivo de lista de texto
:param output_video: Ruta del archivo de video de salida
"""
# Verifica si ffmpeg está instalado
try:
subprocess.run(["ffmpeg", "-version"], check=True)
except subprocess.CalledProcessError:
print("ffmpeg no está instalado. Debes instalarlo.")
return
# Ejecuta el comando ffmpeg para unir los videos
cmd = [
"ffmpeg", "-y", "-f", "concat", "-safe", "0",
"-i", lista_txt_path, "-c", "copy", output_video
]
subprocess.run(cmd, check=True)
print(f"Video combinado guardado en {output_video}")
def eliminar_fragmentos(folder_path):
"""
Elimina todos los archivos en el directorio especificado.
:param folder_path: Ruta de la carpeta donde están los fragmentos
"""
for archivo in os.listdir(folder_path):
ruta_archivo = os.path.join(folder_path, archivo)
if os.path.isfile(ruta_archivo):
os.remove(ruta_archivo)
print(f"Todos los fragmentos en {folder_path} han sido eliminados.")
# Define las rutas
folder_path = '/content/Vidu_Studio/video_output' # Carpeta donde están los videos
lista_txt_path = '/tmp/video_list.txt' # Archivo de lista de texto
video_salida = '/content/Vidu_Studio/video.mp4' # Archivo de video combinado
# Crear el archivo de lista de texto
crear_lista_txt(folder_path, lista_txt_path)
# Unir los videos usando el archivo de lista de texto
unir_videos_con_lista(lista_txt_path, video_salida)
# Eliminar los fragmentos después de combinar los videos
eliminar_fragmentos(folder_path)