Cortar videos en fracciones de 3 segudos

  • Autor Autor Mindfreakx
  • Fecha de inicio Fecha de inicio
Mindfreakx

Mindfreakx

Dseda
Verificación en dos pasos activada
Verificado por Whatsapp
hola
pues eso betas... algun rpograma autmatico que me corte mis reels en fracciones de 3 segundos, quiero evitarme hacerlo manualmente
les agradeceria la ayuda
 
¡Hola! Puedes probar herramientas como FFmpeg o algunos editores de video como Adobe Premiere Pro que tienen funciones de automatización. También hay herramientas en línea que podrían ser útiles para esto. ¡Suerte!
 
ffmpeg.exe (donde dice "ffmpeg-git-essentials.7z", una vez descargado encontraras "ffmpeg.exe" dentro de la carpeta "bin")
video_cutter.exe
{4DB25F09-FEBB-4515-8B43-B78FF3317BB6}.webp
 
Última edición:
has un archivo.py con lo siguiente
while true:
print "cut video"
input video ruta
#código ffmpeg que está en variables del entorno,
que recorte el video cada 3 seg, y que los guarde en una carpeta dentro de la carpeta input, con pathlib,
con sufijo 001, etc
print "√"
 
has un archivo.py con lo siguiente
while true:
print "cut video"
input video ruta
#código ffmpeg que está en variables del entorno,
que recorte el video cada 3 seg, y que los guarde en una carpeta dentro de la carpeta input, con pathlib,
con sufijo 001, etc
print "√"
Aquí tienes un ejemplo básico de cómo podría ser tu archivo cut_video.py utilizando FFmpeg y pathlib:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
    
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
        
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)
    for line in result.stderr.split('\n'):
        if "Duration" in line:
            duration_total = line.split(",")[0].split(" ")[1]
            break
            
    total_seconds = int(float(duration_total.split(":")[0]) * 3600 + 
                        float(duration_total.split(":")[1]) * 60 + 
                        float(duration_total.split(":")[2]))

    for start in range(0, total_seconds, duration):
        output_file = output_dir / f"corte_{count:03d}.mp4"
        subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
        count += 1

    print("√")

Recuerda tener FFmpeg instalado y en tu PATH. Este script corta el video en segmentos de 3 segundos y los guarda en una carpeta llamada "cortes".
 
Aquí tienes un ejemplo básico de cómo podría ser tu archivo cut_video.py utilizando FFmpeg y pathlib:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
   
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
       
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)
    for line in result.stderr.split('\n'):
        if "Duration" in line:
            duration_total = line.split(",")[0].split(" ")[1]
            break
           
    total_seconds = int(float(duration_total.split(":")[0]) * 3600 +
                        float(duration_total.split(":")[1]) * 60 +
                        float(duration_total.split(":")[2]))

    for start in range(0, total_seconds, duration):
        output_file = output_dir / f"corte_{count:03d}.mp4"
        subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
        count += 1

    print("√")

Recuerda tener FFmpeg instalado y en tu PATH. Este script corta el video en segmentos de 3 segundos y los guarda en una carpeta llamada "cortes".
in <module>
total_seconds = int(float(duration_total.split(":")[0]) * 3600 +
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: ''
 
in <module>
total_seconds = int(float(duration_total.split(":")[0]) * 3600 +
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: ''
El error indica que duration_total no está siendo extraído correctamente, lo que puede deberse a que el formato de duración de FFmpeg no se está parseando adecuadamente. Asegúrate de que estás capturando la duración correcta.

Prueba a modificar esa parte para mostrar el contenido de stderr y verificar cómo se está formateando. Puedes adicionar algunos print para depurar. Aquí hay una versión ajustada:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
   
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
       
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)
    print(result.stderr)  # Muestra la salida de error para depuración

    for line in result.stderr.split('\n'):
        if "Duration" in line:
            duration_total = line.split(",")[0].split(" ")[1]
            break
       
    # Comprueba el formato de duration_total
    print(f"Duration total: {duration_total}")

    total_seconds = sum(int(x) * 60 ** i for i, x in enumerate(reversed(duration_total.split(":"))))

    for start in range(0, total_seconds, duration):
        output_file = output_dir / f"corte_{count:03d}.mp4"
        subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
        count += 1

    print("√")

Esto imprime el error de FFmpeg y la duración total, lo que debería ayudarte a corregir el formato que se está utilizando. Asegúrate de que el video tiene una duración válida.
 
El error indica que duration_total no está siendo extraído correctamente, lo que puede deberse a que el formato de duración de FFmpeg no se está parseando adecuadamente. Asegúrate de que estás capturando la duración correcta.

Prueba a modificar esa parte para mostrar el contenido de stderr y verificar cómo se está formateando. Puedes adicionar algunos print para depurar. Aquí hay una versión ajustada:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
  
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
      
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)
    print(result.stderr)  # Muestra la salida de error para depuración

    for line in result.stderr.split('\n'):
        if "Duration" in line:
            duration_total = line.split(",")[0].split(" ")[1]
            break
      
    # Comprueba el formato de duration_total
    print(f"Duration total: {duration_total}")

    total_seconds = sum(int(x) * 60 ** i for i, x in enumerate(reversed(duration_total.split(":"))))

    for start in range(0, total_seconds, duration):
        output_file = output_dir / f"corte_{count:03d}.mp4"
        subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
        count += 1

    print("√")

