You-get: Trình tải xuống đơn giản để thu thập nội dung từ web
(github.com/soimort)- You-Get là một tiện ích dòng lệnh nhỏ để tải nội dung media như video, âm thanh, hình ảnh từ web; đây là công cụ dùng khi không có cách đơn giản nào khác
- Có thể tải video, hình ảnh, âm thanh từ nhiều trang như YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili, TikTok, hoặc stream video trực tuyến bằng trình phát media
- Có thể dùng
--infođể xem chất lượng và định dạng khả dụng rồi chọn bằng--itag, nhưng chọn định dạng nhìn chung chưa được triển khai trên hầu hết các trang được hỗ trợ; mặc định là chất lượng cao nhất - Có thể cài đặt qua
pip, tải xuống/clone từ GitHub, Homebrew,pkgcủa FreeBSD, Flox, v.v.; các phụ thuộc khuyến nghị là Python 3.7.4 trở lên, FFmpeg 1.0 trở lên, và RTMPDump là tùy chọn - Cung cấp tải xuống URL trực tiếp, scraping trang web, tải xuống dựa trên tìm kiếm Google Videos, tạm dừng/tiếp tục, proxy, nạp cookie, xuất URL trích xuất/JSON, nhưng một số tính năng vẫn mang tính thử nghiệm hoặc chưa ổn định
You-Get làm gì
- You-Get là một tiện ích dòng lệnh nhỏ để tải nội dung media từ web
- Nội dung mục tiêu gồm video, âm thanh và hình ảnh
- Dùng trong trường hợp không có cách tải xuống đơn giản nào khác trên web
- Các lý do sử dụng được nêu gồm tải xuống để thưởng thức cá nhân, giành quyền kiểm soát với video trực tuyến bị chặn lưu, né tránh công nghệ đóng hoặc JavaScript/Flash độc quyền, cũng như định hướng văn hóa hacker và phần mềm tự do
- Các chức năng chính gồm
- Tải video/âm thanh từ các trang phổ biến như YouTube, Youku, Niconico
- Stream video trực tuyến trong trình phát media mà không cần trình duyệt web
- Thu thập trang web để tải các hình ảnh quan tâm
- Tải nội dung không phải HTML tùy ý, chẳng hạn file nhị phân
Cài đặt và môi trường chạy
- Các phụ thuộc khuyến nghị là Python 3.7.4 trở lên, FFmpeg 1.0 trở lên, và tùy chọn RTMPDump
- Theo thông báo ngày 30/5/2022, hỗ trợ Python 3.5, 3.6, 3.7 cuối cùng sẽ bị ngừng
- Có nhiều cách cài đặt
- Từ PyPI:
pip install you-get - Người dùng Zsh có thể dùng Antigen:
antigen bundle soimort/you-get - Tải nhánh ổn định
masterhoặc nhánhdeveloptừ GitHub git clone git://github.com/soimort/you-get.git, được khuyến nghị cho nhà phát triển- macOS:
brew install you-get - FreeBSD:
pkg install you-get - Mac, Linux, Windows WSL:
flox install you-get
- Từ PyPI:
- Định nghĩa tự động hoàn thành shell cho Bash, Fish, Zsh nằm trong
contrib/completion - Có thể nâng cấp tùy theo cách cài đặt bằng
pip install --upgrade you-get, tải bản phát hành mới nhất, hoặc buộc cài đặt lại nhánhdevelop
Luồng tải xuống cơ bản
- Khi tải video, trước tiên có thể dùng
you-get -i URLhoặc--infođể xem chất lượng và định dạng khả dụng- Kết quả xuất ra gồm trang, tiêu đề, stream, container, chất lượng, kích thước và ví dụ
--itagdùng để tải - Tải xuống mặc định dùng mục đầu tiên trong danh sách
- Kết quả xuất ra gồm trang, tiêu đề, stream, container, chất lượng, kích thước và ví dụ
- Nếu muốn định dạng khác, dùng giá trị
--itaghiển thị trong kết quả- Ví dụ, với video
Me at the zootrên YouTube, có thể chọn mp4 bằng--itag=18
- Ví dụ, với video
- Nếu video YouTube có phụ đề, chúng sẽ được tải xuống cùng file video ở định dạng phụ đề SubRip
- Chọn định dạng vẫn chưa được triển khai như một chức năng phổ biến trên hầu hết các trang được hỗ trợ
- Trong trường hợp này, định dạng tải xuống mặc định là chất lượng cao nhất
- FFmpeg cần thiết để tải xuống/hợp nhất video được stream thành nhiều mảnh và cho video YouTube độ phân giải cao từ 1080p trở lên
- Nếu không muốn hợp nhất các mảnh sau khi tải, dùng
--no-mergehoặc-n
- Nếu không muốn hợp nhất các mảnh sau khi tải, dùng
Tải xuống theo URL, trang web và tìm kiếm
- Nếu có URL tài nguyên chính xác, có thể tải trực tiếp bằng
you-get URL- Ví dụ, khi nhập URL ảnh JPEG, công cụ sẽ hiển thị trang, tiêu đề, loại, kích thước và lưu file
- Nếu đưa vào URL trang web thay vì URL tài nguyên chính xác, công cụ sẽ cố thu thập trang để tìm các mục quan tâm
- Tính năng này mang tính thử nghiệm và chưa hoàn hảo
- Hoạt động tốt nhất khi scraping ảnh lớn trên các trang phổ biến như Tumblr, Blogger
- Không có mẫu phổ quát áp dụng cho mọi trang trên Internet
- Nếu truyền vào một chuỗi không phải URL, công cụ sẽ tìm kiếm trên Google Videos và tải video liên quan nhất
- Kết quả có thể không chính xác là thứ mong muốn, nhưng được mô tả là có khả năng rất hợp lý
Kiểm soát tải xuống và tùy chọn chạy
- Có thể ngắt trong lúc tải bằng
Ctrl+C, và file tạm.downloadsẽ còn lại trong thư mục đầu ra- Chạy lại với cùng đối số sẽ tiếp tục từ phiên trước
- Nếu đã có file hoàn chỉnh không còn phần mở rộng tạm, tải xuống sẽ được bỏ qua
--forcehoặc-fbuộc tải lại, ghi đè file hiện có hoặc file tạm cùng tên
- Có thể chỉ định đường dẫn lưu bằng
--output-dirhoặc-o, và chỉ định tên file bằng--output-filenamehoặc-O- Hữu ích khi tiêu đề video mặc định chứa ký tự đặc biệt không tương thích với shell, hệ điều hành hoặc hệ thống file hiện tại
- Cũng hữu ích khi lưu bằng thư mục và tên chỉ định trong script tải xuống hàng loạt
- Có thể chỉ định HTTP proxy bằng
--http-proxyhoặc-x- Mặc định áp dụng biến môi trường
http_proxy, tức thiết lập proxy của hệ thống - Dùng
--no-proxyđể tắt proxy - Với một số trang như Youku, có thể dùng
--extractor-proxyhoặc-ykhi trích xuất thông tin video chỉ truy cập được từ Trung Quốc đại lục
- Mặc định áp dụng biến môi trường
--playerhoặc-pchuyển video cho trình phát media nhưmpv,vlcthay vì tải xuống- Nếu chỉ định trình duyệt làm trình phát, có thể xem trong trình duyệt mà không có quảng cáo hay phần bình luận
- Cũng có thể dùng để khởi động trình quản lý tải xuống khác, nhưng có thể không thật phù hợp
Xác thực, dữ liệu trích xuất, trang được hỗ trợ
- Với nội dung cần đăng nhập tài khoản như video không công khai, phải truyền cookie trình duyệt bằng
--cookieshoặc-c- Các định dạng cookie hiện được hỗ trợ là Mozilla
cookies.sqlitevà Netscapecookies.txt
- Các định dạng cookie hiện được hỗ trợ là Mozilla
--urlhoặc-uxuất danh sách URL tài nguyên có thể tải xuống được trích xuất từ trang--jsonxuất tóm tắt dữ liệu trích xuất ở định dạng JSON- Tính năng này chưa ổn định và schema JSON có thể có thay đổi phá vỡ tương thích trong tương lai
- Danh sách trang được hỗ trợ gồm YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok, Zhihu, v.v.
- Mỗi trang có mức hỗ trợ video, hình ảnh, âm thanh khác nhau
- Với các trang không có trong danh sách, trình trích xuất đa dụng sẽ tìm các tài nguyên quan tâm trên trang và tải xuống
Báo cáo vấn đề và giấy phép
- Khi không tải được nội dung mong muốn, trước tiên hãy kiểm tra Known Bugs
- Trước khi báo cáo vấn đề mới hoặc đóng góp, cần đọc hướng dẫn đóng góp
- Có thể đặt câu hỏi nhanh tại kênh Gitter #soimort/you-get
- Phần mềm được phân phối theo MIT license
- Phần mềm được cung cấp “nguyên trạng”, không có bảo đảm
- Tác giả không chịu trách nhiệm đối với hành vi vi phạm bản quyền hoặc sử dụng cho mục đích bất hợp pháp khác
- Kho lưu trữ chỉ cung cấp mã nguồn, còn cách sử dụng là tùy quyết định của người dùng
1 bình luận
Ý kiến trên Hacker News
Có một thời gian internet đắt đỏ và băng thông thấp, nhưng tôi rất thích nghe nhạc và bài giảng trên YouTube. Đến một lúc nào đó tôi nhận ra rằng chỉ cần lấy luồng âm thanh thì có thể giảm 90% chi phí băng thông
youtube-dlvàyt-dlpcó cờ-Gđể in ra URL của định dạng/chất lượng được yêu cầu, và trên máy tính tôi lấy URL bằng dòng lệnh rồi đưa vào VLC để dùngTrên điện thoại, ban đầu tôi dùng một cách vòng vo khá rắc rối là SSH vào VPS để tải tệp trước rồi lại tải xuống điện thoại, nhưng sau đó biết được rằng trình duyệt trên điện thoại có thể phát trực tiếp URL nên tôi đã làm một frontend PHP cho
youtube-dl -G -f bestaudio {url}Giờ nó không còn online nữa và tôi cũng làm mất mã nguồn, nhưng thực ra gần như chỉ là một dòng. Có vẻ
you-getcũng hỗ trợ cùng mục đích đó với--url/-u, nên tôi muốn nói rằng tính năng này hữu ích đến mức nàoNếu tắt màn hình khi phát thì còn tiết kiệm 80% pin. Có vẻ YouTube cũng biết điều này, nên đã biến phát nền chỉ lấy luồng âm thanh thành tính năng trả phí
youtube-dlkhông còn hoạt động tốt nữa, và tôi phải dùng bản fork là yt-dlp. Việc chuyển dự án như thế này lúc nào cũng khiến tôi thấy bất an, nhưng ít nhất có vẻ nó được dùng khá rộng rãinode-redđể xử lý khi bà chia sẻ liên kết YouTubeLiên kết được đưa vào FIFO, rồi một daemon nhỏ tải lần lượt và lưu vào thư mục incoming chuyên dụng. Bot có thể lấy chỉ âm thanh hoặc cả video đầy đủ, nhưng với Telegram ID của mẹ tôi thì tôi cấu hình chỉ nhận âm thanh
Thư mục này được Jellyfin theo dõi, nên mẹ tôi có thể tải xuống hoặc nghe ngay. Trong 2 năm bà đã nhận hơn 1TB audiobook và rất thích
Mã daemon: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
Video 144p có gì đó kỳ lạ mà yên bình và dễ chịu. Không bị những màu sắc lấp lánh hay chi tiết phức tạp làm xao nhãng, nên có thể chỉ tập trung vào việc nghe
Tôi chủ yếu dùng cách này để phát các video chỉ dành cho thành viên mà kể cả có YouTube Premium thì vẫn không phát nền được. Mỗi lần iOS cập nhật tôi đều cầu mong họ đừng vá “lỗi” này
Có vẻ dự án này không muốn nhận issue chỉ để báo lỗi mà không kèm PR sửa
Theo kiểu “để báo vấn đề phát hiện khi dùng you-get, bạn cần mở Pull Request...”, và tôi chưa từng thấy cách làm như vậy trước đây
Yêu cầu là mô tả chi tiết vấn đề và ít nhất một commit xử lý vấn đề đó dưới dạng unit test. Từ “addressing” ở đây không hay lắm, có lẽ “demonstrating” sẽ phù hợp hơn
you-gethiện đang thử nghiệm một cách tiếp cận quyết liệt trong xử lý issue, theo đó báo lỗi phải được xử lý bằng mã thông qua pull requesthttps://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
Chắc là họ đã bị spam quá nhiều. Nhân tiện,
tests/test.pycó vẻ chạy trực tiếp extractor với nhiều website, và tôi không tìm thấy chỗ nào họ mock request hay response mạng. Có thể họ muốn đơn giản hóa quy trình cho người gửi PRyou-get, nên không biết họ đã phải trải qua những gìĐây có thể là cách hiệu quả để lọc bớt làn sóng issue lặp đi lặp lại từ những người thậm chí không biết chạy chương trình dòng lệnh cho đúng
Nếu nhờ vậy mà việc bảo trì dự án dễ hơn và tồn tại lâu hơn, thì tôi thấy cũng ổn
Chỉ nhìn tiêu đề và phần đầu mô tả, tôi đã tưởng đây là một công cụ dựa trên heuristic để mò ra bất cứ thứ gì trên trang. Kiểu công cụ hữu ích khi không có bộ hỗ trợ riêng cho một site cụ thể, tức là trong đa số trường hợp là “khi yt-dlp không hỗ trợ”
Nhưng thực tế nó là cấu trúc dựa trên extractor, có extractor riêng cho từng nguồn tương đối phổ biến. Rốt cuộc có lẽ nó gần với một bản sao yt-dlp đơn giản hơn hơn là thứ khác
Không rõ có ai khác vẫn gặp lỗi này hay không
Bắt đầu với
you-get: [error] oops, something went wrong., rồi hướng dẫn kiểm tra sự cố mạng, xác nhận đang dùng phiên bản mới nhất, kiểm tra các lỗi đã biết và chạy với tùy chọn--debugCờ debug cũng không giúp được bao nhiêu, và tại
pattern = str(pattern, 'latin1')đã xuất hiệnTypeError: decoding to str: need a bytes-like object, NoneType foundTôi định xem có thể vượt qua giới hạn độ tuổi hay không, nhưng cùng lỗi đó cũng xảy ra với cả video không có giới hạn độ tuổi
Có thể chuyển sang Python mới nhất bằng công cụ như Pyenv, hoặc chạy một image Docker kiểu
docker run -it -v $(pwd):/mnt python:3.13 bashrồi dùng tiện ích bên trong đóCó ai giải thích được vì sao cái này tốt hơn yt-dlp không?
Ví dụ, việc có một trình nối mp4 chuyên dụng khá lạ. Nếu đã có ffmpeg rồi thì gần như không thể tự làm tốt hơn được
https://github.com/soimort/you-get/blob/develop/src/you_get/...
Khó mà gọi chính xác một trình tải media kiểu ytdl, có thư viện trích xuất theo từng trang và bộ chuyển đổi, là một công cụ thực sự “ngu ngốc”, nhưng việc có thêm các dự án như ytdl vẫn là điều tốt
Tôi không thực sự hiểu vì sao danh sách site được hỗ trợ lại có Bandcamp. Bandcamp cho phép bạn просто tải file về nếu trả tiền cho nghệ sĩ trước
Thứ có thể tải bằng công cụ này là do nghệ sĩ cho phép nghe thử miễn phí trước khi mua. Tải xuống bằng công cụ này có vẻ hoàn toàn không cần thiết và hơi bất lịch sự. Bandcamp chủ yếu là các nghệ sĩ và hãng đĩa indie quy mô nhỏ
Cá nhân tôi đôi khi muốn, hoặc buộc phải, tiêu thụ media ngoại tuyến vì mạng không ổn định hay chậm, hoặc vì nhà mạng quá đắt. Điều đó không có nghĩa là nếu thích thì sau này tôi sẽ không trả tiền
Có vẻ được làm khá tốt. Nhưng từ góc nhìn người dùng, tôi vẫn tò mò vì sao nên dùng
you-getthay vì yt-dlpNó có điểm mạnh nào so với yt-dlp, vốn hoạt động khá tốt trên một lượng lớn site?
[1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....
Trong phần mô tả có câu “Tìm kiếm và tải xuống từ Google Videos:
$ you-get "Richard Stallman eats"”Tôi không hay đọc tài liệu hướng dẫn, nhưng lần này có đọc và phát hiện ra một easter egg khá kinh tởm
Tôi thích nó. Tôi hình dung sẽ hay nếu có tiện ích mở rộng đi kèm cho Chrome/Firefox, dùng
you-getlàm backend và được triển khai mượt màĐi xa hơn nữa, có thể nghĩ tới một tiện ích
you-getbỏ qua trình phát YouTube và phát trực tiếp nội dung không quảng cáo khi bạn vào YouTube. Không chỉ YouTube mà còn có thể áp dụng cho các nền tảng kháchttps://addons.mozilla.org/en-US/firefox/addon/faststream/?u...