Code Monkey home page Code Monkey logo

Comments (28)

pukkandan avatar pukkandan commented on May 21, 2024 2

This feature was merged from animelover1984/youtube-dl just last night. Try out the master branch to see the feature in action. There is no additional switch for it. --write-info-json now writes both video and playlist JSON

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024 2

I also just added a patch that does the same for --write-description

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024 1

Yes, I just saw it :D

The fields that have no value are omitted in the JSON. This is consistent with how video json works

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024 1

I will look into it.

Also, it seems playlist description is not being correctly extracted. I will let you know when there is any progress

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024 1

Playlist description have been fixed for youtube. While fixing that, I also found how to get some other metadata like thumbnails, views and last updated date. But YoutubeDl doesn't currently support these fields in the playlist dictionary, so I will need to check if it is feasible to add these.

playlist info.json be deposited in a custom location separate from the standard --output command?

yt-dlp already has an option to specify a separate directory for JSON. This could be extended to provide different path for the playlist json. But the issue is that this does not support variables.

I also thought about adding a new switch for specifying this new output template. But some other features like (split-tracks)[https://github.com/pukkandan/yt-dlp/projects/1#column-12545489] will also benefit from similar options. So it makes sense to implement this in a more general manner (similar to -P), but that will take some time.

In the meantime, I have pushed a patch that will ensure %(playlist_title)s, %(playlist_id)s etc are populated correctly.

Also, you could download the metadata separately with a different output template by using --playlist-item 0 --write-info

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

I just installed fresh via pip but am not seeing those lines. Currently when I compare the json line by line vs base youtube-dl, I'm only seeing the addition of subscriber count and playable in embed. Should I check out from git directly?

Edit: Checked out the master install. I see the playlist json now. However, it doesn't contain any lines of playlist data that aren't already included in the file json?

{
"_type":"playlist",
"id":"PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW",
"title":"Dead Suns Character Intros",
"uploader":"The Glass Cannon Network",
"uploader_id":"UC83CJFLyDe72XgkKBd5a9IA",
"uploader_url":"https://www.youtube.com/c/TheGlassCannon",
"extractor":"youtube:tab",
"webpage_url":"https://www.youtube.com/playlist?list=PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW",
"duration_string":null,
"webpage_url_basename":"playlist",
"extractor_key":"YoutubeTab"
}

Specifically, it doesn't contain any potential playlist description. (I know that playlist doesn't have one, but there is no entry for it in the JSON. Does it not pull if it is blank? I would expect it to pull and just say null.

Thank you.

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

The feature has not been released yet. It will be available in the next release. If you want to check it out right now, you can install the master branch

python -m pip install --upgrade git+https://github.com/pukkandan/yt-dlp

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

@pukkandan I just edited my prior as you were posting.

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

Ah got it, thanks for that.

I wrote up some code to scrape out video information from the individual video info.json files to create .metadata files based on this Plex metadata agent - https://bitbucket.org/mjarends/extendedpersonalmedia-agent.bundle

##/bin/bash
YT_DIR="/mnt/storage/media/youtube/"
IFS=$'\n'

cd "$YT_DIR"

for i in $(find -type f -name "*.info.json")
do
    noext=${i%.*.*}
    if [[ -e "$noext.metadata" ]]; then
        #echo "Skipping, metadata already exists."
        :
    else
        #echo "Creating metadata for `basename \"$noext\"`."
        cat "$i"  | jq -r '"[metadata]","title="+.title,"summary="+.description,"release="+.upload_date[0:4]+"-"+.upload_date[4:6]+"-"+.upload_date[6:8],"writers="+.uploader,"directors="+.uploader' > "$noext.metadata"
    fi
done
unset IFS

I can probably figure out a way to work with a separate metadata .json file, however the way I'm currently writing the folder/file structure is: %(uploader)s/%(playlist_title)s - [%(playlist_id)s]/%(playlist_title)s - S01E%(playlist_index)s - %(title)s [%(id)s].%(ext)s and thus I'm getting an extra playlist subfolder entitled "NA - [NA]" right now but would there be a way to have the playlist info.json be deposited in a custom location separate from the standard --output command? Or pretty much no, everything is tied to one output location.

Thanks for any insight!

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

I am closing this since the original feature request has been added. Feel free to make a new issue for the "multiple output tempates" if you want; though I will add it eventually even if you don't make the request

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

This is great, I saw the playlist metadata come in as playlist ID 00, perfect! Thank you.

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

I assume you mean playlist_index

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

Yes, definitely meant that.

One other question, it appears the .json is being written upon each run of the program. This is probably fine, but in the unlikely event that a playlist is deleted or made private, or the info simply deleted by its creator but the playlist is left intact, could the data be overwritten? Is it possible to check if it is preexisting similar to the video archive?

Or perhaps a flag to default to overwriting (or not) with an option to run the alternative way?

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

--no-overwrites

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

I'm already running with no-overwrites, relevant part of my config:

# Use archive file
--download-archive "archive.log"

# Ignore errors / connection issues
--force-ipv4
--ignore-errors
--no-continue
--no-overwrites

# Sleep to prevent rate limiting
--sleep-interval 1
--max-sleep-interval 10

# Grab and embed metadata
--add-metadata
--write-thumbnail
--write-info-json

It is still writing all playlist files on run.

[youtube:tab] PLz3Be--ot61OS7lU-6I1TObQFbVBKaDbm: Downloading webpage
[download] Downloading playlist: Master of the Metaverse: Troy Plays Persona 5
[info] Writing playlist metadata as JSON to: /mnt/storage/media/youtube/The Glass Cannon Network/Master of the Metaverse - Troy Plays Persona 5 - [PLz3Be--ot61OS7lU-6I1TObQFbVBKaDbm]/Master of the Metaverse - Troy Plays Persona 5 - S01E00 - Master of the Metaverse - Troy Plays Persona 5 [PLz3Be--ot61OS7lU-6I1TObQFbVBKaDbm].info.json
[youtube:tab] playlist Master of the Metaverse: Troy Plays Persona 5: Downloading 11 videos
[download] Downloading video 1 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 001 has already been recorded in archive
[download] Downloading video 2 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 002.1 has already been recorded in archive
[download] Downloading video 3 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 002.2 has already been recorded in archive
[download] Downloading video 4 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 003 has already been recorded in archive
[download] Downloading video 5 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 004.1 has already been recorded in archive
[download] Downloading video 6 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 004.2 has already been recorded in archive
[download] Downloading video 7 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 005 has already been recorded in archive
[download] Downloading video 8 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 006.1 has already been recorded in archive
[download] Downloading video 9 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 006.2 has already been recorded in archive
[download] Downloading video 10 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 006.3 has already been recorded in archive
[download] Downloading video 11 of 11
[download] Master of the Metaverse: Troy Plays Persona 5 Episode 007 has already been recorded in archive
[download] Finished downloading playlist: Master of the Metaverse: Troy Plays Persona 5
[download] Downloading video 21 of 34
[youtube:tab] PLz3Be--ot61Ok9chgj0Q0vwhiItYQmeic: Downloading webpage
[download] Downloading playlist: RE7 with Skid and Grant
[info] Writing playlist metadata as JSON to: /mnt/storage/media/youtube/The Glass Cannon Network/RE7 with Skid and Grant - [PLz3Be--ot61Ok9chgj0Q0vwhiItYQmeic]/RE7 with Skid and Grant - S01E00 - RE7 with Skid and Grant [PLz3Be--ot61Ok9chgj0Q0vwhiItYQmeic].info.json
[youtube:tab] playlist RE7 with Skid and Grant: Downloading 2 videos
[download] Downloading video 1 of 2
[download] Resident Evil 7 biohazard with Skid and Grant Episode 001 has already been recorded in archive

Is one of the other options causing a conflict?

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

There was a bug that prevented --no-overwrites from working correctly. I have already fixed it in the current master

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

Got it, updating now. Thanks!

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

Updated with python3 -m pip install --upgrade git+https://github.com/pukkandan/yt-dlp but it appears to still be downloading each playlist json. Is there a better way to force/clean and reinstall in case its some kind of cache issue?

Defaulting to user installation because normal site-packages is not writeable
Collecting git+https://github.com/pukkandan/yt-dlp
  Cloning https://github.com/pukkandan/yt-dlp to /tmp/pip-req-build-fk2tcxf1
  Running command git clone -q https://github.com/pukkandan/yt-dlp /tmp/pip-req-build-fk2tcxf1
Requirement already satisfied: mutagen in ./.local/lib/python3.6/site-packages (from yt-dlp==2021.1.29) (1.45.1)

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

You might have multiple yt-dlp installed. Check with python3 -m pip list and uninstall older versions with python3 -m pip uninstall <NAME>

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

Just:

youtube-dl        2021.1.24.1
yt-dlp            2021.1.29

And I'm manually calling youtube-dlc in my command.

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

Could you give the verbose output of the command you are running? It is working for me:

$youtube-dlc.cmd PLnGaZWkydyfA8yC1i0RJN0iE7idaI2dv2 --write-info-json -v --no-overwrite
[debug] Command-line config: ['PLnGaZWkydyfA8yC1i0RJN0iE7idaI2dv2', '--write-info-json', '-v', '--no-overwrite']
[debug] Loading archive file None
[debug] Encodings: locale cp1252, fs utf-8, out utf-8, pref cp1252
[debug] yt-dlp version 2021.01.29
[debug] Plugin Extractors: ['SamplePlugin']
[debug] Git HEAD: abb10ff78
[debug] Python version 3.8.4 (CPython) - Windows-10-10.0.19041-SP0
[debug] exe versions: ffmpeg 4.3.1-2020-11-19-full_build-www.gyan.dev
[debug] Proxy map: {}
[youtube:tab] PLnGaZWkydyfA8yC1i0RJN0iE7idaI2dv2: Downloading webpage
[download] Downloading playlist: Les 2 Minutes Du Peuple - Intégrale
[info] Playlist metadata is already present

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

Here's a short playlist I've been testing with.

youtube-dlc --config-location playlists.conf "https://www.youtube.com/watch?v=tO68f7aiwOA&list=PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW" -v
[debug] Custom config file: playlists.conf
[debug] Custom config: ['--download-archive', 'archive.log', '--force-ipv4', '--ignore-errors', '--no-continue', '--no-overwrites', '--sleep-interval', '1', '--max-sleep-interval', '10', '--add-metadata', '--write-thumbnail', '--write-info-json', '--format', '(bestvideo[vcodec^=av01][height>=2160][fps>30]/bestvideo[vcodec^=vp9.2][height>=2160][fps>30]/bestvideo[vcodec^=vp9][height>=2160][fps>30]/bestvideo[vcodec^=avc1][height>=2160][fps>30]/bestvideo[height>=2160][fps>30]/bestvideo[vcodec^=av01][height>=2160]/bestvideo[vcodec^=vp9.2][height>=2160]/bestvideo[vcodec^=vp9][height>=2160]/bestvideo[vcodec^=avc1][height>=2160]/bestvideo[height>=2160]/bestvideo[vcodec^=av01][height>=1440][fps>30]/bestvideo[vcodec^=vp9.2][height>=1440][fps>30]/bestvideo[vcodec^=vp9][height>=1440][fps>30]/bestvideo[vcodec^=avc1][height>=1440][fps>30]/bestvideo[height>=1440][fps>30]/bestvideo[vcodec^=av01][height>=1440]/bestvideo[vcodec^=vp9.2][height>=1440]/bestvideo[vcodec^=vp9][height>=1440]/bestvideo[vcodec^=avc1][height>=1440]/bestvideo[height>=1440]/bestvideo[vcodec^=av01][height>=1080][fps>30]/bestvideo[vcodec^=vp9.2][height>=1080][fps>30]/bestvideo[vcodec^=vp9][height>=1080][fps>30]/bestvideo[vcodec^=avc1][height>=1080][fps>30]/bestvideo[height>=1080][fps>30]/bestvideo[vcodec^=av01][height>=1080]/bestvideo[vcodec^=vp9.2][height>=1080]/bestvideo[vcodec^=vp9][height>=1080]/bestvideo[vcodec^=avc1][height>=1080]/bestvideo[height>=1080]/bestvideo[vcodec^=av01][height>=720][fps>30]/bestvideo[vcodec^=vp9.2][height>=720][fps>30]/bestvideo[vcodec^=vp9][height>=720][fps>30]/bestvideo[vcodec^=avc1][height>=720][fps>30]/bestvideo[height>=720][fps>30]/bestvideo[vcodec^=av01][height>=720]/bestvideo[vcodec^=vp9.2][height>=720]/bestvideo[vcodec^=vp9][height>=720]/bestvideo[vcodec^=avc1][height>=720]/bestvideo[height>=720]/bestvideo)+(bestaudio[asr=48000]/bestaudio[acodec^=opus]/bestaudio)/best', '--merge-output-format', 'mkv', '--output', '/mnt/storage/media/youtube/%(uploader)s/%(playlist_title)s - [%(playlist_id)s]/%(playlist_title)s - S01E%(playlist_index)s - %(title)s [%(id)s].%(ext)s']
[debug] Command-line config: ['--config-location', 'playlists.conf', 'https://www.youtube.com/watch?v=tO68f7aiwOA&list=PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW', '-v']
[debug] Loading archive file 'archive.log'
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] yt-dlp version 2021.01.29
[debug] Python version 3.6.9 (CPython) - Linux-5.4.78-2-pve-x86_64-with-Ubuntu-18.04-bionic
[debug] exe versions: ffmpeg 3.4.8, ffprobe 3.4.8
[debug] Proxy map: {}
[youtube:tab] Downloading playlist PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW - add --no-playlist to just download video tO68f7aiwOA
[youtube:tab] PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW: Downloading webpage
[youtube:tab] PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW: Downloading webpage
[download] Downloading playlist: Dead Suns Character Intros
[info] Writing playlist metadata as JSON to: /mnt/storage/media/youtube/The Glass Cannon Network/Dead Suns Character Intros - [PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW]/Dead Suns Character Intros - S01E00 - Dead Suns Character Intros [PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW].info.json
[youtube:tab] playlist Dead Suns Character Intros: Downloading 5 videos
[download] Downloading video 1 of 5
[download] Dead Suns Character Introduction with Troy and Matthew has already been recorded in archive
[download] Downloading video 2 of 5
[download] Dead Suns Character Introduction with Troy and Skid has already been recorded in archive
[download] Downloading video 3 of 5
[download] Dead Suns Character Introduction with Troy and Ellinor has already been recorded in archive
[download] Downloading video 4 of 5
[download] Dead Suns Character Introduction with Troy and Grant has already been recorded in archive
[download] Downloading video 5 of 5
[download] Dead Suns Character Introduction with Troy and Joe has already been recorded in archive
[download] Finished downloading playlist: Dead Suns Character Intros

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

