Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to download .m3u8 in once time

Tags:

I have a .m3u8 file on remote host, with contain fixed numbers of chunk .ts file name, and not stream:

#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:11 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:9.736, media_0.ts #EXTINF:9.96, media_1.ts #EXTINF:10.0, media_2.ts #EXTINF:10.0, media_3.ts #EXTINF:10.0, media_4.ts #EXTINF:10.2, media_5.ts #EXTINF:10.0, 

When I use this command:

# ffmpeg -i "http://example.com/chunklist.m3u8" file.mp4  frame=  582 fps=9.4 q=28.0 size=    1536kB time=00:00:23.21 bitrate= 542.1kbits/s dup=2 drop=4 speed=0.375x 

It works. But It get frame by frame video and very long time needed. (It takes time almost to playback the video.)

But since the path of all the .ts files are known. (http://example.com/media_0.ts, http://example.com/media_1.ts, ...) There must be a way to get and merge them all at the same time.

But How in ffmpeg directly?!

EDIT (try a solution):

For one solution, I know how can concatenation files with ffmpeg.

ffmpeg -i "concat:0.ts|1.ts|2.ts|3.ts|4.ts|5.ts" -c copy output.mp4 

This ffmpeg command was great, and works in less 1 sec time!

So try to download all .ts files with CURL with this command:

curl \ http://example.com/media_0.ts -o 0.ts \ http://example.com/media_1.ts -o 1.ts \ http://example.com/media_2.ts -o 2.ts \ http://example.com/media_3.ts -o 3.ts \ http://example.com/media_4.ts -o 4.ts \ http://example.com/media_5.ts -o 5.ts 

But you can see result:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                  Dload  Upload   Total   Spent    Left  Speed 100  687k  100  687k    0     0  75108      0  0:00:09  0:00:09 --:--:-- 74111 100  652k  100  652k    0     0  59404      0  0:00:11  0:00:11 --:--:-- 53400 100  673k  100  673k    0     0  48675      0  0:00:14  0:00:14 --:--:-- 55781 100  657k  100  657k    0     0  63573      0  0:00:10  0:00:10 --:--:-- 62494 100  671k  100  671k    0     0  39019      0  0:00:17  0:00:17 --:--:-- 40863 100  692k  100  692k    0     0  63480      0  0:00:11  0:00:11 --:--:-- 80049 

See, total download time was 72 sec, while the total duration of all parts is 59 sec! that this time is very long!

So sorry, download all parts and then concat that, was not good solution.

EDIT 2

I try for another .m3u8 file on the another server with difference URL:

Download and concat together:

ffmpeg -i "concat:\ http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_0.ts|\ http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_1.ts|\ http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_2.ts|\ http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_3.ts|\ http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_4.ts|\ http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_5.ts\ " -c copy -y output.ts 

Another command with input.txt URLs file.

ffmpeg -f "concat" -i "input.txt" -c copy -y output.ts 

input.txt file:

file 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_0.ts' file 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_1.ts' file 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_2.ts' file 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_3.ts' file 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_4.ts' file 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/media_w442897525_b560000_5.ts' 

Or this command some time if needed:

ffmpeg -f "concat" -safe "0" -protocol_whitelist "file,http,https,tcp,tls" -i "input.txt" -c copy -y output.ts 

Finally, for that download speed was good, MAYBE my server target has limited bandwidth. :-(

like image 555
Nabi K.A.Z. Avatar asked Nov 11 '17 01:11

Nabi K.A.Z.


People also ask

Can you download a M3U8 file?

M3U8 Downloader. You can download m3u8 live stream video. Uses: You can download m3u8 live stream video to this machine. Why install: Usually you have to go through a professional tool to install, but with my chrome extension, it's quick and easy to use without complicated steps!

Can VLC download M3U8?

A file with the M3U8 file extension is a UTF-8 Encoded Audio Playlist file. They are plain text files that can be used by both audio and video players to describe where media files are located. VLC, Apple's iTunes, Windows Media Player, and Songbird are just a few examples of programs that can open and use M3U8 files.


1 Answers

The correct way to concat multiple video files from m3u8 playlist is

ffmpeg -i "http://example.com/chunklist.m3u8" -codec copy file.mp4


  • the m3u8 playlist can be on web or locally in directory
    • it contains list of file paths relative to the playlist
  • -codec copy to avoid encoding (which takes time)
  • container type matters:
    • *.mp4 is fine but it seems little slow to mux when playlist is fetched from web
    • *.mkv or *.ts worked best for me
like image 197
Vlastimil Ovčáčík Avatar answered Sep 23 '22 18:09

Vlastimil Ovčáčík