No creo que youtube-dl
solo 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 -i
pará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 -ss
parámetro en esta posición indica que descarta todas las entradas hasta 15 segundos en el video. La -t
opció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.mp4
ffmpeg
realidad solo descargará la parte que especifique.fuente
-map 0:v -map 1:a -c:v libx264 -c:a aac
que podrían mejorar la calidad. También me gusta agregaryoutube-dl -f bestvideo+bestaudio
para 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
-ss
opción para cada transmisión. También recomiendo hacerlo unos 30 segundos antes y luego usar otro-ss 30
para 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 30
posterior a las 43:00.Luego usaré
map
para asignar el video0:v
y 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
-i
bandera de ffmpeg podría tomar URL. aseado--postprocessor-args
directamente 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-dl
admite 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
ffmpeg
contigo mismo después de descargar el archivo primero.fuente
unable to obtain file audio codec with ffprobe
error ¿Me pueden ayudar con eso? Estoy usando CentOS 7-x
bandera 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
-F
para ver los formatos disponibles y elija unomp4
que tenga ambos. por ejemplo,-f18
o-f22
generalmente 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
^c
como 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
Range
encabezado.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 ≈ 260650
Multiplicamos 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 = 2867150
bytes, por lo que hacemos una solicitud con elRange
encabezado: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