No idea. I tried a fresh install in a venv and it still works correctly for me. Try which youtube-dlc to confirm your PATH isn't polluted

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

I spun up a brand new LXC to test. Documenting my steps (post install of ffmpeg, git, etc.):

  1. python3 -m pip install --upgrade git+https://github.com/pukkandan/yt-dlp
  2. PATH=$PATH:~/.local/bin
  3. youtube-dlc --version output: 2021.01.29
  4. nano playlists.conf pasted in my config from other vm
  5. youtube-dlc --config-location playlists.conf "https://www.youtube.com/watch?v=tO68f7aiwOA&list=PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW" it downloaded everything appropriately - 5 episodes and their metadata, thumbnails, + the playlist json
  6. youtube-dlc --config-location playlists.conf "https://www.youtube.com/watch?v=tO68f7aiwOA&list=PLz3Be--ot61Mvmms68yBEhX6KrzPrqxsW" confirmed nothing new was downloaded.

Not sure what's happening with my original install but I'm going to just spin up a new clean container. Thanks for helping me test. I saw the Playlist metadata is already present note.

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

https://github.com/pukkandan/yt-dlp/issues/36#issuecomment-769246405

would there be a way to have the playlist info.json be deposited in a custom location separate from the standard --output command

Now you can do -o "pl_infojson:<template>"

