web-dev-qa-db-fra.com

Télécharger tout le contenu d'une vidéo YouTube en utilisant youtube-dl

Je souhaite tout télécharger (sous-titres, cartes, tags, annotations, vignettes, etc. (et évidemment la vidéo avec audio)) à partir d'une vidéo YouTube (par exemple, celle-ci ).

J'utilise youtube-dl et, avec l'énorme quantité de commutateurs à utiliser, je n'arrive pas à trouver quoi que ce soit pour répondre à mes besoins. Je souhaite également télécharger la vidéo/audio dans la meilleure qualité possible, sans perte de qualité. Même si ce n'est pas YouTube, je souhaitais également télécharger certains des cours udemy que j'ai achetés pour pouvoir les regarder pendant mon long voyage sur la route.

J'ai installé ffmpeg et j'ai entendu dire que vous en aviez besoin pour les téléchargements sans perte de YouTube, mais je ne sais pas comment le lier avec youtube-dl.

C'est la première fois que j'utilise youtube-dl. Toute aide est donc la bienvenue.

14
leetbacoon

Les options pertinentes dont vous avez besoin:

# Filesystem
--write-annotations
--write-description
--write-info-json

# Thumbnail images
--write-all-thumbnails

# Video format
--format bestvideo+bestaudio/best
--merge-output-format mkv
--youtube-skip-dash-manifest

# Subtitle
--all-subs
--write-auto-sub
--write-sub

# Post-processing
--add-metadata
--embed-subs

Copiez-le dans votre fichier de configuration (/etc/youtube-dl.conf ou ~/.config/youtube-dl/config).

En utilisant cette configuration, j'ai téléchargé cette vidéo et youtube-dl a écrit les fichiers suivants:

$ ls
The Problem with Time & Timezones - Computerphile.annotations.xml
The Problem with Time & Timezones - Computerphile.description
The Problem with Time & Timezones - Computerphile.info.json
The Problem with Time & Timezones - Computerphile.jpg
The Problem with Time & Timezones - Computerphile.mkv

Je ne peux pas poster la sortie de mediainfo car elle dépasse la limite de caractères, mais vous pouvez la voir dans github .


Je souhaite également télécharger la vidéo/l'audio dans la meilleure qualité possible, sans perte de qualité.

youtube-dl télécharge les vidéos avec la meilleure qualité possible par défaut, mais vous pouvez forcer ce comportement à l'aide de --format bestvideo+bestaudio/best.


Même si ce n'est pas YouTube, je souhaitais également télécharger certains de mes cours d'udemy que j'ai achetés pour pouvoir les regarder pendant mon long voyage sur la route.

Veuillez lire l'article Puis-je télécharger un cours sur mon ordinateur? :

Par défaut, les cours complets ne sont pas téléchargeables à partir d'un ordinateur. Nous faisons cela par souci de piratage.

Veuillez noter que vous pouvez toujours enregistrer les cours pour les consulter hors ligne sur le application mobile Udemy . Pour plus d'informations sur le téléchargement de conférences vidéo sur votre appareil mobile iOS, veuillez cliquer sur ici . Pour savoir comment télécharger des vidéos pour les visionner hors ligne sur un périphérique Android, cliquez sur ici . .


J'ai installé ffmpeg et j'ai entendu dire que vous en aviez besoin pour les téléchargements sans perte de YouTube, mais je ne savais pas comment le lier avec youtube-dl.

youtube-dl utilise avconv par défaut, mais --prefer-ffmpeg vous a laissé utiliser ffmpeg à la place. Quoi qu'il en soit, cette option n'est pas nécessaire pour " téléchargements sans perte ". Dans l'exemple que j'ai fourni, youtube-dl n'utilisait que ffmpeg pour fusionner tous les formats téléchargés dans un seul fichier mkv.

13
nxnev

Pour télécharger simplement la vidéo, vous pouvez utiliser ceci:

youtube-dl --all-subs "https://www.youtube.com/watch?v=KYBok-XGsKM"

Pour sélectionner la qualité vidéo, vous devez d’abord utiliser l’option -F pour répertorier les formats disponibles.

youtube-dl -F "https://www.youtube.com/watch?v=KYBok-XGsKM"

