Trước hết, HLS
là viết tắt của chữ HTTP Live Streaming
, là một giao thức streaming bitrate được phát triển bởi Apple. Không giống như các kỹ thuật thông thường, HLS
sử dụng cách chia tệp tin video ra làm nhiều file nhỏ, các file này thường có đuôi .ts
và được stream tuần tự về phía player của người dùng.
Khi create một video dưới dạng HLS
, chúng ta sẽ thu được file .m3u8
, file này chính là file chứ index tới các file .ts
. Nhờ vào nội dung file này mà player biết được cần tải các file nào về và timing play như thế nào.
Chi tiết hơn về HSL các bạn có thể tham khảo tại đây và tại đây nữa.
Để convert một video sang định dạng HLS
chúng ta có thể sử dụng một công cụ rất mạnh, đó là FFmpeg (Tác giả của nó chính là Fabrice Bellard).
Đi thẳng vào vấn đề chính, ở đây mình đang tham gia một số khoá học trên Linux Academy, tuy nhiên do muốn học cả lúc offline trên thiết bị di dộng nên muốn tải video của các course trên site về máy. Sau khi inspect network thì thấy rằng website đang sử dụng giao thức HLS
để truyền phát video, việc tải về khá đơn giản. Các bạn có thể làm như sau:
Step 1:
Step 2:
- Sau khi hoàn thành bước 1, hãy mở trình duyệt Chrome lên & sử dụng tính năng [Developer Tools] > Chọn tab [Network] > Nhập text
m3u8
vào input filter như trong hình dưới và truy cập tới video bài học. - Sau đó chỉ cần copy lại URL tới file
.m3u8
và chạy câu lệnh sau trên terminalffmpeg -i https://path_to_m3u8_file -c copy -bsf:a aac_adtstoasc output.mp4
- Đợi cho
ffmpeg
tải fileoutput.mp4
về máy là xong !
======================
Update 09/26
Để download video từ youtube, các bạn có thể sử dụng youtube-dl.
Cách cài đặt khá đơn giản, chạy các câu lệnh sau trên terminal:
$ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
$ sudo chmod a+rx /usr/local/bin/youtube-dl
Để tải 1 video từ youtube bất kỳ, bạn chỉ cần sử dụng cú pháp sau:
$ youtube-dl https://youtubelink
Để lựa chọn các định dạng sẵn có bạn thêm flag -F
vào:
$ youtube-dl -F https://youtubelink
[youtube] XXX: Downloading webpage
[youtube] XXX: Downloading video info webpage
[info] Available formats for XXX:
format code extension resolution note
249 webm audio only tiny 53k , opus @ 50k (48000Hz), 3.02MiB
250 webm audio only tiny 69k , opus @ 70k (48000Hz), 3.77MiB
140 m4a audio only tiny 130k , m4a_dash container, mp4a.40.2@128k (44100Hz), 7.89MiB
251 webm audio only tiny 133k , opus @160k (48000Hz), 6.94MiB
160 mp4 256x144 144p 73k , avc1.4d400c, 30fps, video only, 2.31MiB
278 webm 256x144 144p 121k , webm container, vp9, 30fps, video only, 5.69MiB
133 mp4 426x240 240p 128k , avc1.4d4015, 30fps, video only, 4.25MiB
242 webm 426x240 240p 174k , vp9, 30fps, video only, 5.75MiB
134 mp4 640x360 360p 245k , avc1.4d401e, 30fps, video only, 7.42MiB
243 webm 640x360 360p 284k , vp9, 30fps, video only, 8.43MiB
135 mp4 854x480 480p 351k , avc1.4d401f, 30fps, video only, 10.80MiB
244 webm 854x480 480p 394k , vp9, 30fps, video only, 12.10MiB
136 mp4 1280x720 720p 472k , avc1.4d401f, 30fps, video only, 15.93MiB
247 webm 1280x720 720p 668k , vp9, 30fps, video only, 21.65MiB
137 mp4 1920x1080 1080p 1710k , avc1.640028, 30fps, video only, 72.11MiB
248 webm 1920x1080 1080p 2080k , vp9, 30fps, video only, 92.92MiB
43 webm 640x360 360p , vp8.0, vorbis@128k, 40.76MiB
18 mp4 640x360 360p 377k , avc1.42001E, mp4a.40.2@ 96k (44100Hz), 22.98MiB
22 mp4 1280x720 720p 390k , avc1.64001F, mp4a.40.2@192k (44100Hz) (best)
Để download định dạng mong muốn:
$ youtube-dl -f 248+251 https://youtubelink
Để có thể download riêng video và audio, sau đó merge lại thành 1 file thì bạn cần cài thêm FFMPEG hoặc Arconv. Cách cài đặt thì mình đã ghi trong đầu bài viết.
Câu lệnh dùng để download chuẩn video+audio và merge lại thành một file như sau:
$ youtube-dl -f 'bestvideo[ext=webm]+bestaudio[ext=webm]' --merge-output-format webm https://youtubelink
hoặc
$ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' --merge-output-format mp4 https://youtubelink
Done !