(bestvideo[vcodec^=av01][height>=2160][fps>30]/bestvideo[vcodec^=vp9.2][height>=2160][fps>30]/bestvideo[vcodec^=vp9][height>=2160][fps>30]/bestvideo[vcodec^=avc1][height>=2160][fps>30]/bestvideo[height>=2160][fps>30]/bestvideo[vcodec^=av01][height>=2160]/bestvideo[vcodec^=vp9.2][height>=2160]/bestvideo[vcodec^=vp9][height>=2160]/bestvideo[vcodec^=avc1][height>=2160]/bestvideo[height>=2160]/bestvideo[vcodec^=av01][height>=1440][fps>30]/bestvideo[vcodec^=vp9.2][height>=1440][fps>30]/bestvideo[vcodec^=vp9][height>=1440][fps>30]/bestvideo[vcodec^=avc1][height>=1440][fps>30]/bestvideo[height>=1440][fps>30]/bestvideo[vcodec^=av01][height>=1440]/bestvideo[vcodec^=vp9.2][height>=1440]/bestvideo[vcodec^=vp9][height>=1440]/bestvideo[vcodec^=avc1][height>=1440]/bestvideo[height>=1440]/bestvideo[vcodec^=av01][height>=1080][fps>30]/bestvideo[vcodec^=vp9.2][height>=1080][fps>30]/bestvideo[vcodec^=vp9][height>=1080][fps>30]/bestvideo[vcodec^=avc1][height>=1080][fps>30]/bestvideo[height>=1080][fps>30]/bestvideo[vcodec^=av01][height>=1080]/bestvideo[vcodec^=vp9.2][height>=1080]/bestvideo[vcodec^=vp9][height>=1080]/bestvideo[vcodec^=avc1][height>=1080]/bestvideo[height>=1080]/bestvideo[vcodec^=av01][height>=720][fps>30]/bestvideo[vcodec^=vp9.2][height>=720][fps>30]/bestvideo[vcodec^=vp9][height>=720][fps>30]/bestvideo[vcodec^=avc1][height>=720][fps>30]/bestvideo[height>=720][fps>30]/bestvideo[vcodec^=av01][height>=720]/bestvideo[vcodec^=vp9.2][height>=720]/bestvideo[vcodec^=vp9][height>=720]/bestvideo[vcodec^=avc1][height>=720]/bestvideo[height>=720]/bestvideo)+(bestaudio[asr=48000]/bestaudio[acodec^=opus]/bestaudio)/best

