Download Reels
Python 3.10+ • yt-dlp • 8 min read

How to Download Reels & Shorts with Python (yt-dlp, Instaloader & Async)

A comprehensive guide to scraping and downloading Instagram Reels, TikTok videos, and YouTube Shorts using Python. We cover single-file extraction, batch queuing, audio extraction, and headless API integration.

Looking for a quick web downloader?

Download any reel directly in your browser without code.

Try Online Tool →

1. Why Python for Video Extraction?

Short-form video platforms such as Instagram, TikTok, and YouTube deliver video content via Content Delivery Networks (CDNs) protected by tokenized URLs, signature verification, and dynamic manifest files (such as HLS .m3u8 or DASH .mpd).

Python offers a rich ecosystem of headless parsers and HTTP streaming libraries that make it straightforward to resolve these signed URLs and stream the raw MP4 chunks directly to disk.

2. Using yt-dlp: The Industry Standard

yt-dlp is an actively maintained fork of youtube-dl supporting thousands of video platforms, automatic stream merging, and cookie extraction.

pip install yt-dlp

Here is a production-ready Python script to extract and save reels in high quality:

import yt_dlp

def download_reel(url: str, output_path: str = "downloads/%(title)s.%(ext)s"):
    ydl_opts = {
        'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
        'outtmpl': output_path,
        'noplaylist': True,
        'quiet': False,
        'no_warnings': True,
        'http_headers': {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
    }
    
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        info = ydl.extract_info(url, download=True)
        print(f"✅ Successfully downloaded: {info.get('title', 'Video')}")
        return info

if __name__ == "__main__":
    test_url = "https://www.instagram.com/reel/DfGqtxDTZt_/"
    download_reel(test_url)

3. Downloading Instagram Reels with Instaloader

For Instagram-specific metadata (caption, hashtags, creator info, view counts), instaloader is an excellent lightweight library:

import instaloader

L = instaloader.Instaloader(
    download_pictures=False,
    download_videos=True,
    download_video_thumbnails=False,
    download_geotags=False,
    download_comments=False,
    save_metadata=False
)

shortcode = "DfGqtxDTZt_"
post = instaloader.Post.from_shortcode(L.context, shortcode)
L.download_post(post, target=f"reel_{shortcode}")
print(f"Reel saved from author: @{post.owner_username}")

4. Streaming Direct MP4s with Requests & Progress Bar

Once you have resolved a direct CDN link (such as TikTok CDN or raw MP4 stream), stream the chunks safely without loading entire gigabyte files into RAM:

import requests
from tqdm import tqdm

def stream_video(url: str, filename: str):
    response = requests.get(url, stream=True, timeout=15)
    response.raise_for_status()
    
    total_size = int(response.headers.get('content-length', 0))
    chunk_size = 1024 * 1024  # 1MB chunks
    
    with open(filename, 'wb') as file, tqdm(
        desc=filename,
        total=total_size,
        unit='iB',
        unit_scale=True,
        unit_divisor=1024,
    ) as bar:
        for chunk in response.iter_content(chunk_size=chunk_size):
            if chunk:
                file.write(chunk)
                bar.update(len(chunk))

    print(f"Finished writing {filename}")

5. Extracting MP3 Audio Tracks

To extract original background audio or music tracks from reels using Python and yt-dlp with FFmpeg post-processing:

ydl_audio_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '320',
    }],
    'outtmpl': 'downloads/%(title)s_audio.%(ext)s',
}

with yt_dlp.YoutubeDL(ydl_audio_opts) as ydl:
    ydl.download(["https://youtube.com/shorts/TKKn4X8osfo"])

Related Guides: