• 13 Posts
  • 540 Comments
Joined 1 year ago
cake
Cake day: July 10th, 2023

help-circle


  • “Give me a Python script using yt-dlp that I can run on a cronjob that will download the videos from any of my subscribed channels since the last time the script was run”

    You can use the following Python script to download videos from your subscribed channels since the last run. This script uses yt-dlp and stores the last download timestamp to track new videos.

    First, ensure you have yt-dlp installed:

    pip install yt-dlp
    

    Then, create a script called download_videos.py:

    import os
    import json
    import subprocess
    from datetime import datetime
    
    # Configuration
    last_run_file = 'last_run.json'
    download_directory = 'downloads'
    
    # Ensure the download directory exists
    os.makedirs(download_directory, exist_ok=True)
    
    # Load the last run time
    if os.path.exists(last_run_file):
        with open(last_run_file, 'r') as f:
            last_run = json.load(f)['last_run']
    else:
        last_run = datetime.now().isoformat()
    
    # Update the last run time to now
    current_run = datetime.now().isoformat()
    
    # Command to get videos from subscribed channels since the last run
    command = [
        'yt-dlp',
        '--download-archive', 'archive.txt',
        '--output', f'{download_directory}/%(title)s.%(ext)s',
        '--date-after', last_run,
        '--no-post-overwrites',
        '--merge-output-format', 'mp4',
        'https://www.youtube.com/channel/CHANNEL_ID',  # Replace with your channel URL
    ]
    
    # Run the command
    subprocess.run(command)
    
    # Save the current run time
    with open(last_run_file, 'w') as f:
        json.dump({'last_run': current_run}, f)
    
    print("Download complete. Next run will check for videos since:", current_run)
    

    Setting Up the Cron Job

    1. Make the script executable:

      chmod +x download_videos.py
      
    2. Open your crontab:

      crontab -e
      
    3. Add a line to run the script at your desired interval (e.g., daily at 2 AM):

      0 2 * * * /path/to/python /path/to/download_videos.py
      

    Notes

    • Replace CHANNEL_ID in the script with your actual channel IDs or use a playlist URL if preferred.
    • The archive.txt file keeps track of already downloaded videos to avoid duplicates.
    • Adjust the paths to Python and your script as needed.













  • It’s really neither much too nor very complex at all. I have a home lab stack of mini PCs and raspberry pi’s in my office hooked up to a switch to my router. Among the stack is an intel nuc with a few attached usb hdd, sharing those drives via NFS and Samba and hosting Jellyfin. The same machine serves jellyfin to my other devices and a few family members over the internet. That machine is more than capable for the task. In order to get that media to the living room I have a raspberry pi 4 running libreelec also hard wired to the Ethernet also to the same switch (running through a cable window in the wall). No, I had not heard of the issues with flat Ethernet cables that are otherwise advertised as cat 7 compatible, because I have (some) of the machines networked with flat Ethernet cables. Those are getting replaced.

    For the most part the pi4 libreelec machine handles content fine. But I have a number of multichannel audio, hd not-quite-4k animated movies that do routinely cause buffering issues. It seems most likely upon review and after the comments in this thread that it was a simple bottleneck at the pi4. The same content plays unstuttwring on other more equipped machines on the network. I do think the router is on its way out though and deserves an upgrade but that looks to be an optional next step. I’m replacing the pi as a media machine for now.