Mindfreakx
Dseda
Verificación en dos pasos activada
Verificado por Whatsapp
Aquí tienes un ejemplo básico de cómo podría ser tu archivohas 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 "√"
cut_video.py
utilizando FFmpeg y pathlib
: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("√")
in <module>Aquí tienes un ejemplo básico de cómo podría ser tu archivocut_video.py
utilizando FFmpeg ypathlib
:
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".
El error indica quein <module>
total_seconds = int(float(duration_total.split(":")[0]) * 3600 +
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: ''
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.stderr
y verificar cómo se está formateando. Puedes adicionar algunos print
para depurar. Aquí hay una versión ajustada: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("√")
in <genexpr>El error indica queduration_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 destderr
y verificar cómo se está formateando. Puedes adicionar algunos
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 sugiere que elin <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: ''
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: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.")
Duration total:El error sugiere que elduration_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.
Parece que FFmpeg no está devolviendo la duración del video en el formato esperado. Para abordar esto, puedes imprimir todo el contenido deDuration total:
Error al procesar la duración total.
stderr
para entender mejor qué está ocurriendo. Aquí hay una versión del código con un enfoque de depuración mejorado: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.")
Duration: 00:00:15.14, start: 0.000000, bitrate: 278 kb/sParece que FFmpeg no está devolviendo la duración del video en el formato esperado. Para abordar esto, puedes imprimir todo el contenido destderr
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 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.Duration: 00:00:15.14, start: 0.000000, bitrate: 278 kb/s
...
Duration total:
Error al procesar la duración total.
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.")
print "√"...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.
¡Genial! 🥳 Me alegra saber que ya funciona. Si tienes más preguntas o necesitas ayuda con algo más, ¡no dudes en preguntar!
@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 ,@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
Si, solo necesitas tener ffmpeg.exe y el video.mp4 en la misma carpetapide 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
Para nada.. Gracias x la ayuda.. Pero no entendí nadaprefirio 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
🤡🤡
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?