Et voici le résultat de votre vidéo:

[youtube] KYBok-XGsKM: Downloading webpage
[youtube] KYBok-XGsKM: Downloading video info webpage
[youtube] KYBok-XGsKM: Extracting video information
WARNING: unable to extract uploader nickname
[info] Available formats for KYBok-XGsKM:
format code  extension  resolution note
249          webm       audio only DASH audio   52k , opus @ 50k,  4.19MiB
250          webm       audio only DASH audio   75k , opus @ 70k, 5.42MiB
140          m4a        audio only DASH audio  129k , m4a_dash container, mp4a.40.2@128k, 10.59MiB
171          webm       audio only DASH audio  131k , vorbis@128k, 7.66MiB
251          webm       audio only DASH audio  135k , opus @160k, 9.58MiB
278          webm       256x144    144p   98k , webm container, vp9, 30fps, video only, 6.59MiB
160          mp4        256x144    144p  114k , avc1.4d400c, 15fps, video only, 9.04MiB
242          webm       426x240    240p  205k , vp9, 30fps, video only, 11.47MiB
133          mp4        426x240    240p  265k , avc1.4d4015, 30fps, video only, 20.11MiB
243          webm       640x360    360p  362k , vp9, 30fps, video only, 21.93MiB
134          mp4        640x360    360p  602k , avc1.4d401e, 30fps, video only, 20.42MiB
244          webm       854x480    480p  662k , vp9, 30fps, video only, 37.82MiB
135          mp4        854x480    480p 1020k , avc1.4d401f, 30fps, video only, 42.62MiB
247          webm       1280x720   720p 1353k , vp9, 30fps, video only, 81.53MiB
136          mp4        1280x720   720p 2013k , avc1.4d401f, 30fps, video only, 84.69MiB
137          mp4        1920x1080  1080p 2438k , avc1.640028, 30fps, video only, 157.71MiB
248          webm       1920x1080  1080p 2593k , vp9, 30fps, video only, 162.48MiB
264          mp4        2560x1440  1440p 6973k , avc1.640032, 30fps, video only, 459.58MiB
271          webm       2560x1440  1440p 7523k , vp9, 30fps, video only, 485.66MiB
313          webm       3840x2160  2160p 19991k , vp9, 30fps, video only, 1.34GiB
36           3gp        320x?      small , mp4v.20.3,  mp4a.40.2
17           3gp        176x144    small , mp4v.20.3,  mp4a.40.2@ 24k
43           webm       640x360    medium , vp8.0,  vorbis@128k
18           mp4        640x360    medium , avc1.42001E,  mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F,  mp4a.40.2@192k (best)

Voici quelques options utiles pour les sous-titres:

   --write-sub
          Write subtitle file

   --write-auto-sub
          Write automatically generated subtitle file (YouTube only)

   --all-subs
          Download all the available subtitles of the video

   --list-subs
          List all available subtitles for the video

Et pour les vignettes:

   --write-thumbnail
          Write thumbnail image to disk

   --write-all-thumbnails
          Write all thumbnail image formats to disk

   --list-thumbnails
          Simulate and list all available thumbnail formats

Vous pouvez également trouver plus d'informations sur la qualité de la vidéo ici

6
Mojtaba Zali

@leetbacoon voir la réponse aux commentaires tout en bas. (faible reps encore sry)

Remarque: Je vais utiliser les noms de commutateur les plus longs pour éviter toute confusion. Beaucoup de commutateurs utilisés ont des versions plus courtes. Voir Docs: Options .

Remarque: - pour plus de commodité visuelle, \ est utilisé pour afficher les commutateurs séparément; tout \ peut être omis; Si vous utilisez \, assurez-vous qu'il n'y a pas d'espace après \.


Synopsis: Commande ytdl permettant de télécharger un seul fichier vidéo présentant la meilleure qualité vidéo et audio disponible. Enregistre la vidéo dans son propre répertoire (spécifié par vous). Télécharge toutes les métadonnées disponibles, écrit chacune dans les formats de fichiers respectifs et enregistre dans le même répertoire. Ajoute des métadonnées vidéo au fichier de sortie vidéo.