btw, I noticed your long format string. You can achieve a similar format selection by using -S res,fps,vcodec,asr,acodec. It is for use cases like this that I made the --format-sort option. You can also see how yt-dlp orders the formats by using -F alongside the -S

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

This is awesome, thanks! And thanks for the tip regarding format sort. I think I've got things 99% where I want them currently. My planned process is:

  1. Grab my playlists and populate archive.log
  2. Grab my non-playlist channels and populate archive.log
  3. Use a bash script to scrape episode's json into a .metdata format per episode that works for mjarends scanner (currently still tweaking this, but its basically done)
  4. Use a (to be written) bash script to scrape the playlist json for populating 'show' level (playlist) info. (Seasons will only be leveraged for the single non-playlist channel based video, with SYYYY season subfolders. Everything else is a flat directory structure.)
  5. Manually populate for each artist/channel, via Plex's collection feature, data from the channel level itself from the channel json 1 time per channel.

Here's my configs, let me know what you think.

yt-dlc-playlist.conf

# Use archive file
--download-archive "/mnt/storage/media/youtube/archive.log"

# Ignore errors / connection issues
--force-ipv4
--ignore-errors
--no-continue
--no-overwrites

# Sleep to prevent rate limiting
--sleep-interval 1
--max-sleep-interval 10

