Compare commits

..

2 Commits

Author SHA1 Message Date
MasterofJOKers 43f12decea mirror-yt: Update output name format
We add the video height to the output file name if it's given.

We also add the playlist_index as a prefix, if the user requests this.
This is most likely a good idea, because videos uploaded on the same day
can otherwise be in another order than intended. This is most likely not
backwards compatible so already-downloaded channels should not use this.
2025-09-30 19:03:05 +02:00
MasterofJOKers 0ba42bb039 mirror-yt: Support setting sleep intervals
If the user wants to download videos a little faster than default, they
should be able to influence the between-downloads sleep interval.
2025-09-30 18:52:47 +02:00
1 changed files with 18 additions and 4 deletions

View File

@ -13,8 +13,14 @@ import click
help='Base directory where the channel directories get created') help='Base directory where the channel directories get created')
@click.option('--max-video-height', type=int, @click.option('--max-video-height', type=int,
help='Maximum height of the video e.g. 720 or 1080 to filter video formats by') help='Maximum height of the video e.g. 720 or 1080 to filter video formats by')
@click.option('--sleep-interval', type=int, default=30, show_default=True,
help="Minimum sleep interval between downloads")
@click.option('--max-sleep-interval', type=int, default=300, show_default=True,
help="Maximum sleep interval between downloads (see also --sleep-interval")
@click.option('--with-playlist-index', is_flag=True, help="Prepend the playlist index to the output file name")
@click.argument('CHANNEL_FILE', required=True) @click.argument('CHANNEL_FILE', required=True)
def download(allow_unknown, base_dir, max_video_height, channel_file): def download(allow_unknown, base_dir, max_video_height, sleep_interval, max_sleep_interval, with_playlist_index,
channel_file):
"""Mirror channels from YouTube """Mirror channels from YouTube
The list of channels needs to be provided via CHANNEL_FILE. The format of the file should be one channel per line. The list of channels needs to be provided via CHANNEL_FILE. The format of the file should be one channel per line.
@ -52,11 +58,19 @@ def download(allow_unknown, base_dir, max_video_height, channel_file):
if not target_dir.exists(): if not target_dir.exists():
target_dir.mkdir() target_dir.mkdir()
# NOTE: Using %(formats.:.height)s doesn't work, because the
# thumbnail doesn't take it's own output template even when
# provided with -o 'thumbnail:…'
name_fmt = '%(upload_date)s - %(title)s - %(id)s{}.%(ext)s'.format(
f" - {max_video_height}" if max_video_height else '')
if with_playlist_index:
name_fmt = f"%(playlist_index)s - {name_fmt}"
cmd = [ cmd = [
'yt-dlp', 'yt-dlp',
'-o', '%(upload_date)s - %(title)s - %(id)s.%(ext)s', '-o', name_fmt,
'--sleep-interval', '30', '--sleep-interval', str(sleep_interval),
'--max-sleep-interval', '300', '--max-sleep-interval', str(max_sleep_interval),
'--download-archive', target_dir / '.archive', '--download-archive', target_dir / '.archive',
'--break-on-existing', '--break-on-existing',
'--write-thumbnail', '--write-thumbnail',