I love Udemy. I've learned so much from their courses, including React and Flutter most recently. Our employer has an unlimited subscription which is great for checking out a lot of these courses, I definitely don't watch every single one available however, but enrolling in a few courses of the same topic shows me what's possible with some technology and which teacher is the best.

I personally prefer Andrew Mead's courses as he actually waits for you to complete a part by yourself before moving on, which I don't see as concretely with other teachers like Girder or Schwarzmüller, who sometimes say to try it on your own, but Mead actually has a moment where you can pause the video and try it, built into the course.

With regards to not having informational density, I've solved this problem by downloading the courses locally [0] and watching them at 4x speed. In a browser, you could set `querySelector("video").playbackRate = 4`, but since the video changes every few minutes, especially at high speed, this isn't too useful. I've actually made a Chromium extension that changes the video/audio playback speed globally since I watch a lot of YouTube at 4x speed as well [1], but again it isn't smart enough to detect when an underlying video source has changed.

Therefore, I use a local player, SMPlayer in specific [2], which is an mpv-based player. The problem, however, is that Chrome is very good at allowing you to understand voices at high speed, and nearly every other player, such as Firefox [3] and others, do not. This seems to be because they saccade the audio, where they skip parts of it, so that it sounds tinny or not understandable (edit: looks like it's fixed in Firefox!). Chrome does not use this approach. I've tried loading playlists into Chrome for this exact purpose, to simply use it as a video player, but the tab crashes because the video files are too large. Now, we return to the local player, SMPlayer.

SMPlayer, as it uses mpv, is able to pass any command line options to mpv. In this case, we are able to change the time-stretching amount by ourselves instead of waiting for Firefox or another player to do so. To do so, go to Options -> General -> Multimedia Engine: mpv, and then Options -> Advanced -> MPlayer/mpv tab -> Options: --speed=4, Audio filters: scaletempo=stride=10. You can play around with the speed and stride, but for the stride, around 8-20 sounds good [4]. It's still not as good as Chrome but it's usable and understandable. I wonder if there's a full way to solve this bug.

Edit: Looks like from [3], someone figured out that you can use the following filters with mpv as well. This just adds the overlap and search arguments in the audio filters. This sounds significantly better than without the overlap and search arguments as above, Chrome level basically.

mpv --af=scaletempo=stride=8:overlap=1:search=10 --speed=4 test.mp3

Anyway, hopefully this helps others move through content faster. You might balk at 4x, but you need to start at something smaller, like 2x, before gradually moving up in speed. I like experiencing content at high speeds personally, and I use similar hacks for other media as well, such as audiobooks and podcasts. For audiobooks (on Android), I use a fork of the Voice Audiobook player [5] which supports speeds up to 6x because the original author did not seem to want to raise the maximum listening rate, citing simplicity concerns for most people. As well, it also seems like only AntennaPod goes up to 4x for podcasts, most podcast players I've seen only go to 3x [6].

[0] Udeler - https://github.com/FaisalUmair/udemy-downloader-gui

[1] Speed - https://chrome.google.com/webstore/detail/speed-global-video...

[2] SMPlayer - https://www.smplayer.info/

[3] Firefox bug with time-stretching - https://bugzilla.mozilla.org/show_bug.cgi?id=1427267

[4] SMPlayer solution for time-stretching - https://forum.smplayer.info/viewtopic.php?f=2&t=9069

[5] Voice Audiobook Player fork - https://github.com/brandonocasey/Voice

[6] AntennaPod - https://antennapod.org/