I want to download video, but I want to download it in a way that you can't see that the video hasn't been just watched, but downloaded. Is there a a way to do that?

The only thing I can think of is streaming the video (e.g. in VLC) and recording the screen but that seems pretty dumb to be honest. I read that the problem why it can be traced whether the video has been downloaded or not is that streams are requested in chunks, but video download programs often download the whole thing at once. It's about rather short videos (5-20 mins), not movies or something like that.

  • 1
    Software recommendations are off topic, I'm afraid. It might also fall under attempting to break the security of a specific system - if they're detecting this, there is probably a reason, even if it's just "we want to charge per view"...
    – Matthew
    Oct 20 '16 at 10:08
  • 1
    I like this question, hope it stays open. I doubt there are tools now, e.g. a stealth mode for youtube-dl. But descriptions of generic stealth techniques would be intresting
    – paj28
    Oct 20 '16 at 11:17
  • I think the answer depends on how the video is streamed. Is it Flash? HTML5? What file format?
    – Anders
    Oct 20 '16 at 11:21
  • 1
    Just a thought: Watch the video legitimately, and record all the network traffic.. Figure out a way to decode the capture offline. Trick, but avoids the quality loss with screen recording.
    – paj28
    Oct 20 '16 at 11:22

You are asking the wrong question. The right question is:

How a website knows if a video has been watched or downloaded?

And the simple answer is: It cannot know for sure.

The example I'll use for this argument is the way how most Linux users watch videos. The backend of video display on Linux is today ffmpeg (which is used by mpv and vlc as well). The backend supports youtube URLs by means of youtube-dl (and youtube-dl is/can be used in VLC).

When a user types (or I do it, since I just typed this to make a test):

mpv https://www.youtube.com/watch?v=B3NcgOs0LYo

The video is downloaded to my machine before playing.

Browser note

But wait, when I watch a video through a browser is isn't being downloaded right? Wrong. When you watch a video through a browser the video is downloaded to your machine alright before being displayed. The video need to reach your machine's memory at some point to be played.

Therefore there is (almost) no difference between using a streaming player (vlc or mpv) and watching from a browser. There are just a couple of differences. When you watch through a browser you also see the rest of the website, the banners are fetched, the JS is executed. If someone on the streaming website can look at the webserver logs he can conlude whether you saw the page through a browser or not (stream players do not have JS engines).


A website maintainer can tell if you looked at a webpage or not when you were watching the video. He can, therefore, tell is you used the browser interface to his website or a streaming player. But he cannot tell the difference between a streming player and a download, because the steaming player already performs the download anyway.

Can a website claim that stream players are the same as downloads of a video? Not really, the number of people using stream players is big, notably VLC.

One of the biggest reasons that people started using streaming players was to escape from using the Flash Plugin (which is famous for being particularly buggy in terms of security). This is less of a problem today (with HTML5 streaming implemented widely), but still a reason why so many streaming players are used.

Disclaimer: When DRM comes into play things change. Unfortunately (fortunately?) I have almost no experience with DRM

  • 1
    Nice answer. While they cannot know for sure, I would bet that YouTube internally detect bot downloads quite reliably. The minor differences are all they need.
    – paj28
    Oct 20 '16 at 11:18
  • @paj28 - True. You can argue that instead of downloading a video you're watching it in VLC (it is all youtube-dl after all). But you certainly cannot argue that you are watching 37 different videos concurrently. They can do some stats on the number of parallel connections from the same machine (and, while at that, do some clever passive fingerprinting to differentiate machines behind a NAT). But again, it can only work for real bots that try to perform a lot of donwloads.
    – grochmal
    Oct 20 '16 at 12:10

If you are worried that the server will be able to spot that you are not streaming but downloading by using some kind of heuristic, I think the solution is to simply stream instead of downloading, and then capture the data from the stream.

The data capturing could be done on different stages. In chronological order, we have:

  • On the network, capturing the packets. To decode them to some useful format you would probably need a special purpose built program. Just using Wireshark would give you all the data, but you would not be able to just hit play to watch the video...
  • In the browser that plays the video. I think there are multiple browser extrentions that might do this, but I have not tested any of them.
  • As you mention, by recording the screen as the video if played. This could, however, result in a quality loss.

Unless you want to start hacking away yourself you will need software, but specific recommendations for that is beyond the scope of this site.

A different approach would be to just use a VPN so you can download the video anonymously. They will still be able to know it was you if there is some kind of login required to view it, though.

  • 1
    I like the VPN idea (+1), forgot about that.
    – grochmal
    Oct 20 '16 at 12:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.