Remplacez-le par votre propre:

  • remplacez /archive/videos/TED_Archive/ dans les commutateurs --download-archive et --output par un chemin de répertoire de votre choix.
  • exemple chemin de stockage/archive/vidéos
  • exemple de lien vidéo: https://www.youtube.com/watch?v=0bFs6ZiynS
  • exemple de répertoire de canaux/TED_Archive

====

youtube-dl \
--limit-rate '0.25M' \
--retries '3' \
--no-overwrites \
--call-home \
--write-info-json \
--write-description \
--write-thumbnail \
--all-subs \
--convert-subs 'srt' \
--write-annotations \
--add-metadata \
--embed-subs \
--download-archive '/archive/videos/TED_Archive/TED_Archive.ytdlarchive' \
--format 'bestvideo+bestaudio/best' \
--merge-output-format 'mkv' \
--output '/archive/videos/TED_Archive/%(upload_date)s_%(id)s/TED_Archive_%(upload_date)s_%(id)s_%(title)s.%(ext)s' \
'https://www.youtube.com/watch?v=0bFs6ZiynSU' ;

Remarque: Placez tous les arguments avec ' ' pour l'analyse de la sécurité.

Explication des commutateurs recommandés:

  • --limit-rate '0.25M' est utilisé pour limiter la vitesse de téléchargement maximale disponible de chaque instance de youtube-dl en B/s (octets par seconde).
    Arguments: tout entier positif avec un suffixe d'unité en majuscule.
    Suffixes unitaires: K pour kilo-octets; M pour Megabyte; Ne sait pas si Gigabyte est pris en charge.
    Ajout:
    1. éviter le blocage de la connexion Internet.
    2. très utile pour gérer les vitesses de téléchargement de plusieurs instances ytdl simultanées.
    Ommission:
    1. obstrue Internet; incapable de naviguer, retarder la lecture de la vidéo youtube.
    2. téléchargera la vidéo aussi vite que possible.
    Remarque: Vous pouvez exécuter plusieurs instances youtube-dl simultanément.

  • --retries '5' est utilisé pour réessayer automatiquement le téléchargement d'une vidéo en cas d'échec. Utile pour télécharger une liste de lecture ou un canal entier (qui est, en termes Youtube, également une liste de lecture (de ce canal spécifique)).
    Valeurs: Choisissez un nombre entier positif. La valeur par défaut est 10. Max est infinite (à entrer sous forme de chaîne littérale).

  • --continue
    Arguments: aucun
    Ajout:
    1. forcera la reprise du téléchargement de fichiers partiels
    Remarque: ytdl télécharge des vidéos en morceaux; les morceaux sont conservés si ytdl se termine inopinément pendant le téléchargement.
    Ommission:
    1. Par défaut, ytdl reprendra les téléchargements, si possible.

  • --no-overwrites
    Arguments: aucun
    Ajout: écrasera pas les fichiers de métadonnées existants avec mêmes noms.
    Ommission: écrasera les fichiers de métadonnées existants portant le même nom, mais pas le fichier vidéo.

    • --call-home utilisé pour contacter le serveur ytdl pour le débogage.

      "Si votre serveur a plusieurs adresses IP ou si vous suspectez de la censure, l'ajout de --call-home peut être une bonne idée pour obtenir davantage de diagnostics." - Docs: Bugs , récupéré en 20180408,

  • --write-info-json
    Arguments: aucun
    Format de sortie: json;
    Contenu de l'information: afficher le nombre de coups de coeur, aime, la date de téléchargement, l'information sur la qualité audio et vidéo, etc. (mais pas la description textuelle de la vidéo (posté) ci-dessous la vidéo par uploader (2018 youtube layout)))
    Ajout: écrit les métadonnées de la vidéo dans un fichier .info.json séparé. Enregistré dans le même dossier que le fichier vidéo.
    Ommission: n'affecte pas --add-metadata qui écrira toujours les métadonnées vidéo dans le fichier de sortie vidéo.

  • --write-description
    Arguments: aucun
    Format de sortie: texte brut;
    Ajout: écrit le texte posté par un utilisateur de la vidéo dans la section description d'une vidéo (sous la vidéo (2018 mise en page youtube)) dans un fichier Write .description séparé. Enregistré dans le même dossier que le fichier vidéo.

  • --write-thumbnail écrit la miniature de la résolution la plus haute disponible (appelée maxresdefault.jpg par youtube) dans le fichier .jpg. Renommé selon le modèle spécifié avec --output. Enregistré dans le même répertoire que le fichier vidéo.
    Arguments: aucun
    Format de sortie: uniquement JPEG;
    Remarque: Utilisez youtube-dl --list-thumbnails '<video_url>' pour rechercher les miniatures disponibles d'une vidéo spécifique (ne fonctionne pas sur les liens de liste de lecture); Ex .: youtube-dl --list-thumbnails 'https://www.youtube.com/watch?v=odwfHu6MDuU'

  • --write-annotations écrit les annotations vidéo dans le fichier .annotations.xml. Renommé selon le modèle spécifié avec --output. Enregistré dans le même répertoire que le fichier vidéo.
    Arguments: aucun
    Format de sortie: .xml;

  • --all-subs écrit tous les sous-titres disponibles créés sur mesure pour une vidéo dans leurs fichiers respectifs (par exemple: subtitles.en.vtt, subtitles.fr.vtt, subtitles.es.vtt)
    Arguments: aucun
    Format de sortie: Par défaut .vtt; peut spécifier d'autres formats avec --sub-format
    Messages d'erreur: S'il n'y a pas de sous-titres disponibles, un message AVERTISSEMENT sera imprimé sur la sortie standard - format: WARNING: video doesn't have subtitles

