Je ne crois pas que youtube-dl
seul fera ce que vous voulez. Cependant, vous pouvez le combiner avec un utilitaire de ligne de commande tel que ffmpeg.
Commencez par acquérir l'URL actuelle à l'aide de youtube-dl:
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
Copiez le résultat de la commande et collez-le dans le -i
paramètre de la commande suivante:
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4
Le -ss
paramètre dans cette position indique de supprimer toutes les entrées jusqu'à 15 secondes dans la vidéo. L' -t
option indique de capturer pendant 10 secondes. Le reste de la commande lui dit de stocker en tant que mp4.
ffmpeg est un outil populaire et devrait figurer dans n’importe quel référentiel de système d’exploitation / gestionnaires de paquetages populaires.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ffmpeg
ne téléchargera que la partie que vous spécifiez.la source
-map 0:v -map 1:a -c:v libx264 -c:a aac
qui pourraient améliorer la qualité. J'aime aussi ajouteryoutube-dl -f bestvideo+bestaudio
pour être sûr d'obtenir la version de la plus haute qualité.Ajout à la réponse de Johnnie:
Utilisez
youtube-dl -g "URL"
pour obtenir les flux vidéo et audio.Maintenant, utilisez:
Vous devrez utiliser l'
-ss
option pour chaque flux. Je recommande également de le faire environ 30 secondes plus tôt, puis d’en utiliser un autre-ss 30
pour éviter de perdre des images clés. Voici un exemple réel utilisant l'une de mes vidéos youtube.Vidéo
Sortie:
Je voulais couper de 43:00 à 50:10 alors je vais faire
-ss 42:30
(en me laissant quelques secondes pour saisir une bonne image clé) sur les deux entrées puis faire un-ss 30
après les entrées pour commencer à 43:00.Je vais ensuite utiliser
map
pour mapper la vidéo0:v
et l'audio1:a
(0 correspond à la première entrée, qui est la vidéo et 1 à la deuxième entrée, qui est l'audio), puis je choisis mes options d'encodage.la source
-i
drapeau de ffmpeg pouvait prendre les URL. soigné--postprocessor-args
directe dans youtube-dl?Cette demande de fonctionnalité n'est pas encore implémentée dans youtube-dl. Voir le numéro 622 et de nombreux doublons sur github.
la source
youtube-dl
prend en charge le passage d'arguments au post-processeur sous-jacent (testé avec la version 2017.08.27.1):youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...
Cela revient fondamentalement à faire le post-traitement avec
ffmpeg
vous-même après le téléchargement du fichier.la source
unable to obtain file audio codec with ffprobe
erreur. Pouvez-vous m'aider s'il vous plaît avec cela. J'utilise CentOS 7-x
drapeau télécharge uniquement l'audio. Omettez-le de la commande si vous voulez à la fois l'audio et la vidéo. :)Vous pouvez télécharger depuis le début jusqu'à un point sans télécharger le tout et le modifier. C'est la moitié de ce que cette question demande:
mp4
-F
pour voir les formats disponibles, et choisissez unmp4
qui a les deux. par exemple-f18
ou-f22
sont généralement là.Oui. C'est un bidouillage .
Question supplémentaire: si vous souhaitez des formats audio et vidéo distincts, pouvez-vous télécharger une partie de chacun séparément (en utilisant la méthode
^c
décrite ici), puis les fusionner manuellement? Je ne pense pas que cela fonctionnera pour certains formats.la source
Cela ne répond pas complètement à la question de OP, mais il existe un moyen de télécharger un flux du début à une durée spécifique sans avoir à télécharger le flux complet. Étant donné que YouTube fournit un support de résumé, nous pouvons demander un contenu partiel en utilisant l'en-
Range
tête.Nous allons d'abord chercher les URL de flux:
Cela devrait générer deux URL (chacune pour les flux vidéo et audio).
Envoyez maintenant une requête à la première URL (qui renvoie au flux vidéo) pour extraire la longueur totale du contenu de ce flux:
Désormais, nous divisons cette longueur totale du contenu par le nombre total de secondes de la vidéo (la vidéo de YouTube a une durée de 4 minutes et 7 secondes, soit 247 secondes.) Pour obtenir approximativement la longueur du contenu de 1 seconde:
64380504 / 247 ≈ 260650
Nous multiplions cette valeur par (nombre de secondes à récupérer depuis le début + 1)
(Nous en ajoutons un pour également prendre en compte approximativement l'espace supplémentaire pris par les métadonnées placées au début du flux)
Par exemple, pour récupérer environ les 10 premières secondes, vous devrez récupérer les premiers
260650 * 11 = 2867150
octets. Nous faisons donc une requête avec l'en-Range
tête:Cela ne devrait télécharger que les 10 premières secondes. Le fichier téléchargé devrait pouvoir être lu, mais il vaut mieux laisser FFmpeg réparer les métadonnées incorrectes:
Nous pouvons également télécharger uniquement la partie initiale de l'audio (2ème URL) d'une manière similaire (la longueur du contenu serait différente mais le nombre total de secondes resterait identique).
Le téléchargement de toute partie centrale de la vidéo devrait également être possible de cette manière, mais cela risque d’être beaucoup plus compliqué, car YouTube place les métadonnées au début du flux (dans les premiers octets) et, sans que cela soit présent dans les médias téléchargés, stream ne jouera pas du tout.
EDIT: Cela ne fonctionnera que sur des sites Web avec support de CV, par exemple YouTube. Cela ne fonctionnera pas pour d'autres sites.
la source
Utilisez le paramètre --postprocessor-args pour transmettre la sortie audio / vidéo à ffmpeg à modifier (le processeur). Ffmpeg doit donc être installé.
--postprocessor-args prend 3 arguments et valeurs (par exemple, c'est plus, consultez la page de manuel de ffmpeg):
Exemples:
PS: youtube-dl téléchargera l'intégralité du support avant de le traiter et le supprimera ensuite.
la source
J'ai fait un script implémentant @godofgrunts répondre ici
Je l 'ai également téléchargée dans les extraits de Gitlab .
la source