How to Download M3U8, TS, & HLS Streaming Videos with FFmpeg

Want to download online streaming video? Here are the steps to download m3u8, TS, and HLS streaming videos using FFmpeg in Windows.

Over the past few years, more and more video streaming services are adopting HTTP Live Streaming (HLS) protocol to better serve the video content. The best thing about HLS is that it is an adaptive streaming protocol. Which simply means that the video streaming can be automatically adjusted for better video playback experience by dividing the video file into multiple smaller chunks with different data rates.

Though HLS improves the video playback experience, one downside of it is that you cannot directly download the video. In fact, you cannot find the direct download link to the video file.

If you act clever and you use some sort of browser extension, all you get is a manifest file with .M3U8 extension. That is not the video file you are looking for.

But, all is not lost. There are many online services that let you download HLS videos without any hassle. However, why depend on a third party web service when you can use FFmpeg, a free and open-source software to download the video?

In case you are wondering, here’s how to download M3U8 video files with FFmpeg.

Download M3U8 Video with FFmpeg

Downloading HLS videos with FFmpeg is way easier than you think. All you have to do is execute a single line command. Since all most all the video streaming services use web-optimized video MP4 format, we are going to download M3U8 video files with FFmpeg and convert them to MP4 format.

1. To start off, download and install FFmpeg if you haven’t already.

2. Next, go to the streaming site from where you want to download and grab the M3U8 video URL. For ease of use, you can use free extensions like Video DownloadHelper available for both Chrome and Firefox to grab the M3U8 file.

3. Now, open the PowerShell or Command Prompt by searching for it in the start menu.

4. Once you have opened the command-line tool and have the M3U8 video URL, replace http://example.com/video_url.m3u8 in the below command with the actual M3U8 video URL and execute it. If you want to, you can customize the output file name by changing output.mp4.

ffmpeg -i "http://example.com/video_url.m3u8" -c copy -bsf:a aac_adtstoasc "output.mp4"

Download M3u8 Video Execute Command

5. As soon as you execute the command, FFmpeg starts the downloading process. i.e, it downloads each individual .ts file and adds them to create a single .mp4 video files. So, depending on the video length and speed of your internet connection, it can take some time to complete the downloading procedure.

Download M3u8 Video - Command Processing

6. Once the procedure has been completed, you can go to the destination folder to see the output file. In my case, the destination folder is C:\Users\Vamsi\.

Download M3u8 Video Saved Video File

That’s all there is to do and it is that simple to download M3U8 video with FFmpeg. If you face any problems while following the procedure, comment below and I will try to help you.

