2021-11-01 10:33:04 -04:00
2021-05-20 19:56:09 -04:00
2021-11-01 10:33:04 -04:00
2021-05-28 23:17:47 -04:00
2020-11-05 23:55:16 +05:30
2021-05-18 10:15:54 -04:00
2021-05-18 17:16:18 -04:00
2021-09-24 23:50:42 -04:00
2021-09-24 23:50:42 -04:00

Udemy Downloader with DRM support

forthebadge forthebadge forthebadge forthebadge GitHub forks GitHub Repo stars GitHub

NOTE

  • This tool will not work without decryption keys, and there currently no public way to get those keys. Do not bother installing unless you already have keys!
  • This program is WIP, the code is provided as-is and I am not held resposible for any legal issues resulting from the use of this program.

Support

if you want help using the program, join my discord server or use github issues

License

All code is licensed under the MIT license

Description

Utility script to download Udemy courses, has support for DRM videos but requires the user to acquire the decryption key (for legal reasons).
Windows is the primary development OS, but I've made an effort to support Linux also.

Requirements

  1. You would need to download ffmpeg, aria2c, mp4decrypt (from Bento4 SDK) and yt-dlp (this is installed with the other requirements). Ensure they are in the system path (typing their name in cmd should invoke them).

Usage

quick and dirty how-to

You will need to get a few things before you can use this program:

  • Decryption Key ID
  • Decryption Key
  • Udemy Course URL
  • Udemy Bearer Token (aka acccess token for udemy-dl users)

Setting up

  • install python 3.6+
  • install requirements: pip install -r requirements.txt
  • rename .env.sample to .env (you only need to do this if you plan to use the .env file to store your bearer token)
  • rename keyfile.example.json to keyfile.json (this is only required if you plan to download DRM encrypted lectures)

Acquire Bearer Token

  • Firefox: Udemy-DL Guide
  • Chrome: Udemy-DL Guide
  • If you want to use the .env file to store your Bearer Token, edit the .env and add your token.

Key ID and Key

I would rather not instruct you how to get these as its a grey area in terms of legality. I would prefer if you don't ask me for help getting these.

  • Enter the key and key id in the keyfile.json
  • keyfile example
  • example key and kid from console

Start Downloading

You can now run the program, see the examples below. The course will download to out_dir.

Advanced Usage

usage: udemy_downloader [-h] -c COURSE_URL [-b BEARER_TOKEN] [-q QUALITY] [-l LANG] [-cd CONCURRENT_CONNECTIONS] [--skip-lectures] [--download-assets] [--download-captions] [--keep-vtt] [--skip-hls] [--info]
                        [--use-h265] [--h265-crf H265_CRF] [--ffmpeg-preset FFMPEG_PRESET] [--ffmpeg-framerate FFMPEG_FRAMERATE] [--h265-encoder H265_ENCODER] [-v]

Udemy Downloader

optional arguments:
  -h, --help            show this help message and exit
  -c COURSE_URL, --course-url COURSE_URL
                        The URL of the course to download
  -b BEARER_TOKEN, --bearer BEARER_TOKEN
                        The Bearer token to use
  -q QUALITY, --quality QUALITY
                        Download specific video quality. If the requested quality isn't available, the closest quality will be used. If not specified, the best quality will be downloaded for each lecture
  -l LANG, --lang LANG  The language to download for captions, specify 'all' to download all captions (Default is 'en')
  -cd CONCURRENT_CONNECTIONS, --concurrent-connections CONCURRENT_CONNECTIONS
                        The number of maximum concurrent connections per download for segments (HLS and DASH, must be a number 1-30)
  --skip-lectures       If specified, lectures won't be downloaded
  --download-assets     If specified, lecture assets will be downloaded
  --download-captions   If specified, captions will be downloaded
  --keep-vtt            If specified, .vtt files won't be removed
  --skip-hls            If specified, hls streams will be skipped (faster fetching) (hls streams usually contain 1080p quality for non-drm lectures)
  --info                If specified, only course information will be printed, nothing will be downloaded
  --use-h265            If specified, videos will be encoded with the H.265 codec
  --h265-crf H265_CRF   Set a custom CRF value for H.265 encoding. FFMPEG default is 28
  --ffmpeg-preset FFMPEG_PRESET
                        Set a custom preset value for encoding. This can vary depending on the encoder
  --ffmpeg-framerate FFMPEG_FRAMERATE
                        Changes the FPS used for encoding. FFMPEG default is 30
  --h265-encoder H265_ENCODER
                        Changes the HEVC encder that is used. Default is libx265
  -v, --version         show program's version number and exit
  • Passing a Bearer Token and Course ID as an argument
    • python udemy_downloader -c <Course URL> -b <Bearer Token>
    • python udemy_downloader -c https://www.udemy.com/courses/myawesomecourse -b <Bearer Token>
  • Download a specific quality
    • python udemy_downloader -c <Course URL> -q 720
  • Download assets along with lectures
    • python udemy_downloader -c <Course URL> --download-assets
  • Download assets and specify a quality
    • python udemy_downloader -c <Course URL> -q 360 --download-assets
  • Download captions (Defaults to English)
    • python udemy_downloader -c <Course URL> --download-captions
  • Download captions with specific language
    • python udemy_downloader -c <Course URL> --download-captions -l en - English subtitles
    • python udemy_downloader -c <Course URL> --download-captions -l es - Spanish subtitles
    • python udemy_downloader -c <Course URL> --download-captions -l it - Italian subtitles
    • python udemy_downloader -c <Course URL> --download-captions -l pl - Polish Subtitles
    • python udemy_downloader -c <Course URL> --download-captions -l all - Downloads all subtitles
    • etc
  • Skip downloading lecture videos
    • python udemy_downloader -c <Course URL> --skip-lectures --download-captions - Downloads only captions
    • python udemy_downloader -c <Course URL> --skip-lectures --download-assets - Downloads only assets
  • Keep .VTT caption files:
    • python udemy_downloader -c <Course URL> --download-captions --keep-vtt
  • Skip parsing HLS Streams (HLS streams usually contain 1080p quality for Non-DRM lectures):
    • python udemy_downloader -c <Course URL> --skip-hls
  • Print course information only:
    • python udemy_downloader -c <Course URL> --info
  • Specify max number of concurrent downloads:
    • python udemy_downloader -c <Course URL> --concurrent-downloads 20
    • python udemy_downloader -c <Course URL> -cd 20
  • Encode in H.265:
    • python udemy_downloader -c <Course URL> --use-h265
  • Encode in H.265 with custom CRF:
    • python udemy_downloader -c <Course URL> --use-h265 -h265-crf 20
  • Encode in H.265 with custom preset using the default encoder (libx265):
    • python udemy_downloader -c <Course URL> --use-h265 --h265-preset faster
  • Encode in H.265 with custom preset using a custom encoder:
    • Note: The presets may be different depending on the encoder! For example: hevc_nvenc default is p7. You can view encoder help with ffmpeg -h encoder=<encoder name>, ex: ffmpeg -h encoder=hevc_nvenc
    • python udemy_downloader -c <Course URL> --use-h265 --h265-encoder hevc_nvenc --h265-preset p7
  • Encode in H.265 with a custom framerate:
    • python udemy_downloader -c <Course URL> --use-h265 --ffmpeg-framerate 24

Credits

Description
A Udemy downloader that can download lectures, with DRM support.
Readme 522 KiB
Languages
Python 80.9%
HTML 18.6%
Dockerfile 0.5%