0% found this document useful (0 votes)
292 views8 pages

Udemy Course Downloader with DRM

Uploaded by

rezhanjawher
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
292 views8 pages

Udemy Course Downloader with DRM

Uploaded by

rezhanjawher
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.

Puyodead1 /
udemy-downloader
Code Issues 19 Pull requests 1 Actions Projects Security Insights

A Udemy downloader that can download courses, with DRM support.


MIT license
1.4k stars 318 forks 33 watching Branches Activity
Tags
Public repository

5 Branches 1 Tag Go to file t Go to file Add file Code

Puyodead1 bug fixes 4db8cea · 2 months ago

.github Delete stale.yml 3 years ago


templates minor article template changes 4 months ago
.env.sample Added comment to .env.sample 10 months ago
.gitattributes Initial commit 4 years ago
.gitignore Added docker compose output vol… 10 months ago
Dockerfile Update Dockerfile 6 months ago
LICENSE Update LICENSE 3 years ago
README.md fix large courses 9 months ago
constants.py fix non-drmed videos not download… 4 months ago
docker-compose.yml Added docker compose 10 months ago
keyfile.example.json some refactoring 9 months ago
main.py bug fixes 2 months ago
mp4parse.py We can now extract the PSSH box f… 3 years ago
requirements.txt Update requirements.txt 9 months ago
tls.py Custom TLS Cipher last year
utils.py updates 5 months ago
vtt_to_srt.py Attempt to fix encoding problems … last year
update protobuf last year
https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 1/8
12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.
widevine_pssh_data.proto
widevine_pssh_data_pb2.py update protobuf last year

Udemy Downloader with DRM support


README MIT license

MADE WITH PYTHON

FORKS 318 S TA R S 1.4K LICENSE MIT

NOTE
This tool will not work without decryption keys. Do not bother installing unless you already have
keys or can obtain them!
If you ask about keys in the issues, your message will be deleted and you will be blocked.
Downloading courses is against Udemy's Terms of Service, I am NOT held responsible for your
account getting suspended as a result from the use of this program!
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.
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 (Mac untested).
Caution
The ability to download captions automatically is currently broken due to changes in Udemy's API!
Important
This tool will not work on encrypted courses without decryption keys being provided!
Downloading courses is against Udemy's Terms of Service, I am NOT held responsible for your account
getting suspended as a result from the use of this program!
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.

Requirements
The following are a list of required third-party tools, you will need to ensure they are in your systems path and
that typing their name in a terminal invokes them.
https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 2/8
12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.

Note
These are seperate requirements that are not installed with the pip command!
You will need to download and install these manually!
Python 3
ffmpeg - This tool is also available in Linux package repositories.
NOTE: It is recommended to use a custom build from the yt-dlp team that contains various patches
for issues when used alongside yt-dlp, however it is not required. Latest builds can be found here
aria2/aria2c - This tool is also available in Linux package repositories
shaka-packager
yt-dlp - This tool is also available in Linux package repositories, but can also be installed using pip if
desired ( pip install yt-dlp )
Usage
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)
Udemy cookies (only required for subscription plans - see Udemy Subscription Plans)
Setting up
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
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
Important
For courses that are encrypted, It is up to you to acquire the decryption keys.
Please DO NOT ask me for help acquiring these!
Enter the key and key id in the keyfile.json
https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 3/8
12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.

Cookies
Tip
Cookies are not required for individually purchased courses.
To download a course included in a subscription plan that you did not purchase individually, you will need to
use cookies. You can also use cookies as an alternative to Bearer Tokens.
The program can automatically extract them from your browser. You can specify what browser to extract
cookies from with the --browser argument. Supported browsers are:
chrome

firefox

opera

edge

brave

chromium

vivaldi

safari

Ready to go
You can now run the program, see the examples below. The course will download to out_dir .
Advanced Usage
usage: main.py [-h] -c COURSE_URL [-b BEARER_TOKEN] [-q QUALITY] [-l LANG] [-cd
CONCURRENT_DOWNLOADS] [--skip-lectures] [--download-assets]
[--download-captions] [--download-quizzes] [--keep-vtt] [--skip-hls] [--
info] [--id-as-course-name] [-sc] [--save-to-file] [--load-from-file]
[--log-level LOG_LEVEL] [--browser
{chrome,firefox,opera,edge,brave,chromium,vivaldi,safari}] [--use-h265] [--h265-crf
H265_CRF] [--h265-preset H265_PRESET]
[--use-nvenc] [--out OUT] [--continue-lecture-numbers]
https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 4/8
12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.

Udemy Downloader