77 thoughts on “How to Download M3U8, TS, & HLS Streaming Videos with FFmpeg”

  1. Avatar for nelscottnelson
    nelscottnelson

    Another method is to use A—-t.
    It can directly download and convert m3u8 videos to mp4, avi, mov, wmv etc.

    1. Avatar for andrea

      Hi, why it is NOT working for me?
      from your suggested addon I go a different m3u8 file, ending in a different manner:
      so
      are you able to download this webcam?
      ffmpeg -i “https://hddn01.skylinewebcams. com/live. m3u8?a=pm9h8vfr31 bv092kqk2ck68t42” -c copy -bsf:a aac_adtstoasc “output.mp4”

  2. Avatar for Mario

    Thank you Sir for the tutorial….great and clear. Do you how about to download the HLS/HDS from its start to a certain point….like usin seek in a url?

  3. Avatar for Mario

    Sir can you also explain the optons in that url. It’s working but it would be nice to know what re the different options in the command line mean

    1. Avatar for Bashkarla

      Hi there,

      -i is for input url/file path. We copy everything (-c copy) we get from the internet and re-encode the stream using the bitstream filter -bsf:a aac_adtstoasc.

      Hope that helps.

  4. Avatar for sagaraptor

    hi…

    [https @ 0000029ef966f680] HTTP error 403 Forbidden
    [hls,applehttp @ 0000029ef8e5a4c0] Failed to open segment 89 of playlist 0

    im trying to download this. been tryin for few day

    Thanks

    1. Avatar for Bashkarla

      Hi there,
      It’s hard to narrow down the issue with the information you provided. I think the source server is blocking direct connections. If that’s the case then there is nothing much you can do.

  5. Avatar for Zack Sanders

    In Most of the cases, the video is downloaded easily but the sound is missing. Is there any workaround to that ?

    1. Avatar for Bashkarla

      Maybe the video and audio files are being delivered in separate streams (like youtube). If that’s the case, you have to download them separately and merge them after the fact.

      1. Avatar for Zack Sanders

        I mean, I have the links for both video and audio and based on what you wrote about downloading the videos, I can download the videos. Should I download the audio using the same command/s ( if not, then please let me know the right ffmpeg powershell commands ) ? And then how do I merge both ( using which commands ) ?

  6. Avatar for javier

    Hello, I’m doing a transmission from m3u8 to twitch but the problem is that the channel is running for a short time and it stops … What’s the problem? Please help and thanks

  7. Avatar for NotStewieGriffin
    NotStewieGriffin

    Hi! This works great! Thanks so much for the comprehensive writeup.

    I do have a question, though. Do you know how to ask it to download (and mux) subtitle tracks as well? I’m not tremendously familiar with ffmpeg command line, and the included help file wasn’t much help.

    Thanks again!

    1. Avatar for Bashkarla

      I’m glad the article helped you.

      Coming to your question, I don’t think MP4 container supports muxing subtitles. You need to download subtitles separately and hard code them using FFmpeg or other tools like Handbrake.

    1. Avatar for Ashwin

      Since we are doing this via CMD or PowerShell you can type && after the first whole command (ffmpeg -i -c copy ) and then && and the next m3u8 stream.

      1. Avatar for David

        **Can you provide an example of the syntax? **
        ffmpeg -i “http://example.com/video_url1.m3u8” -c copy && “http://example.com/video_url2.m3u8” && “http://example.com/video_url3.m3u8” -bsf:a aac_adtstoasc “output.mp4”

        **Also, can it append the multiple output files into one file (i.e. ‘file1.mp4’ + ‘file2.mp4’ + ‘file3.mp4’ = ‘file123.mp4’)?**

  8. Avatar for Genocide-X

    Thank You for the Help!

    Just a Query.. From this Input in the ffmpeg.. Will it Download the Highest Resolution Video & Highest Bitrate Audio?!

  9. Avatar for Balchemist

    Well, my first try is downloading as I write this. I had heard of, and used via a secondary application, ffmpeg. But had never used it as a stand-alone tool. I guess we’ll see how well it works, and how long it takes. I’ve always used ClipConverter.cc for this, but sometimes it’s as slow as molasses going uphill in January. Maybe ffmpeg will be a bit quicker.

    In any event, thanks for the very thorough and easy-to-read write-up. Sure do appreciate it!

    1. Avatar for Bashkarla

      A lot of software use FFmpeg in the background for a variety of workloads. Though it takes some time to get a hang of using FFmpeg directly, it gets easier as you use it.

      Also, thanks for your kind words.

  10. Avatar for Rubb

    Very nice tipp and tutorial. But unfortunately it won’t work with ManyVids. I paid for all those videos but most of them are streams which can’t be downloaded.

    I always get an error massage saying “Server returned 403 forbidden”
    Is there a workaround otr another way to get theses streams?

    Don’t know if Allavsoft will work but i don’t wanna pay another 25 bucks for a programm that won’t work…

    1. Avatar for Bashkarla

      Hi Rubb,

      I don’t quite understand your problem, is the server preventing you from downloading the M3U8 file or the .ts stream files? In any case, if the server is actively blocking you from downloading the files, then there is nothing much you can do.

      1. Avatar for Rubb

        I can’t precisely say what the problem is. I followed the instructions using ffmpeg step by step. And it works. But entering the url in the command prompt always gives me that error message.
        I know that ManyVids is proud of their new security measures and (unfortunately) for a noob like me it really stops me from getting those files.
        But i hope some crack finds a way to bypass this.

  11. Avatar for Eduardo

    I’m trying to downloa d the video but it gives me HTTP error 403 Forbidden:
    I think is related to a user name and password I need to enter in order to access the website.

    Can you advice how can I add the user name and password in ffmpeg?

    best regards

    1. Avatar for Bashkarla

      Hi Eduardo,

      I don’t think this command support password authentication. If the server is actively blocking you from downloading a stream, there is nothing much you can do.

  12. Avatar for Chris K

    Thanks Sir, this was a great way to download stuff, worked very well.

    On the other hand, some are putting on higher walls to prevent downloading as it seems.

    Can you do something now on hdfilme . net for example?

    Thanks Sir! My knowledge of ffmpeg is little ^^

    1. Avatar for Bashkarla

      No matter the website, if you can grab the m3u8 file, you can generally download the video as long as the server is not actively blocking the connection. You can try searching in the chrome web store to find an extension to grab the m3u8 file.

      1. Avatar for Chris K

        Thanks for the quick answer!

        Sadly, it said Permission denied: http://prntscr.com/nnmkhq

        Interessting, the server changed to “hls,applehttp”….I got the M3u8 file via an extension on firefox, that was able to identify multiple m3u8s like playlist.m3u8 but it seems they are not working. the extension was not able to download the content.

        But: Shouldnt it be possible to download any m3u8 stream, since its broadcastet to the screen directly? I know, screencapture, but its not an option due to delays.

        I use firefox but I can try chrome…..I doubt they have apps there that work.

        Thanks for quick response!

          1. Avatar for Bashkarla

            Often times, servers are configured in such a way that they reject any secondary/indirect connections. Maybe that is the reason why you are seeing access denied message.

  13. Avatar for Chris K

    And can I establish a direct connection? Maybe not with the playlist.m3u8 link?

    VLC Download over network didnt work either, trying some things with chrome apps, Jdownloader of course also not working, other tools neither. Maybe I get him ^^

    1. Avatar for Bashkarla

      The problem is, anything other than the source, in this case, the website or website’s video player can be considered as an indirect connection. As such, they can easily block those indirect connections to prevent downloads, hotlinks, and the ability to play in other video players.

      1. Avatar for Chris K

        I am not sure if its possible to play the links in vlc, but its playable in other browser windows with an firefox extension……hmhmhmhmhmhmhmhm ^^

        Not very sure how to progress now

  14. Avatar for Chris K

    And: It seems that Javascript XMLHttp-Request (XHR) is getting the data from the server in the api

    it should be possible to get the fetch-api without the XHR content request….

    I can get bigger chunks of the video, like 1 Minute, so I guess they are combined in the background, but no clue how to read that file or how to find out how many chunks the file has!

  15. Avatar for Marcos Sannin

    what to do when this error appears:

    “Error in the pull function.
    The specified session has been invalidated for some reason.
    […]
    PES packet size mismatch”

    the video is missing and some cuts, can you fix it?

    1. Avatar for Bashkarla

      Hi Marcos, unfortunately, I can’t help you. I recommend you ask the question at StackOverflow as there is will a lot of professionals and experienced users to help you.

  16. Avatar for Sak

    Hi there, thanks for the tutorial, I’m having trouble with the second step, Video-DownloadHelper seems to only see mp4. files of the video in fragments, no m3u8. Though Im certain m3u8/HLS is how this video is streaming.

    How can I make VDH search for m3u8 specifically?

    1. Avatar for Chris K

      you just click on the arrow right to the special file you wanna download, in most cases it has a pixel count to it like 1980 x 1080 and there are some options, one of them is “details” there you see a playlist.m3u8 file

      than you just need a way to download the m3u8 files

      welcome

  17. Avatar for Yako Moonlit

    This is really great and helpful. Does anyone know what to add to the command string to download subtitles as well? I am completely lost with this stuff and this article was really straight forward. Everything I get from Googling is really confusing.

  18. Avatar for Ahmed Hossam

    Thank you so much for the detailed tutorial.

    I face sometimes unstable connection. So while download m3u8 file (which is a list of .TS files) I get an error downloading a segment. FFMPEG continues after that error but it doesn’t retry the failed segment(s).

    Is there any option I can set to retry any failed URL in the m3u8?

    Thanks in adbance

  19. Avatar for bias

    It works! Don’t forget to use the latest binary of ffmpeg. I used an older one and it always returned with error “unknown format”. Go here: https:// e——————. ——/ffmpeg/

    Cheers!

    1. Avatar for Bashkarla

      Always use the official FFmpeg website to download the latest version of FFmpeg.

      Note: Removed the link because I couldn’t verify the authenticity of the website.

  20. Avatar for Swapnajit Banerjee
    Swapnajit Banerjee

    Can this be done in case of a live stream? That is, to get chunked .mp4 files and saving them locally? Thanks in advance!

    1. Avatar for Bashkarla

      Depending on the stream type, you might have to customize the command for better results. I recommend you take a look at FFmpeg wiki or ask for help in their forums.

  21. Avatar for Steve

    Hello Just installed this on a Mac. I was trying to capture ESPN Plus HLS streams. I also wanted to grab a MLB Game. I put this in for the ESPN Plus game.

    I get an illegal instruction 4

    Any idea. Perhaps it was not installed correctly?

  22. Avatar for Nico

    Hi Bashkarla… trying to download this path here https:// ottvsmediaservice. ottvs. com. br/743f7339-b4f8-4592-a36d- e0f82a36e9b0/0067813_movie. ism/QualityLevels (900741)/Manifest (video,format= m3u8-aapl) but what I get is an error “Sample-AES encryption is not supported yet”.

  23. Avatar for llrntz

    is there a way to not download the entire stream but only a part of it? like a ctrl+c but in a way that keeps the video downloaded until that moment?

  24. Avatar for Bob

    Just wanted to say thanks. This worked great where VLC, FF-Video DownloadHelper, IDM and XDM(Xtreme Download Manager) could not download the actual and entire 44 minute video.

  25. Avatar for engasi

    Greetings, for weeks I have tried, with various tools, to configure this link of a 24 hour webcam: https: //videos-3 .earthcam. com/fecnetwork/4282. flv/chunklist_w1472517312 .m3u8
    to see it from the VCL Player with other cameras but if I turn off the player and turn it on later, the video no longer starts and I must then get a new .m3u8 link to play.

    Can you please indicate me a tutorial or tool or parameters to make the .m3u8 play permanently without me having to renew the video on the web.

    Thank you very much.

    1. Avatar for Phil Howard

      if you get a .mp4.part file after stopping ffmpeg then try this to fix the file:

      ffmpeg -i myfile.mp4.part -c copy -f mp4 mynewfile.mp4

  26. Avatar for Phil Howard

    i have been trying to download hls/m3u8 videos from a few sources (including youtube) by letting youtube-dl invoke ffmpeg. all of these videos have period messages about segments being skipped due to expired from playlists. the messages about the .ts files being download have extra number increments shown, suggesting that it is literally not requesting those segments. playing the saved video results in an action freeze at that time, probably because the frame is not updated by missing data. the video is fine in the browser player, suggesting the server can deliver the missing data. how can i tell ffmpeg to just not skip those segments it thinks have expired?

Leave a Comment

Scroll to Top