# Grab and embed metadata
--add-metadata
--write-thumbnail
--write-info-json

# Set best audio / video quality
--format-sort res,fps,vcodec,asr,acodec

# Set output options
--merge-output-format "mkv"
--output "/mnt/storage/media/youtube/%(uploader)s - %(playlist_title)s - [%(playlist_id)s]/%(playlist_title)s - S01E%(playlist_index)s - %(title)s [%(id)s].%(ext)s" # For extended personal media scanner without parent, TV show fix
--output "pl_infojson:/mnt/storage/media/youtube/%(uploader)s - %(playlist_title)s - [%(playlist_id)s]/%(playlist_title)s - Playlist Info.%(ext)s"

yt-dlc-channel.conf

# Use archive file
--download-archive "/mnt/storage/media/youtube/archive.log"

# Ignore errors / connection issues
--force-ipv4
--ignore-errors
--no-continue
--no-overwrites

# Sleep to prevent rate limiting
--sleep-interval 1
--max-sleep-interval 10

# Grab and embed metadata
--add-metadata
--write-thumbnail
--write-info-json

# Reverse order for non-playlist videos so oldest are still first
--playlist-reverse

# Set best audio / video quality
--format-sort res,fps,vcodec,asr,acodec

# Set output options
--merge-output-format "mkv"
--output "/mnt/storage/media/youtube/%(playlist_title)s - [%(playlist_id)s]/S%(upload_date).4s/%(playlist_uploader)s - %(upload_date)s - %(title)s [%(id)s].%(ext)s"
--output "pl_infojson:/mnt/storage/media/youtube/%(playlist_title)s - [%(playlist_id)s]/%(playlist_uploader)s - Channel Info.%(ext)s"