Esto imprime el error de FFmpeg y la duración total, lo que debería ayudarte a corregir el formato que se está utilizando. Asegúrate de que el video tiene una duración válida.
in <genexpr>
total_seconds = sum(int(x) * 60 ** i for i, x in enumerate(reversed(duration_total.split(":"))))
~~~^^^
ValueError: invalid literal for int() with base 10: ''
 
in <genexpr>
total_seconds = sum(int(x) * 60 ** i for i, x in enumerate(reversed(duration_total.split(":"))))
~~~^^^
ValueError: invalid literal for int() with base 10: ''
El error sugiere que el duration_total no se está formando correctamente y contiene una cadena vacía. Podemos agregar validaciones para asegurarnos de que estamos extrayendo las partes correctas. Además, verifiquemos cómo estamos dividiendo la duración. Aquí tienes una versión modificada:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
  
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
      
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)
    duration_total = None

    for line in result.stderr.split('\n'):
        if "Duration" in line:
            # Asegúrate de que se captura correctamente el valor
            parts = line.split(",")[0].split(" ")[1:][0]
            duration_total = parts.strip()
            break

    if duration_total is None:
        print("No se pudo encontrar la duración del video.")
        continue

    print(f"Duration total: {duration_total}")

    # Asegúrate de que duration_total no esté vacío
    if duration_total:
        # Convierte el tiempo a segundos
        h, m, s = map(float, duration_total.split(":"))
        total_seconds = int(h * 3600 + m * 60 + s)

        for start in range(0, total_seconds, duration):
            output_file = output_dir / f"corte_{count:03d}.mp4"
            subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
            count += 1

        print("√")
    else:
        print("Error al procesar la duración total.")

Con esto, se espera que captures adecuadamente la duración. Asegúrate de que el video utilizado tenga un formato reconocido por FFmpeg.
 
El error sugiere que el duration_total no se está formando correctamente y contiene una cadena vacía. Podemos agregar validaciones para asegurarnos de que estamos extrayendo las partes correctas. Además, verifiquemos cómo estamos dividiendo la duración. Aquí tienes una versión modificada:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
 
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
     
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)
    duration_total = None

    for line in result.stderr.split('\n'):
        if "Duration" in line:
            # Asegúrate de que se captura correctamente el valor
            parts = line.split(",")[0].split(" ")[1:][0]
            duration_total = parts.strip()
            break

    if duration_total is None:
        print("No se pudo encontrar la duración del video.")
        continue

    print(f"Duration total: {duration_total}")

    # Asegúrate de que duration_total no esté vacío
    if duration_total:
        # Convierte el tiempo a segundos
        h, m, s = map(float, duration_total.split(":"))
        total_seconds = int(h * 3600 + m * 60 + s)

        for start in range(0, total_seconds, duration):
            output_file = output_dir / f"corte_{count:03d}.mp4"
            subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
            count += 1

        print("√")
    else:
        print("Error al procesar la duración total.")

Con esto, se espera que captures adecuadamente la duración. Asegúrate de que el video utilizado tenga un formato reconocido por FFmpeg.
Duration total:
Error al procesar la duración total.
 
Duration total:
Error al procesar la duración total.
Parece que FFmpeg no está devolviendo la duración del video en el formato esperado. Para abordar esto, puedes imprimir todo el contenido de stderr para entender mejor qué está ocurriendo. Aquí hay una versión del código con un enfoque de depuración mejorado:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
  
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
      
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)

    # Debug: imprimir stderr
    print(result.stderr)

    duration_total = None
    for line in result.stderr.split('\n'):
        if "Duration" in line:
            parts = line.split(",")[0].split(" ")[1:]
            duration_total = parts[0] if parts else None
            break

    if duration_total is None:
        print("No se pudo encontrar la duración del video.")
        continue

    print(f"Duration total: {duration_total}")

    if duration_total:
        try:
            h, m, s = map(float, duration_total.split(":"))
            total_seconds = int(h * 3600 + m * 60 + s)

            for start in range(0, total_seconds, duration):
                output_file = output_dir / f"corte_{count:03d}.mp4"
                subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
                count += 1

            print("√")
        except ValueError:
            print("Error al procesar la duración total. Formato incorrecto.")
    else:
        print("Error al procesar la duración total.")

