Puko
Dseda
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Asi lo tengo =(Aquí te presento un ejemplo simple cómo podrías implementar esto en Python. En este caso, se solicita la entrada del usuario para la URL del video y el directorio de descarga.
Recordatorio: Esta cadena de comandos requerirá que tengasPython:import os def download_tiktok(): print("Tiktok") url = input("Introduce Url: ") print("\nEscoge la carpeta de descarga:") print(" 1.- Descargas") print(" 2.- tiktok") print(" 3.- Manual (Introduce la ruta)") option = input("Escoge opción: ") if option == '1': download_dir = "Descargas" elif option == '2': download_dir = "tiktok" elif option == '3': download_dir = input("Introduce la ruta: ") else: print("Opción no reconocida, usando Descargas por defecto") download_dir = "Descargas" command = f'yt-dlp -f best[format_id*=h264_540p] -o "{download_dir}/%(upload_date)s.%(id)s.%(ext)s" "{url}"' os.system(command) download_tiktok()
yt-dlp
instalado en tu sistema y que esté accesible desde la línea de comando. Reemplaza "Descargas" y "tiktok" con las rutas reales a tus directorios de descarga. Para "Manual", deberías ingresar la ruta completa al directorio donde quieres que se descargue el video.
Entendido, te muestro cómo podrías agregar la funcionalidad para manejar varias URL. Para permitir al usuario ingresar varias URL a la vez, podríamos hacer que ingresen las URL separadas por comas (o cualquier otro separador que elijas) y luego dividirlas para obtener una lista de URL. Después, podríamos iterar a través de esta lista para aplicar el comando a cada URL.Asi lo tengo =(
yo decia asi:
agregar opcion 4 .- pegar varias url
y luego que te salga pega las url y luego ya la opción de donde guardar y el comando no se si sea el mismo o agregar uno para cada url
import os
def download_tiktok():
print("Tiktok")
print("Introduce Url:")
print(" 1.- Una URL")
print(" 2.- Varias URL")
option = input("Escoge opción: ")
if option == '1':
urls = [input("Pega la Url: ")]
elif option == '2':
input_urls = input("Pega las Urls (separadas por comas): ")
urls = input_urls.split(',')
print("\nEscoge la carpeta de descarga:")
print(" 1.- Descargas")
print(" 2.- Tiktok")
print(" 3.- Manual (Introduce la ruta)")
option = input("Escoge opción: ")
if option == '1':
download_dir = "Descargas"
elif option == '2':
download_dir = "Tiktok"
elif option == '3':
download_dir = input("Introduce la ruta: ")
else:
print("Opción no reconocida, usando Descargas por defecto")
download_dir = "Descargas"
for url in urls:
command = f'yt-dlp -f best[format_id*=h264_540p] -o "{download_dir}/%(upload_date)s.%(id)s.%(ext)s" "{url.strip()}"'
os.system(command)
download_tiktok()
Si funciono 🫣Entendido, te muestro cómo podrías agregar la funcionalidad para manejar varias URL. Para permitir al usuario ingresar varias URL a la vez, podríamos hacer que ingresen las URL separadas por comas (o cualquier otro separador que elijas) y luego dividirlas para obtener una lista de URL. Después, podríamos iterar a través de esta lista para aplicar el comando a cada URL.
Aquí tienes un ejemplo:
Reemplaza "Descargas" y "Tiktok" con las rutas reales a tus directorios de descarga. Para "Manual", debes ingresar la ruta completa al directorio donde quieres que se descargue el video.Python:import os def download_tiktok(): print("Tiktok") print("Introduce Url:") print(" 1.- Una URL") print(" 2.- Varias URL") option = input("Escoge opción: ") if option == '1': urls = [input("Pega la Url: ")] elif option == '2': input_urls = input("Pega las Urls (separadas por comas): ") urls = input_urls.split(',') print("\nEscoge la carpeta de descarga:") print(" 1.- Descargas") print(" 2.- Tiktok") print(" 3.- Manual (Introduce la ruta)") option = input("Escoge opción: ") if option == '1': download_dir = "Descargas" elif option == '2': download_dir = "Tiktok" elif option == '3': download_dir = input("Introduce la ruta: ") else: print("Opción no reconocida, usando Descargas por defecto") download_dir = "Descargas" for url in urls: command = f'yt-dlp -f best[format_id*=h264_540p] -o "{download_dir}/%(upload_date)s.%(id)s.%(ext)s" "{url.strip()}"' os.system(command) download_tiktok()
¡Genial que funcionó! Respecto a tus preguntas:Si funciono 🫣
En lugar de separar/pegar las urls por comas ¿no se puede una por linea o al darle enter para la siguiente linea se ejecutara el sistema "bloque"
como se puede pone la ruta a la "papelera"?
print("Pega las URLs (escribe STOP cuando termines): ")
urls = []
while True:
url = input()
if url.upper() == 'STOP':
break
urls.append(url)
from send2trash import send2trash
# ... código previo ...
for url in urls:
filename = f"{download_dir}/%(upload_date)s.%(id)s.%(ext)s" # la ruta al archivo
command = f'yt-dlp -f best[format_id*=h264_540p] -o "{filename}" "{url.strip()}"'
os.system(command)
send2trash(filename) # mueve el archivo descargado a la papelera
pip install Send2Trash
import os
def download_tiktok():
print("Tiktok")
print("Introduce Url:")
print(" 1.- Una URL")
print(" 2.- Varias URL")
option = input("Escoge opción: ")
if option == '1':
urls = [input("Pega la Url: ")]
elif option == '2':
input_urls = input("Pega las Urls (separadas por comas): ")
urls = input_urls.split(',')
print("\nEscoge la carpeta de descarga:")
print(" 1.- Descargas")
print(" 2.- Tiktok")
print(" 3.- Manual (Introduce la ruta)")
option = input("Escoge opción: ")
if option == '1':
download_dir = "Descargas"
elif option == '2':
download_dir = "Tiktok"
elif option == '3':
download_dir = input("Introduce la ruta: ")
else:
print("Opción no reconocida, usando Descargas por defecto")
download_dir = "Descargas"
for url in urls:
command = f'yt-dlp -f best[format_id*=h264_540p] -o "{download_dir}/%(upload_date)s.%(id)s.%(ext)s" "{url.strip()}"'
os.system(command)
download_tiktok()
Podrías reemplazar la secciónEn el siguiente codigo
Insertar CODE, HTML o PHP:import os def download_tiktok(): print("Tiktok") print("Introduce Url:") print(" 1.- Una URL") print(" 2.- Varias URL") option = input("Escoge opción: ") if option == '1': urls = [input("Pega la Url: ")] elif option == '2': input_urls = input("Pega las Urls (separadas por comas): ") urls = input_urls.split(',') print("\nEscoge la carpeta de descarga:") print(" 1.- Descargas") print(" 2.- Tiktok") print(" 3.- Manual (Introduce la ruta)") option = input("Escoge opción: ") if option == '1': download_dir = "Descargas" elif option == '2': download_dir = "Tiktok" elif option == '3': download_dir = input("Introduce la ruta: ") else: print("Opción no reconocida, usando Descargas por defecto") download_dir = "Descargas" for url in urls: command = f'yt-dlp -f best[format_id*=h264_540p] -o "{download_dir}/%(upload_date)s.%(id)s.%(ext)s" "{url.strip()}"' os.system(command) download_tiktok()
¿cómo le agrego el siguiente en: elif option == '2': ?
print("Pega las URLs (escribe STOP cuando termines): ")
urls = []
while True:
url = input()
if url.upper() == 'STOP':
break
urls.append(url)
elif option == '2':
de tu código con el bloque de código que proporcionaste. Aquí está el cambio:import os
def download_tiktok():
print("Tiktok")
print("Introduce Url:")
print(" 1.- Una URL")
print(" 2.- Varias URL")
option = input("Escoge opción: ")
urls = []
if option == '1':
urls = [input("Pega la Url: ")]
elif option == '2':
print("Pega las URLs (escribe STOP cuando termines): ")
while True:
url = input()
if url.upper() == 'STOP':
break
urls.append(url)
print("\nEscoge la carpeta de descarga:")
print(" 1.- Descargas")
print(" 2.- Tiktok")
print(" 3.- Manual (Introduce la ruta)")
option = input("Escoge opción: ")
if option == '1':
download_dir = "Descargas"
elif option == '2':
download_dir = "Tiktok"
elif option == '3':
download_dir = input("Introduce la ruta: ")
else:
print("Opción no reconocida, usando Descargas por defecto")
download_dir = "Descargas"
for url in urls:
command = f'yt-dlp -f best[format_id*=h264_540p] -o "{download_dir}/%(upload_date)s.%(id)s.%(ext)s" "{url.strip()}"'
os.system(command)
download_tiktok()
¿cómo le pongo antes o después de: print("Tiktok") que aparesca en la consola si esta yt-dlp.exe asi?Podrías reemplazar la secciónelif option == '2':
de tu código con el bloque de código que proporcionaste. Aquí está el cambio:
Esta versión del código permitirá al usuario ingresar URLs una por una, hasta que escriban "STOP".Python:import os def download_tiktok(): print("Tiktok") print("Introduce Url:") print(" 1.- Una URL") print(" 2.- Varias URL") option = input("Escoge opción: ") urls = [] if option == '1': urls = [input("Pega la Url: ")] elif option == '2': print("Pega las URLs (escribe STOP cuando termines): ") while True: url = input() if url.upper() == 'STOP': break urls.append(url) print("\nEscoge la carpeta de descarga:") print(" 1.- Descargas") print(" 2.- Tiktok") print(" 3.- Manual (Introduce la ruta)") option = input("Escoge opción: ") if option == '1': download_dir = "Descargas" elif option == '2': download_dir = "Tiktok" elif option == '3': download_dir = input("Introduce la ruta: ") else: print("Opción no reconocida, usando Descargas por defecto") download_dir = "Descargas" for url in urls: command = f'yt-dlp -f best[format_id*=h264_540p] -o "{download_dir}/%(upload_date)s.%(id)s.%(ext)s" "{url.strip()}"' os.system(command) download_tiktok()
Primero, se necesita un método para verificar si 'yt-dlp' está instalado. Podemos hacerlo intentando ejecutar el comando y comprobando si produce un error. Si 'yt-dlp' no está instalado, el comando debería fallar y producir un error, y podemos capturar ese error para saber que 'yt-dlp' no está presente. Aquí está la modificación del código:¿cómo le pongo antes o después de: print("Tiktok") que aparesca en la consola si esta yt-dlp.exe asi?
Tiktok
yt-dlp ok
o
Tiktok
yt-dlp no instalado
import os
import subprocess
def verificar_ytdlp():
try:
subprocess.check_output(['yt-dlp', '--version'])
return True
except Exception:
return False
def download_tiktok():
print("Tiktok")
if verificar_ytdlp():
print("yt-dlp ok")
else:
print("yt-dlp no instalado")
# Resto del codigo...
download_tiktok()
La líneaque diferencia hay si le pongo o no lo siguiente?
def download_tiktok():
...
download_tiktok()
download_tiktok()
es donde realmente se llama y se ejecuta la función que has definido anteriormente con def download_tiktok():
. download_tiktok()
, tu script definirá la función, pero luego terminará sin hacer nada, ya que no ha llamado a ninguna función para ejecutar. download_tiktok()
, tu script definirá la función y luego la llamará, haciendo que se ejecute todo el código que hayas incluido dentro de esa función. download_tiktok()
se ejecute cuando se ejecute tu script, debes asegurarte de incluir la línea download_tiktok()
.Pero en codigo pythonLa líneadownload_tiktok()
es donde realmente se llama y se ejecuta la función que has definido anteriormente condef download_tiktok():
.
Si no incluyes la líneadownload_tiktok()
, tu script definirá la función, pero luego terminará sin hacer nada, ya que no ha llamado a ninguna función para ejecutar.
Por otro lado, si incluyes la líneadownload_tiktok()
, tu script definirá la función y luego la llamará, haciendo que se ejecute todo el código que hayas incluido dentro de esa función.
En resumen, si quieres que tu funcióndownload_tiktok()
se ejecute cuando se ejecute tu script, debes asegurarte de incluir la líneadownload_tiktok()
.
En Python, defines funciones utilizando la palabra clave "def", seguido del nombre de la función con paréntesis y dos puntos. La función termina en la siguiente línea sin indentar. Por ejemplo:Pero en codigo python
def mi_funcion():
print("¡Hola mundo!")
mi_funcion()
Para descargar un video de YouTube en la máxima resolución y la mejor calidad de video/audio utilizando¿Cómo bajo con yt-dlp un video de youtube en .mp4, maxima resolución y mejor calidad de video/audio?
yt-dlp
, puedes usar la siguiente línea de comando:yt-dlp -f 'bestvideo+bestaudio' --merge-output-format mp4 [URL]
si uso yt-dlp - F<url youtube>Para descargar un video de YouTube en la máxima resolución y la mejor calidad de video/audio utilizandoyt-dlp
, puedes usar la siguiente línea de comando:
Donde es la dirección del video que quieres descargar. Debemos explicar qué hace cada sección de este comando: -Python:yt-dlp -f 'bestvideo+bestaudio' --merge-output-format mp4 [URL]
-f 'bestvideo+bestaudio'
: esto le indica ayt-dlp
que descargue la mejor calidad de video y audio disponibles. Estas pistas se descargarán por separado. ---merge-output-format mp4
: esto le indica ayt-dlp
que después de descargar la pista de audio y la de video, debe combinarlas en un único archivo.mp4
. Recuerda que necesitas tenerffmpeg
oavconv
instalado en tu sistema para poder ejecutar este comando, ya queyt-dlp
los necesita para realizar la mezcla de video y audio.
"yt-dlp" selecciona el formato de descarga basándose en varios criterios. Elsi uso yt-dlp - F<url youtube>
me da la lista de resoluciones de <url youtube>
270 mp4 1920x1080 24 │ ~111.28MiB 5559k m3u8
137 mp4 1920x1080 24 │ 83.78MiB 4300k https
614 mp4 1920x1080 24 │ ~ 66.23MiB 3308k m3u8
248 webm 1920x1080 24 │ 36.66MiB 1881k https
si pongo -f bestvideo*+bestaudio/best
me baja el 248 webm con 1881k
si pongo -S br
me baja el 270 mp4 con 5559k
¿Cómo explicas eso?
-f bestvideo*+bestaudio/best
y -S br
son dos enfoques de selección de formato.-f bestvideo*+bestaudio/best
, "yt-dlp" está intentando elegir la mejor calidad de video y audio disponibles. Sin embargo, considera la 'calidad' basado no sólo en la resolución y el bitrate, sino también en el tamaño del archivo. Por tanto, puede seleccionar un archivo de menor resolución si el tamaño es significativamente más pequeño, considerándolo más 'eficiente' en términos de calidad frente a tamaño.-S br
, estás diciendo explícitamente a "yt-dlp" que priorice el bitrate por encima de otras consideraciones. Por eso descarga la versión mp4 de 5559k, que tiene el bitrate más alto.bestvideo
.newajax28.js:812 Uncaught TypeError: Cannot set properties of undefined (setting 'title')"yt-dlp" selecciona el formato de descarga basándose en varios criterios. El-f bestvideo*+bestaudio/best
y-S br
son dos enfoques de selección de formato.
- Cuando usas-f bestvideo*+bestaudio/best
, "yt-dlp" está intentando elegir la mejor calidad de video y audio disponibles. Sin embargo, considera la 'calidad' basado no sólo en la resolución y el bitrate, sino también en el tamaño del archivo. Por tanto, puede seleccionar un archivo de menor resolución si el tamaño es significativamente más pequeño, considerándolo más 'eficiente' en términos de calidad frente a tamaño.
- Por otro lado, cuando usas-S br
, estás diciendo explícitamente a "yt-dlp" que priorice el bitrate por encima de otras consideraciones. Por eso descarga la versión mp4 de 5559k, que tiene el bitrate más alto.
Es importante tener en cuenta que diferentes formatos de archivo (como mp4 y webm) y diferentes codecs pueden producir diferentes calidades de video a igual resolución y bitrate. Incluso a igual resolución y tamaño de archivo, un formato puede verse mejor que otro debido a la forma en que el codec comprime y descomprime el video. Esto es posiblemente lo que el algoritmo de "yt-dlp" tiene en cuenta al priorizar los formatos webm por encima de mp4 en la opciónbestvideo
.
Este error indica que estás intentando asignar una propiedad 'title' a una variable o un objeto que aún no ha sido definido (o que es 'undefined') en tu código JavaScript.newajax28.js:812 Uncaught TypeError: Cannot set properties of undefined (setting 'title')
at newajax28.js:812:56
que significa este error?
Failed to load resource: the server responded with a status of 500 ()Este error indica que estás intentando asignar una propiedad 'title' a una variable o un objeto que aún no ha sido definido (o que es 'undefined') en tu código JavaScript.
El error se sitúa en el archivo 'newajax28.js' en la línea 812. En esa línea, estás intentando establecer la propiedad 'title', pero la entidad a la que estás tratando de asignar esa propiedad no existe.
Generalmente, este error se produce cuando se hace referencia a una propiedad de un objeto antes de que el objeto haya sido inicializado, o cuando se hace referencia a una variable que no ha sido declarada. Te recomendaría revisar tu código en esa línea y asegurarte de que la entidad a la que estás asignando la propiedad 'title' ha sido definida e inicializada correctamente.
Por supuesto. Este error indica que hubo un problema en el servidor (error 500) al intentar cargar un recurso. Es un error bastante genérico por lado del servidor y podría ser causado por varias razones: desde problemas de codificación hasta problemas del servidor en sí mismo, por ejemplo, que el servidor esté sobrecargado o haya sufrido una falla.Failed to load resource: the server responded with a status of 500 ()
s?upload-video:281 Error al cargar el archivo ResumableFile {opts: {…}, _prevProgress: 0.8956995179411865, resumableObj: Resumable, file: File, getOpt: ƒ, …}
me ayudas con este error porfa
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?