I think I only have two outstanding to dos:

How do I automatically download a playlist's thumbnail and a channel's thumbnail as part of the json download? I'm already downloading episode thumbnails. Is this even a feature?

Here is my youtube subfolder during testing, for reference, with only 1 channel's data:

channel folders

I have the channel level channel json flowing into the non-playlist videos subfolder as seen here, which is exactly what I want. Including a ls of one subfolder as well (2016) for visual reference. This is the channel level JSON whose title is 'Channel Name - Videos'.

channel video subfolder

I also have each playlist's playlist json landing in the playlist subfolder as shown via an example here.

playlist example

But I'm also getting an extra subfolder (well, not extra because it's valid data) with only one file, the playlist version of the "channel level" json showing up. It has identical data to the channel level json shown in the 'Videos' folder above. This folder, and the Videos folder, are easily identified in the first screenshot list as they both contain the [UC] code instead of a [PL] code.

playlist solo folder

(Same data, but the 'titles' are Channel Name - Videos vs Channel Name - Playlists). I'm assuming nothing can be done about this one extra file, but thought I'd ask. I don't want to delete it as part of a cron job as it'll just re-download each run, so likely I will ignore it - but if it is possible to exclude from download the playlist JSON if it's title value is literally %(uploader)s - Playlists then that would be ideal (if not kind of niche/ridiculous request).

Thanks!

from yt-dlp.

pukkandan avatar pukkandan commented on May 21, 2024

How do I automatically download a playlist's thumbnail and a channel's thumbnail as part of the json download? I'm already downloading episode thumbnails. Is this even a feature?

Currently there is no such feature. It's something I have thought of adding. In the meantime, you could write a script to fetch the data from the JSON and download using CURL/wget

(Same data, but the 'titles' are Channel Name - Videos vs Channel Name - Playlists). I'm assuming nothing can be done about this one extra file, but thought I'd ask.

I have been thinking of an "advanced output template" which once implemented would make this possible. But no promises since I'm not even sure if It is possible for me to implement this feature in the first place. It is also nowhere near the top of my priorities

I am not too familiar with plex, but the youtube-dl part looks good. If you were using windows, I would be concerned about the long filenames, but it shouldn't be an issue in UNIX.

You might want to put the common parts of your config into either portable/user/home config file. That way, if you want to edit it, you only have to do so in one place

from yt-dlp.

undaunt avatar undaunt commented on May 21, 2024

Awesome, sounds good to me. Thanks for your insight!

from yt-dlp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.