Làm thế nào để tải video từ các trang web sử dụng giao thứ HLS với m3u8 file

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 những bạn hoàn toàn có thể tìm hiểu thêm 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:

  • Cài đặt FFmpeg, Tải tại đây

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 terminal
    ffmpeg - i https://path_to_m3u8_file - c copy - bsf : a aac_adtstoasc output. mp4
  • Đợi cho ffmpeg tải file output.mp4 về máy là xong ! :rofl:

= = = = = = = = = = = = = = = = = = = = = =
Để tải về video từ youtube, những bạn hoàn toàn có thể sử dụng youtube-dl .
Cách setup khá đơn thuần, chạy những câu lệnh sau trên terminal :

USDsudocurl - L https://yt-dl.org/downloads/latest/youtube-dl - o /usr/local/bin/youtube-dl
USDsudo chmoda+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 :

USDyoutube-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 53 k, opus @ 50 k ( 48000H z ), 3.02 MiB 250 webm audio only tiny 69 k, opus @ 70 k ( 48000H z ), 3.77 MiB 140 m4a audio only tiny 130 k, m4a_dash container, mp4a. 40.2 @ 128 k ( 44100H z ), 7.89 MiB 251 webm audio only tiny 133 k, opus @ 160 k ( 48000H z ), 6.94 MiB 160 mp4 256x144 144 p 73 k, avc1. 4 d400c, 30 fps, video only, 2.31 MiB 278 webm 256x144 144 p 121 k, webm container, vp9, 30 fps, video only, 5.69 MiB 133 mp4 426x240 240 p 128 k, avc1. 4 d4015, 30 fps, video only, 4.25 MiB 242 webm 426x240 240 p 174 k, vp9, 30 fps, video only, 5.75 MiB 134 mp4 640x360 360 p 245 k, avc1. 4 d401e, 30 fps, video only, 7.42 MiB 243 webm 640x360 360 p 284 k, vp9, 30 fps, video only, 8.43 MiB 135 mp4 854x480 480 p 351 k, avc1. 4 d401f, 30 fps, video only, 10.80 MiB 244 webm 854x480 480 p 394 k, vp9, 30 fps, video only, 12.10 MiB 136 mp4 1280x720 720 p 472 k, avc1. 4 d401f, 30 fps, video only, 15.93 MiB 247 webm 1280x720 720 p 668 k, vp9, 30 fps, video only, 21.65 MiB 137 mp4 1920x1080 1080 p 1710 k, avc1. 640028, 30 fps, video only, 72.11 MiB 248 webm 1920x1080 1080 p 2080 k, vp9, 30 fps, video only, 92.92 MiB 43 webm 640x360 360 p, vp8. 0, vorbis @ 128 k, 40.76 MiB 18 mp4 640x360 360 p 377 k, avc1. 42001E, mp4a. 40.2 @ 96 k ( 44100H z ), 22.98 MiB 22 mp4 1280x720 720 p 390 k, avc1. 64001F, mp4a. 40.2 @ 192 k ( 44100H z ) ( best )

Để tải về định dạng mong ước :

USDyoutube-dl - f 248+251 https://youtubelink

Để hoàn toàn có thể tải về 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 setup thì mình đã ghi trong đầu bài viết .
Câu lệnh dùng để tải về chuẩn video + audio và merge lại thành một file như sau :

USDyoutube-dl - f ' bestvideo [ ext = webm ] + bestaudio [ ext = webm ] ' -- merge-output-format webm https://youtubelink
hoặcUSDyoutube-dl 

-f

' bestvideo [ ext = mp4 ] + bestaudio [ ext = m4a ] ' -- merge-output-format mp4 https://youtubelink

Done !

Leave a comment

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *