diff --git a/docs/configuration.rst b/docs/configuration.rst index 0e2e3557cf..d914a594dd 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -1171,6 +1171,25 @@ Description | Route youtube-dl's output through gallery-dl's logging system. =========== ===== +downloader.ytdl.outtmpl +----------------------- +=========== ===== +Type ``string`` +Default ``null`` +Description The `Output Template `__ + used to generate filenames for files downloaded with youtube-dl. + + Special values: + + * ``null``: generate filenames with `extractor.*.filename`_ + * ``"default"``: use youtube-dl's default, currently ``"%(title)s-%(id)s.%(ext)s"`` + + Note: An output template other than ``null`` might + cause unexpected results in combination with other options + (e.g. ``"skip": "enumerate"``) +=========== ===== + + downloader.ytdl.raw-options --------------------------- =========== ===== diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index b9ff32d354..64394374a0 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -169,6 +169,7 @@ "format": null, "forward-cookies": true, "mtime": true, + "outtmpl": null, "rate": null, "retries": 4, "timeout": 30.0, diff --git a/gallery_dl/downloader/ytdl.py b/gallery_dl/downloader/ytdl.py index 7d8b905a81..ce921e329d 100644 --- a/gallery_dl/downloader/ytdl.py +++ b/gallery_dl/downloader/ytdl.py @@ -8,7 +8,7 @@ """Downloader module for URLs requiring youtube-dl support""" -from youtube_dl import YoutubeDL +from youtube_dl import YoutubeDL, DEFAULT_OUTTMPL from .common import DownloaderBase from .. import text import os @@ -36,6 +36,9 @@ def __init__(self, extractor, output): options["logger"] = self.log self.forward_cookies = self.config("forward-cookies", True) + outtmpl = self.config("outtmpl") + self.outtmpl = DEFAULT_OUTTMPL if outtmpl == "default" else outtmpl + self.ytdl = YoutubeDL(options) def download(self, url, pathfmt): @@ -60,7 +63,17 @@ def download(self, url, pathfmt): def _download_video(self, pathfmt, info_dict): if "url" in info_dict: text.nameext_from_url(info_dict["url"], pathfmt.kwdict) - pathfmt.set_extension(info_dict["ext"]) + + if self.outtmpl: + self.ytdl.params["outtmpl"] = self.outtmpl + pathfmt.filename = filename = self.ytdl.prepare_filename(info_dict) + pathfmt.extension = info_dict["ext"] + pathfmt.path = pathfmt.directory + filename + pathfmt.realpath = pathfmt.temppath = ( + pathfmt.realdirectory + filename) + else: + pathfmt.set_extension(info_dict["ext"]) + if pathfmt.exists(): pathfmt.temppath = "" return True