Commande utile:

Remarque: Utilisez youtube-dl --list-subs '<video_url>' pour rechercher les miniatures disponibles d'une vidéo spécifique (ne fonctionne pas sur les liens de playlist);
Ex .: youtube-dl --list-subs 'https://www.youtube.com/watch?v=odwfHu6MDuU'

  • --convert-subs 'srt'
    Arguments: Chaîne: extension de format ass, srt ou meilleure
    Format de sortie: Par défaut .vtt; ou selon spécification
    Ajout: écrit les sous-titres dans le format de fichier spécifié (ex: .srt). Enregistré dans le même dossier que le fichier vidéo.
    Ommission: les sous-titres seront écrits sous la forme .vtt
    Messages d'erreur: S'il n'y a pas de sous-titres disponibles, un message INFO sera imprimé sur la sortie standard - format: [ffmpeg] There aren't any subtitles to convert
    Remarque: La conversion sera exécutée comme une étape de post-traitement sur le fichier .vtt après le téléchargement. Si l'exécution de ytdl est interrompue de manière inattendue, certains fichiers de sous-titres risquent de ne pas être convertis (dans ce cas, exécutez à nouveau la commande).

  • --add-metadata
    Arguments: aucun
    Comportement: écrit les métadonnées dans un fichier de sortie vidéo.
    Remarque: ne nécessite pas de .info.json généré par --write-info-json

  • --embed-subs
    Arguments: aucun
    Comportement:
    1. écrit les sous-titres dans le fichier de sortie vidéo;
    2. uniquement pour les vidéos mp4, webm et mkv
    Messages d'erreur: S'il n'y a pas de sous-titres disponibles, un message INFO sera imprimé sur stdout - format: [ffmpeg] There aren't any subtitles to embed
    Remarque: ne nécessite pas un .vtt généré par --write-sub, --write-auto-sub ou --all-sub

  • --download-archive '<archive_path>/<channel_name>/<channel_name>.ytdlarchive'
    Comportement: est utilisé pour créer un fichier texte contenant des liens de vidéos précédemment téléchargées. Permet de sauter ces vidéos lors du téléchargement d'un canal entier. Non nécessaire lors du téléchargement de vidéos uniques uniquement.
    Arguments: Chaîne: composé du chemin d'accès à votre archive vidéo, répertoire nommé d'après le canal. Le nom de fichier est composé du nom du canal avec l'extension de fichier .ytdlarchive. (pourrait aussi être .txt; mais le format unique permet une différenciation facile)
    Format de sortie: texte brut; un ID vidéo par ligne
    Ajout:
    1. ytdl lit ce fichier, ignore et ignore toutes les vidéos répertoriées avec leur ID vidéo, même si elles ne sont pas encore téléchargées.
    2. ajoute automatiquement le videoID de la dernière vidéo téléchargée à ce fichier
    Ommission: s'il existe un fichier vidéo et des fichiers de métadonnées, ytdl les téléchargera à nouveau.

  • --format ''
    Arguments: Chaîne recommandée: bestvideo+bestaudio/best pour assurer la meilleure combinaison de qualité vidéo et audio.
    Ajout: contrôle total de la qualité vidéo et de la qualité audio et de leurs combinaisons, ainsi que des qualités de repli
    Ommission: Par défaut youtube-dl will guess it for you by default - Docs
    Remarque: Voir Docs: exemples de sélection de format

  • --merge-output-format '<video_format>'
    Arguments: format de fichier vidéo . (ex: mp4, mkv, 3gp, etc.)
    Ajout: peut spécifier le format de fichier vidéo
    Ommission: Par défaut youtube-dl will guess it for you by default - Docs
    Remarque: Voir Documents: sélection du format