options:
-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_DOWNLOADS, --concurrent-downloads CONCURRENT_DOWNLOADS
The number of maximum concurrent downloads 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
--download-quizzes If specified, quizzes 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
--id-as-course-name If specified, the course id will be used in place of the course
name for the output directory. This is a 'hack' to reduce the path length
-sc, --subscription-course
Mark the course as a subscription based course, use this if you
are having problems with the program auto detecting it
--save-to-file If specified, course content will be saved to a file that can
be loaded later with --load-from-file, this can reduce processing time (Note that asset
links expire after a certain amount of time)
--load-from-file If specified, course content will be loaded from a previously
saved file with --save-to-file, this can reduce processing time (Note that asset links
expire after a certain amount of time)
--log-level LOG_LEVEL
Logging level: one of DEBUG, INFO, ERROR, WARNING, CRITICAL
(Default is INFO)
--browser {chrome,firefox,opera,edge,brave,chromium,vivaldi,safari}
The browser to extract cookies from
--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
--h265-preset H265_PRESET
Set a custom preset value for H.265 encoding. FFMPEG default is
medium
--use-nvenc Whether to use the NVIDIA hardware transcoding for H.265. Only
works if you have a supported NVIDIA GPU and ffmpeg with nvenc support
--out OUT, -o OUT Set the path to the output directory
--continue-lecture-numbers, -n
Use continuous lecture numbering instead of per-chapter

Passing a Bearer Token and Course ID as an argument


python main.py -c <Course URL> -b <Bearer Token>

python main.py -c https://www.udemy.com/courses/myawesomecourse -b <Bearer Token>

https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 5/8
12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.

Download a specific quality


python main.py -c <Course URL> -q 720

Download assets along with lectures


python main.py -c <Course URL> --download-assets

Download assets and specify a quality


python main.py -c <Course URL> -q 360 --download-assets

Download captions (Defaults to English)


python main.py -c <Course URL> --download-captions

Download captions with specific language


- English subtitles
python main.py -c <Course URL> --download-captions -l en

python main.py -c <Course URL> --download-captions -l es - Spanish subtitles

python main.py -c <Course URL> --download-captions -l it - Italian subtitles

python main.py -c <Course URL> --download-captions -l pl - Polish Subtitles

python main.py -c <Course URL> --download-captions -l all - Downloads all subtitles

etc
Skip downloading lecture videos
python main.py -c <Course URL> --skip-lectures --download-captions - Downloads only
captions
python main.py -c <Course URL> --skip-lectures --download-assets - Downloads only assets

Keep .VTT caption files:


python main.py -c <Course URL> --download-captions --keep-vtt

Skip parsing HLS Streams (HLS streams usually contain 1080p quality for Non-DRM lectures):
python main.py -c <Course URL> --skip-hls

Print course information only:


python main.py -c <Course URL> --info

Specify max number of concurrent downloads:


python main.py -c <Course URL> --concurrent-downloads 20

python main.py -c <Course URL> -cd 20

Cache course information:


python main.py -c <Course URL> --save-to-file

Load course cache:


python main.py -c <Course URL> --load-from-file

Change logging level:


python main.py -c <Course URL> --log-level DEBUG

python main.py -c <Course URL> --log-level WARNING

python main.py -c <Course URL> --log-level INFO

python main.py -c <Course URL> --log-level CRITICAL

Use course ID as the course name:


python main.py -c <Course URL> --id-as-course-name

Encode in H.265:
python main.py -c <Course URL> --use-h265

Encode in H.265 with custom CRF:


python main.py -c <Course URL> --use-h265 -h265-crf 20

Encode in H.265 with custom preset:


https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 6/8
12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.

python main.py -c <Course URL> --use-h265 --h265-preset faster

Encode in H.265 using NVIDIA hardware transcoding:


python main.py -c <Course URL> --use-h265 --use-nvenc

Use continuous numbering (don't restart at 1 in every chapter):


python main.py -c <Course URL> --continue-lecture-numbers

python main.py -c <Course URL> -n

Support
if you want help using the program, join my Discord server or use GitHub Issues
Credits
https://github.com/Jayapraveen/Drm-Dash-stream-downloader - For the original code which this is
based on
https://github.com/alastairmccormack/pywvpssh - For code related to PSSH extraction
https://github.com/alastairmccormack/pymp4parse - For code related to mp4 box parsing (used by
pywvpssh)
https://github.com/lbrayner/vtt-to-srt - For code related to converting subtitles from vtt to srt format
https://github.com/r0oth3x49/udemy-dl - For some of the informaton related to using the udemy api
License
All code is licensed under the MIT license
and finally, donations!
Woo, you made it this far!
I spend a lot of time coding things, and almost all of them are for nothing in return. When theres a lot of use
of a program I make, I try to keep it updated, fix bugs, and even implement new features! But after a while, I
do run out of motivation to keep doing it. If you like my work, and can help me out even a little, it would really
help me out. If you are interested, you can find all the available options here. Even if you don't, thank you

Sponsor this project


Puyodead1 Puyodead1
ko-fi.com/puyodead1
patreon.com/Puyodead1
Learn more about GitHub Sponsors
https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 7/8
12/29/24, 8:52 PM Puyodead1/udemy-downloader: A Udemy downloader that can download courses, with DRM support.

Contributors 12

Languages
Python 80.8% HTML 18.7% Dockerfile 0.5%

https://github.com/Puyodead1/udemy-downloader?tab=readme-ov-file 8/8

You might also like