Con esto, podrás ver la salida completa de FFmpeg. Asegúrate de que el archivo de video sea válido y tenga un formato que FFmpeg pueda interpretar. Esto debería ayudarte a identificar el problema en la duración.
 
Parece que FFmpeg no está devolviendo la duración del video en el formato esperado. Para abordar esto, puedes imprimir todo el contenido de stderr para entender mejor qué está ocurriendo. Aquí hay una versión del código con un enfoque de depuración mejorado:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
 
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
     
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)

    # Debug: imprimir stderr
    print(result.stderr)

    duration_total = None
    for line in result.stderr.split('\n'):
        if "Duration" in line:
            parts = line.split(",")[0].split(" ")[1:]
            duration_total = parts[0] if parts else None
            break

    if duration_total is None:
        print("No se pudo encontrar la duración del video.")
        continue

    print(f"Duration total: {duration_total}")

    if duration_total:
        try:
            h, m, s = map(float, duration_total.split(":"))
            total_seconds = int(h * 3600 + m * 60 + s)

            for start in range(0, total_seconds, duration):
                output_file = output_dir / f"corte_{count:03d}.mp4"
                subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
                count += 1

            print("√")
        except ValueError:
            print("Error al procesar la duración total. Formato incorrecto.")
    else:
        print("Error al procesar la duración total.")

Con esto, podrás ver la salida completa de FFmpeg. Asegúrate de que el archivo de video sea válido y tenga un formato que FFmpeg pueda interpretar. Esto debería ayudarte a identificar el problema en la duración.
Duration: 00:00:15.14, start: 0.000000, bitrate: 278 kb/s
...
Duration total:
Error al procesar la duración total.
 
Duration: 00:00:15.14, start: 0.000000, bitrate: 278 kb/s
...
Duration total:
Error al procesar la duración total.
Parece que el formato de salida que recibes de FFmpeg tiene un pequeño cambio. La duración se muestra como "Duration: 00:00:15.14" y no se está extrayendo correctamente. Debemos ajustar el código para capturar la duración adecuada.

Aquí tienes una versión mejorada del código que maneja correctamente la extracción de la duración:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
  
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
      
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)

    # Debug: imprimir stderr
    print(result.stderr)

    duration_total = None
    for line in result.stderr.split('\n'):
        if "Duration:" in line:
            parts = line.split(",")[0].split(":")[1:]  # Extrae h, m, s
            duration_total = ":".join(part.strip() for part in parts)
            break

    if duration_total is None:
        print("No se pudo encontrar la duración del video.")
        continue

    print(f"Duration total: {duration_total}")

    if duration_total:
        try:
            h, m, s = map(float, duration_total.split(":"))
            total_seconds = int(h * 3600 + m * 60 + s)

            for start in range(0, total_seconds, duration):
                output_file = output_dir / f"corte_{count:03d}.mp4"
                subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
                count += 1

            print("√")
        except ValueError:
            print("Error al procesar la duración total. Formato incorrecto.")
    else:
        print("Error al procesar la duración total.")

Con este ajuste, el código debería poder extraer correctamente la duración del video en el formato "00:00:15.14", asegurando que puedas usarla para los cortes. Asegúrate de probarlo con un archivo válido.
 
Parece que el formato de salida que recibes de FFmpeg tiene un pequeño cambio. La duración se muestra como "Duration: 00:00:15.14" y no se está extrayendo correctamente. Debemos ajustar el código para capturar la duración adecuada.

Aquí tienes una versión mejorada del código que maneja correctamente la extracción de la duración:

Python:
import os
from pathlib import Path
import subprocess