Commande utile:

Remarque: Utilisez youtube-dl --list-formats '<video_url>' pour rechercher les qualités vidéo et audio disponibles et les formats d'une vidéo spécifique (ne fonctionne pas sur les liens de liste de lecture);
Ex .: youtube-dl --list-formats 'https://www.youtube.com/watch?v=odwfHu6MDuU'

  • --output '<template>'
    Arguments:
    1. format de fichier vidéo. (ex: mp4, mkv, 3gp, etc.);
    2. Recommandé: %(upload_date)s_%(id)s_%(title)s.%(ext)s
    Ajout: influence la convention de nommage des fichiers pour les fichiers vidéo et tous les fichiers de métadonnées.
    Ommission: Par défaut, le titre de la vidéo sera le nom du fichier. Modèle par défaut: %(id)s.%(ext)s générera un ex .: testvideo.mkv
    Remarque: N'oubliez pas le préfixe % et le suffixe s (d'autres suffixes existent aussi.); Le _ entre les éléments de modèle est juste un séparateur et peut être n’importe quel autre caractère. ex .: %(upload_date)s-%(id)s
    Remarque: Voir Docs: modèle de sortie

  • '<video_url>'
    Arguments: Chaîne: URL d'une vidéo spécifique
    Message d'erreur:
    1. Si aucune URL de vidéo n'est envoyée, ytdl ne sera pas exécuté et affichera.
    2. Si l'URL de la vidéo soumise invalide est envoyé, le message ERROR sera imprimé sur stdout - format: ERROR: u'' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:" ) to search YouTube


Recommandations de stockage:

  1. créez un répertoire misc dans vos archives vidéo et stockez toutes les vidéos individuelles.

  2. lorsque vous téléchargez une ou plusieurs vidéos d'un canal, créez un répertoire dédié à ce canal. Dans ce cas, le nom du canal est TED Archive et le nom du répertoire sera TED_Archive. (je substitue de manière préventive tous les caractères d'espacement par des traits de soulignement pour faciliter la navigation dans les répertoires et les actions d'E/S sur les fichiers lorsque j'utilise des scripts bash (ou python)).


En réponse à votre commentaire @leetbacoon

Et je me demandais simplement pourquoi une copie 1080p est considérée comme la meilleure si la résolution 1440p est disponible? Et pourquoi 2160p est-il affiché? Cette option n'apparaît pas de mon côté (elle plafonne à 1440p) - leetbacoon

À partir de la documentation
You can also use a file extension (currently 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm are supported) to download the best quality format of a particular file extension served as a single file

best: Select the best quality format represented by a single file with video and audio.

bestvideo: Select the best quality video-only format

Je pense que lorsque vous sélectionnez uniquement best et que vous spécifiez un format de sortie, youtube envoie le format qu’il considère comme le meilleur combo vidéo + audio pour ce format. Cela pourrait être soumis à certaines décisions d’équilibrage internes sur youtube (spéculation).


Dans mon expérience d’utilisation, j’ai dû spécifier spécifiquement bestvideo+bestaudio pour obtenir la qualité la plus ÉLEVÉE disponible de vidéo et d’audio, puis les combiner dans un conteneur .mkv.


J'utilise /best comme argument de repli simplement pour en être sûr.


3