No creo que youtube-dlsolo hagas lo que quieras. Sin embargo, puede combinarlo con una utilidad de línea de comandos como ffmpeg.
Primero adquiera la URL real usando youtube-dl:
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
Copie el resultado del comando y péguelo como parte del -iparámetro del siguiente comando:
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4
El -ssparámetro en esta posición indica que descarta todas las entradas hasta 15 segundos en el video. La -topción indica capturar durante 10 segundos. El resto del comando le dice que se almacene como un mp4.
ffmpeg es una herramienta popular y debería estar en cualquiera de los repositorios / gestores de paquetes populares del sistema operativo.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4ffmpegrealidad solo descargará la parte que especifique.fuente
-map 0:v -map 1:a -c:v libx264 -c:a aacque podrían mejorar la calidad. También me gusta agregaryoutube-dl -f bestvideo+bestaudiopara asegurarme de que estoy obteniendo la versión de mayor calidad.Agregando a la respuesta de Johnnie:
Úselo
youtube-dl -g "URL"para obtener las transmisiones de video y audio.Ahora usa:
Deberá usar la
-ssopción para cada transmisión. También recomiendo hacerlo unos 30 segundos antes y luego usar otro-ss 30para evitar perder fotogramas clave. Aquí hay un ejemplo real usando uno de mis videos de youtube.Vídeo
Salida:
Quería cortar de 43:00 a 50:10, así que voy a hacer
-ss 42:30(dándome unos segundos para capturar un buen fotograma clave) en ambas entradas y luego hacer una entrada-ss 30posterior a las 43:00.Luego usaré
mappara asignar el video0:vy el audio1:a(0 significa la primera entrada, que es el video y 1 significa la segunda entrada, que es el audio) y luego elegir mis opciones de codificación.fuente
-ibandera de ffmpeg podría tomar URL. aseado--postprocessor-argsdirectamente en youtube-dl?Esta solicitud de función aún no está implementada en youtube-dl. Vea el número 622 y muchos duplicados en github.
fuente
youtube-dladmite pasar argumentos al postprocesador subyacente (probado con la versión 2017.08.27.1):youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...Esto es básicamente lo mismo que hacer el postprocesamiento
ffmpegcontigo mismo después de descargar el archivo primero.fuente
unable to obtain file audio codec with ffprobeerror ¿Me pueden ayudar con eso? Estoy usando CentOS 7-xbandera solo descarga el audio. Omítalo desde el comando si desea audio y video. :)Puede descargar desde el principio hasta cierto punto sin descargar todo y editarlo. Esa es la mitad de lo que esta pregunta pregunta:
mp4-Fpara ver los formatos disponibles y elija unomp4que tenga ambos. por ejemplo,-f18o-f22generalmente están ahí.Si. Es un hack .
Pregunta adicional: si desea los formatos de video y audio por separado, ¿podría descargar parte de cada uno por separado (usando
^ccomo aquí) y luego combinarlos manualmente? No creo que funcione para algunos formatos.fuente
Esto no responde completamente la pregunta de OP, pero hay una manera de descargar una transmisión desde el principio hasta una duración específica sin tener que descargar la transmisión completa. Dado que YouTube brinda soporte para currículums, podríamos solicitar contenido parcial usando el
Rangeencabezado.Primero buscamos las URL de transmisión:
Esto debería generar dos URL (cada una para secuencias de video y audio).
Ahora envíe una solicitud de cabecera a la primera URL (que enlaza con la transmisión de video) para obtener la longitud total del contenido de esta transmisión:
Ahora, dividimos esta duración total del contenido por el total de segundos en el video (el video de YouTube tiene una duración de 4 minutos y 7 segundos, que es de 247 segundos) para obtener aproximadamente la duración del contenido de 1 segundo:
64380504 / 247 ≈ 260650Multiplicamos este valor con (número de segundos que queremos obtener desde el principio + 1)
(agregamos uno para tener en cuenta aproximadamente el espacio extra ocupado por los metadatos que se coloca al comienzo de la transmisión)
Por ejemplo, para obtener aproximadamente los primeros 10 segundos, deberá recuperar los primeros
260650 * 11 = 2867150bytes, por lo que hacemos una solicitud con elRangeencabezado:Esto solo debería descargar los primeros 10 segundos. El archivo descargado debería poder reproducirse, pero es mejor dejar que FFmpeg repare los metadatos incorrectos:
También podemos descargar solo la parte inicial del audio (2nd-URL) de manera similar (la duración del contenido sería diferente, pero el total de segundos sería el mismo).
La descarga de cualquier parte intermedia del video también debería ser posible de esta manera, pero probablemente sea mucho más difícil porque YouTube coloca los metadatos al comienzo de la transmisión (en los primeros bytes) y sin que esté presente en los medios descargados, el stream no se reproducirá en absoluto.
EDITAR: Esto solo funcionará en sitios web con soporte para currículums, por ejemplo, YouTube. No funcionará para otros sitios web.
fuente
Use el parámetro --postprocessor-args para pasar la salida de audio / video a ffmpeg a editar (el procesador), por lo que necesita instalar ffmpeg.
--postprocessor-args toma 3 argumentos y valores (por ejemplo, hay más, consulte la página de manual de ffmpeg):
Ejemplos:
PD: youtube-dl descargará todo el contenido multimedia antes de procesarlo y lo eliminará después.
fuente