while True:
    print("Cut video")
    video_path = input("Ruta del video: ")
    input_path = Path(video_path)
 
    if not input_path.is_file():
        print("El archivo no existe. Intente de nuevo.")
        continue
     
    output_dir = input_path.parent / "cortes"
    output_dir.mkdir(exist_ok=True)

    duration = 3
    count = 1

    # Obtiene la duración del video
    result = subprocess.run(['ffmpeg', '-i', str(input_path)], stderr=subprocess.PIPE, text=True)

    # Debug: imprimir stderr
    print(result.stderr)

    duration_total = None
    for line in result.stderr.split('\n'):
        if "Duration:" in line:
            parts = line.split(",")[0].split(":")[1:]  # Extrae h, m, s
            duration_total = ":".join(part.strip() for part in parts)
            break

    if duration_total is None:
        print("No se pudo encontrar la duración del video.")
        continue

    print(f"Duration total: {duration_total}")

    if duration_total:
        try:
            h, m, s = map(float, duration_total.split(":"))
            total_seconds = int(h * 3600 + m * 60 + s)

            for start in range(0, total_seconds, duration):
                output_file = output_dir / f"corte_{count:03d}.mp4"
                subprocess.run(['ffmpeg', '-ss', str(start), '-i', str(input_path), '-t', str(duration), '-c', 'copy', str(output_file)])
                count += 1

            print("√")
        except ValueError:
            print("Error al procesar la duración total. Formato incorrecto.")
    else:
        print("Error al procesar la duración total.")

Con este ajuste, el código debería poder extraer correctamente la duración del video en el formato "00:00:15.14", asegurando que puedas usarla para los cortes. Asegúrate de probarlo con un archivo válido.
print "√"...
¡Ya funciona! 🥳
2025-08-06.182700.webp
 
@Puko que tal este .bat ??

1 - Crear un archivo con el nombre.bat
2- Pegar el codigo en el nombre.bat
3- Tener ffmpge.ext en la misma carpeta del nombre.bat
4- Ejecutar el nombre.bat y el te pedira el nombre del video y de la carpeta
donde se guardaran los video cortados.

Codigo:
Bash:
@echo off
setlocal enabledelayedexpansion

:: Pedir nombre del video
set /p video=Nombre del video (con extension):

:: Verificar si el archivo existe
if not exist "%video%" (
    echo El archivo %video% no existe.
    pause
    exit /b
)

:: Pedir nombre de la carpeta
set /p carpeta=Nombre de la carpeta de salida:

:: Crear carpeta si no existe
if not exist "%carpeta%" (
    mkdir "%carpeta%"
)

:: Verificar que ffmpeg.exe este en la misma carpeta
if not exist "ffmpeg.exe" (
    echo ffmpeg.exe no se encuentra en la misma carpeta.
    pause
    exit /b
)

:: Cortar el video cada 3 segundos
ffmpeg -i "%video%" -c copy -map 0 -segment_time 3 -f segment "%carpeta%\%%03d.mp4"

echo Proceso completado.
pause
 
@Puko que tal este .bat ??

1 - Crear un archivo con el nombre.bat
2- Pegar el codigo en el nombre.bat
3- Tener ffmpge.ext en la misma carpeta del nombre.bat
4- Ejecutar el nombre.bat y el te pedira el nombre del video y de la carpeta
donde se guardaran los video cortados.

Codigo:
Bash:
@echo off
setlocal enabledelayedexpansion

:: Pedir nombre del video
set /p video=Nombre del video (con extension):

:: Verificar si el archivo existe
if not exist "%video%" (
    echo El archivo %video% no existe.
    pause
    exit /b
)

:: Pedir nombre de la carpeta
set /p carpeta=Nombre de la carpeta de salida:

:: Crear carpeta si no existe
if not exist "%carpeta%" (
    mkdir "%carpeta%"
)

:: Verificar que ffmpeg.exe este en la misma carpeta
if not exist "ffmpeg.exe" (
    echo ffmpeg.exe no se encuentra en la misma carpeta.
    pause
    exit /b
)

:: Cortar el video cada 3 segundos
ffmpeg -i "%video%" -c copy -map 0 -segment_time 3 -f segment "%carpeta%\%%03d.mp4"

echo Proceso completado.
pause
pide nombre del video, en lugar de la ruta ,
pide carpeta , tendrias que ponersela cada vez
ocupa ffmpeg en la misma carpeta , en lugar de usar ya ffmpeg en variables del entorno ,
y como no movi ffmpeg , no se si siga funcionando
 
pide nombre del video, en lugar de la ruta ,
pide carpeta , tendrias que ponersela cada vez
ocupa ffmpeg en la misma carpeta , en lugar de usar ya ffmpeg en variables del entorno ,
y como no movi ffmpeg , no se si siga funcionando
Si, solo necesitas tener ffmpeg.exe y el video.mp4 en la misma carpeta
 
prefirio contestar: "alguien habla español",
y después lo borro,
en lugar de dar las gracias o preguntar
por eso ya nadie les hacen los códigos
🤡🤡
 
prefirio contestar: "alguien habla español",
y después lo borro,
en lugar de dar las gracias o preguntar
por eso ya nadie les hacen los códigos
🤡🤡
Para nada.. Gracias x la ayuda.. Pero no entendí nada
 

Temas similares

Atrás
Arriba