yt-dlp/yt-dlp
Trình tải xuống âm thanh/video dòng lệnh giàu tính năng
README
yt-dlp là trình tải xuống âm thanh/video dòng lệnh giàu tính năng với sự hỗ trợ cho hàng ngàn trang web. Dự án là một nhánh của youtube-dl dựa trên hiện không hoạt động youtube-dlc.
- LẮP ĐẶT
- SỬ DỤNG VÀ LỰA CHỌN
- Tùy chọn chung
- Tùy chọn mạng
- Giới hạn địa lý
- Lựa chọn video
- Tùy chọn tải xuống
- Tùy chọn hệ thống tập tin
- Tùy chọn hình thu nhỏ
- Tùy chọn lối tắt Internet
- Tùy chọn mô phỏng và chi tiết
- cách giải quyết
- Tùy chọn định dạng video
- Tùy chọn phụ đề
- Tùy chọn xác thực
- Tùy chọn xử lý hậu kỳ
- Tùy chọn chặn nhà tài trợ
- Tùy chọn trình trích xuất
- Bí danh đặt trước
- CẤU HÌNH
- MẪU ĐẦU RA
- LỰA CHỌN ĐỊNH DẠNG
- SỬA ĐỔI SIÊU DỮ LIỆU
- LUẬN LUẬT TUYỆT VỜI
- PLUGIN
- NHẮP YT-DLP
- NHỮNG THAY ĐỔI TỪ YOUTUBE-DL
- ĐÓNG GÓP
- WIKI
LẮP ĐẶT
Bạn có thể cài đặt yt-dlp bằng cách sử dụng các nhị phân, pip hoặc một cái sử dụng trình quản lý gói của bên thứ ba. Xem wiki để được hướng dẫn chi tiết
PHÁT HÀNH TẬP TIN
Được đề xuất
| tập tin | Mô tả |
|---|---|
| yt-dlp | Nền tảng độc lập nhập khẩu zip nhị phân. Cần Python (được khuyến nghị cho Linux/BSD) |
| yt-dlp.exe | Windows (Win8+) nhị phân x64 độc lập (được khuyến nghị cho cửa sổ) |
| yt-dlp_macos | Thực thi độc lập Universal MacOS (10.15+) (được khuyến nghị cho MacOS) |
Lựa chọn thay thế
| tập tin | Mô tả |
|---|---|
| yt-dlp_linux | Linux (glibc 2.17+) nhị phân x86_64 độc lập |
| yt-dlp_linux.zip | Linux chưa được đóng gói (glibc 2.17+) có thể thực thi x86_64 (không tự động cập nhật) |
| yt-dlp_linux_aarch64 | Linux (glibc 2.17+) nhị phân aarch64 độc lập |
| yt-dlp_linux_aarch64.zip | Linux chưa được đóng gói (glibc 2.17+) có thể thực thi aarch64 (không tự động cập nhật) |
| yt-dlp_linux_armv7l.zip | Linux chưa được đóng gói (glibc 2.31+) có thể thực thi armv7l (không tự động cập nhật) |
| yt-dlp_musllinux | Linux (musl 1.2+) nhị phân x86_64 độc lập |
| yt-dlp_musllinux.zip | Linux chưa được đóng gói (musl 1.2+) có thể thực thi x86_64 (không tự động cập nhật) |
| yt-dlp_musllinux_aarch64 | Linux (musl 1.2+) nhị phân aarch64 độc lập |
| yt-dlp_musllinux_aarch64.zip | Linux chưa được đóng gói (musl 1.2+) có thể thực thi aarch64 (không tự động cập nhật) |
| yt-dlp_x86.exe | Hệ nhị phân x86 (32-bit) độc lập của Windows (Win8+) |
| yt-dlp_win_x86.zip | Windows (Win8+) x86 (32-bit) chưa được đóng gói (không tự động cập nhật) |
| yt-dlp_arm64.exe | Hệ nhị phân ARM64 độc lập của Windows (Win10+) |
| yt-dlp_win_arm64.zip | Windows (Win10+) chưa được đóng gói có thể thực thi ARM64 (không tự động cập nhật) |
| yt-dlp_win.zip | Windows (Win8+) chưa được đóng gói có thể thực thi x64 (không tự động cập nhật) |
| yt-dlp_macos.zip | Có thể thực thi MacOS (10.15+) chưa được đóng gói (không tự động cập nhật) |
linh tinh
| tập tin | Mô tả |
|---|---|
| yt-dlp.tar.gz | tarball nguồn |
| SHA2-512SUMS | Tổng SHA512 kiểu GNU |
| SHA2-512SUMS.sig | Tệp chữ ký GPG cho số tiền SHA512 |
| SHA2-256SUMS | Tổng SHA256 kiểu GNU |
| SHA2-256SUMS.sig | Tệp chữ ký GPG cho số tiền SHA256 |
Khóa công khai có thể được sử dụng để xác minh chữ ký GPG là có sẵn ở đây Cách sử dụng ví dụ:
curl -L https://github.com/yt-dlp/yt-dlp/raw/master/public.key | gpg --import
gpg --verify SHA2-256SUMS.sig SHA2-256SUMS
gpg --verify SHA2-512SUMS.sig SHA2-512SUMS
Cấp phép
Mặc dù yt-dlp được cấp phép theo Không có giấy phép, nhiều tệp phát hành chứa mã từ các dự án khác có giấy phép khác.
Đáng chú ý nhất là các tệp thực thi đi kèm PyInstaller bao gồm mã được cấp phép GPLv3+ và do đó tác phẩm kết hợp được cấp phép theo GPLv3+.
Tệp thực thi Unix zipimport (yt-dlp) và giải phóng tarball (yt-dlp.tar.gz) chứa ISC mã được cấp phép từ meriyah và MIT mã được cấp phép từ astring.
Xem THIRD_PARTY_LICENSES.txt để biết thêm chi tiết.
Kho lưu trữ git, bản phân phối nguồn PyPI và bản phân phối (bánh xe) được xây dựng PyPI chỉ chứa mã được cấp phép theo Không có giấy phép.
Lưu ý: Các trang hướng dẫn, các tập tin hoàn thiện shell (tự động hoàn thành), v.v. đều có sẵn bên trong tarball nguồn
CẬP NHẬT
Bạn có thể sử dụng yt-dlp -U để cập nhật nếu bạn đang sử dụng phát hành nhị phân
Nếu bạn được cài đặt với pip, chỉ cần chạy lại lệnh tương tự đã được sử dụng để cài đặt chương trình
Đối với các trình quản lý gói bên thứ ba khác, hãy xem wiki hoặc tham khảo tài liệu của họ
Hiện tại có ba kênh phát hành cho các tệp nhị phân: stable, nightly và master.
stablelà kênh mặc định cung cấp các bản phát hành được xuất bản theo lịch trình (hầu hết) hàng tháng. Trong khi nó được đặt tênstabledo nhiều thay đổi của nó đã được người dùng thử nghiệmnightlyhoặcmasterkênh phát hành, mới nhấtstablebản phát hành thường "cũ" và dễ bị hỏng bên ngoài (tức là các trang web thay đổi mọi thứ ở phần cuối và phá vỡ yt-dlp).- các
nightlykênh cung cấp các bản phát hành xuất bản ngay trước nửa đêm UTC vào bất kỳ ngày nào có thay đổi đối với cơ sở mã. Kênh này đóng vai trò như một bức ảnh chụp nhanh về quá trình phát triển của dự án và nó là kênh kênh được đề xuất cho người dùng thường xuyên của yt-dlp. cácnightlybản phát hành có sẵn từ yt-dlp/yt-dlp-nightly-build hoặc dưới dạng bản phát hành phát triển củayt-dlpGói PyPI (có thể được cài đặt bằng pip's--precờ). - các
masterkênh cung cấp các bản phát hành "canary" xuất bản sau mỗi lần đẩy lên nhánh chính. Kênh này sẽ luôn cung cấp các bản sửa lỗi và tính năng mới nhất nhưng có thể dễ bị lỗi hoặc bị lỗi. cácmasterbản phát hành có sẵn từ yt-dlp/yt-dlp-master-build.
Khi sử dụng --update/-U, tệp nhị phân phát hành sẽ chỉ cập nhật lên kênh hiện tại của nó.
--update-to CHANNEL có thể được sử dụng để chuyển sang kênh khác khi có phiên bản mới hơn. --update-to [CHANNEL@]TAG cũng có thể được sử dụng để nâng cấp hoặc hạ cấp các thẻ cụ thể từ một kênh.
Bạn cũng có thể sử dụng --update-to <repository> (<owner>/<repository>) để cập nhật lên kênh trên một kho lưu trữ hoàn toàn khác. Tuy nhiên, hãy cẩn thận với kho lưu trữ mà bạn đang cập nhật, không có xác minh nào được thực hiện đối với các tệp nhị phân từ các kho lưu trữ khác nhau.
Cách sử dụng ví dụ:
yt-dlp --update-to masterchuyển sangmasterkênh và cập nhật lên bản phát hành mới nhấtyt-dlp --update-to [email protected]nâng cấp/hạ cấp để phát hành lênstablethẻ kênh2023.07.06yt-dlp --update-to 2023.10.07nâng cấp/hạ cấp xuống thẻ2023.10.07nếu nó tồn tại trên kênh hiện tạiyt-dlp --update-to example/[email protected]nâng cấp/hạ cấp xuống bản phát hành từexample/yt-dlpkho lưu trữ, thẻ2023.09.24
Quan trọng: Bất kỳ người dùng nào gặp sự cố với stable bản phát hành nên cài đặt hoặc cập nhật lên nightly phát hành trước khi gửi báo cáo lỗi:
# To update to nightly from stable executable/binary:
yt-dlp --update-to nightly
# To install nightly with pip:
python -m pip install -U --pre "yt-dlp[default]"
Khi chạy phiên bản yt-dlp cũ hơn 90 ngày, bạn sẽ thấy thông báo cảnh báo đề xuất cập nhật lên phiên bản mới nhất. Bạn có thể chặn cảnh báo này bằng cách thêm --no-update vào lệnh hoặc tập tin cấu hình của bạn.
PHỤ THUỘC
Python phiên bản 3.10+ (CPython) và 3.11+ (PyPy) được hỗ trợ. Các phiên bản và cách triển khai khác có thể hoạt động chính xác hoặc không.
Mặc dù tất cả các phần phụ thuộc khác đều là tùy chọn, ffmpeg, ffprobe, yt-dlp-ejs và rất khuyến khích sử dụng thời gian chạy/công cụ JavaScript được hỗ trợ
Rất khuyến khích
ffmpeg và thăm dò - Bắt buộc đối với hợp nhất các tập tin video và âm thanh riêng biệt, cũng như cho nhiều xử lý hậu kỳ nhiệm vụ. Giấy phép phụ thuộc vào việc xây dựng
Vì ffmpeg là một phần phụ thuộc quan trọng nên chúng tôi cung cấp các bản dựng của riêng mình tại yt-dlp/FFmpeg-Builds. Trước đây, các bản vá được áp dụng cho các bản dựng này nhằm khắc phục các sự cố thường gặp cho người dùng yt-dlp, nhưng hiện tại các bản dựng của chúng tôi tương đương với ffmpeg ngược dòng. Xem đọc tôi để biết chi tiết
Quan trọng: Thứ bạn cần là ffmpeg nhị phân, KHÔNG gói Python cùng tên
yt-dlp-ejs - Cần thiết để được hỗ trợ đầy đủ trên YouTube. Được cấp phép theo Không có giấy phép, bó MIT và ISC thành phần.
Thời gian chạy/công cụ JavaScript như Deno (được khuyến nghị), Node.js, Bunhoặc QuickJS cũng được yêu cầu để chạy yt-dlp-ejs. Xem wiki.
Mạng
- giấy chứng nhận* - Cung cấp gói chứng chỉ gốc của Mozilla. Được cấp phép theo MPLv2
- thịt nướng* hoặc brotlicffi - Brotli hỗ trợ mã hóa nội dung. Cả hai đều được cấp phép theo MIT 1 2
- ổ cắm web* - Để tải xuống qua websocket. Được cấp phép theo Điều khoản BSD-3
- yêu cầu* - Thư viện HTTP. Để hỗ trợ proxy HTTPS và kết nối liên tục. Được cấp phép theo Apache-2.0
mạo danh
Phần sau đây cung cấp hỗ trợ cho việc mạo danh các yêu cầu trình duyệt. Điều này có thể được yêu cầu đối với một số trang web sử dụng dấu vân tay TLS.
- xoăn_cffi (được khuyến nghị) - ràng buộc Python cho giả mạo. Cung cấp các mục tiêu mạo danh cho Chrome, Edge và Safari. Được cấp phép theo MIT
- Có thể được cài đặt với
curl-cffithêm, ví dụ:pip install "yt-dlp[default,curl-cffi]" - Hiện được bao gồm trong hầu hết các bản dựng ngoại trừ
yt-dlp(nhị phân nhập zip Unix) vàyt-dlp_x86(Windows 32-bit)
- Có thể được cài đặt với
Siêu dữ liệu
- chất gây đột biến* - Đối với
--embed-thumbnailở một số định dạng nhất định. Được cấp phép theo GPLv2+ - Mùi tây nguyên tử - Vì
--embed-thumbnailtrongmp4/m4atập tin khimutagen/ffmpegkhông thể. Được cấp phép theo GPLv2+ - xattr, pyxattr hoặc setfattr - Để viết siêu dữ liệu xattr (
--xattrs) trên Mac và BSD. Được cấp phép theo MIT, LGPL2.1 và GPLv2+ tương ứng
linh tinh
- pycryptodomex* - Để giải mã các luồng AES-128 HLS và nhiều dữ liệu khác. Được cấp phép theo Điều khoản BSD-2
- ph Phantomjs - Được sử dụng trong một số trình trích xuất cần chạy JavaScript. Không còn được sử dụng cho YouTube. Sẽ không được dùng nữa trong tương lai gần. Được cấp phép theo Điều khoản BSD-3
- kho bí mật* - Đối với
--cookies-from-browserđể truy cập thần lùn khóa trong khi giải mã cookie của cromtrình duyệt dựa trên Linux. Được cấp phép theo Điều khoản BSD-3 - Bất kỳ trình tải xuống bên ngoài nào mà bạn muốn sử dụng
--downloader
Không được dùng nữa
- rtmpdump - Để tải xuống
rtmpsuối. ffmpeg có thể được sử dụng thay thế bằng--downloader ffmpeg. Được cấp phép theo GPLv2+
Để sử dụng hoặc phân phối lại các phần phụ thuộc, bạn phải đồng ý với các điều khoản cấp phép tương ứng của chúng.
Các tệp nhị phân phát hành độc lập được xây dựng bằng trình thông dịch Python và các gói được đánh dấu bằng * bao gồm.
Nếu bạn không có các yếu tố phụ thuộc cần thiết cho tác vụ bạn đang thực hiện, yt-dlp sẽ cảnh báo bạn. Tất cả các phụ thuộc hiện có sẵn đều hiển thị ở đầu --verbose đầu ra
BIÊN BẢN
Bản dựng PyInstaller độc lập
Để xây dựng tệp thực thi độc lập, bạn phải có Python và pyinstaller (cộng với bất kỳ yt-dlp nào phụ thuộc tùy chọn nếu cần). Tệp thực thi sẽ được xây dựng cho cùng kiến trúc CPU như Python được sử dụng.
Bạn có thể chạy các lệnh sau:
python devscripts/install_deps.py --include-group pyinstaller
python devscripts/make_lazy_extractors.py
python -m bundle.pyinstaller
Trên một số hệ thống, bạn có thể cần sử dụng py hoặc python3 thay vì python.
python -m bundle.pyinstaller chấp nhận bất kỳ đối số nào có thể được chuyển đến pyinstaller, chẳng hạn như --onefile/-F hoặc --onedir/-D, xa hơn nữa tài liệu ở đây.
Lưu ý: Phiên bản Pyinstaller dưới 4.4 không hỗ trợ Python được cài đặt từ cửa hàng Windows mà không sử dụng môi trường ảo.
Quan trọng: Đang chạy pyinstaller trực tiếp thay vì sử dụng python -m bundle.pyinstaller là không được hỗ trợ chính thức. Điều này có thể hoạt động chính xác hoặc không.
Nhị phân độc lập với nền tảng (UNIX)
Bạn sẽ cần các công cụ xây dựng python (3.10+), zip, make (GNU), pandoc* và pytest*.
Sau khi cài đặt những thứ này, chỉ cần chạy make.
Bạn cũng có thể chạy make yt-dlp thay vào đó chỉ biên dịch tệp nhị phân mà không cập nhật bất kỳ tệp bổ sung nào. (Các công cụ xây dựng được đánh dấu bằng * không cần thiết cho việc này)
Tập lệnh liên quan
devscripts/install_deps.py- Cài đặt phụ thuộc cho yt-dlp.devscripts/update-version.py- Cập nhật số phiên bản dựa trên ngày hiện tại.devscripts/set-variant.py- Đặt biến thể xây dựng của tệp thực thi.devscripts/make_changelog.py- Tạo nhật ký thay đổi đánh dấu bằng cách sử dụng các thông báo và cập nhật cam kết ngắnCONTRIBUTORStập tin.devscripts/make_lazy_extractors.py- Tạo trình giải nén lười biếng. Chạy cái này trước khi xây dựng các tệp nhị phân (bất kỳ biến thể nào) sẽ cải thiện hiệu suất khởi động của chúng. Đặt biến môi trườngYTDLP_NO_LAZY_EXTRACTORSđến một cái gì đó không trống để vô hiệu hóa mạnh mẽ quá trình tải trình giải nén lười biếng.
Lưu ý: Xem của họ --help để biết thêm thông tin.
Ngã ba dự án
Nếu bạn phân nhánh dự án trên GitHub, bạn có thể chạy phân nhánh của mình xây dựng quy trình làm việc để tự động xây dựng (các) phiên bản đã chọn làm tạo phẩm. Ngoài ra, bạn có thể chạy quy trình phát hành hoặc kích hoạt quy trình làm việc hàng đêm để tạo các bản phát hành đầy đủ (trước).
SỬ DỤNG VÀ LỰA CHỌN
yt-dlp [OPTIONS] [--] URL [URL...]
Mẹo: Sử dụng CTRL+F (hoặc Command+F) để tìm kiếm theo từ khóa
Tùy chọn chung:
-h, --help Print this help text and exit
--version Print program version and exit
-U, --update Update this program to the latest version
--no-update Do not check for updates (default)
--update-to [CHANNEL]@[TAG] Upgrade/downgrade to a specific version.
CHANNEL can be a repository as well. CHANNEL
and TAG default to "stable" and "latest"
respectively if omitted; See "UPDATE" for
details. Supported channels: stable,
nightly, master
-i, --ignore-errors Ignore download and postprocessing errors.
The download will be considered successful
even if the postprocessing fails
--no-abort-on-error Continue with next video on download errors;
e.g. to skip unavailable videos in a
playlist (default)
--abort-on-error Abort downloading of further videos if an
error occurs (Alias: --no-ignore-errors)
--list-extractors List all supported extractors and exit
--extractor-descriptions Output descriptions of all supported
extractors and exit
--use-extractors NAMES Extractor names to use separated by commas.
You can also use regexes, "all", "default"
and "end" (end URL matching); e.g. --ies
"holodex.*,end,youtube". Prefix the name
with a "-" to exclude it, e.g. --ies
default,-generic. Use --list-extractors for
a list of extractor names. (Alias: --ies)
--default-search PREFIX Use this prefix for unqualified URLs. E.g.
"gvsearch2:python" downloads two videos from
google videos for the search term "python".
Use the value "auto" to let yt-dlp guess
("auto_warning" to emit a warning when
guessing). "error" just throws an error. The
default value "fixup_error" repairs broken
URLs, but emits an error if this is not
possible instead of searching
--ignore-config Don't load any more configuration files
except those given to --config-locations.
For backward compatibility, if this option
is found inside the system configuration
file, the user configuration is not loaded.
(Alias: --no-config)
--no-config-locations Do not load any custom configuration files
(default). When given inside a configuration
file, ignore all previous --config-locations
defined in the current file
--config-locations PATH Location of the main configuration file;
either the path to the config or its
containing directory ("-" for stdin). Can be
used multiple times and inside other
configuration files
--plugin-dirs DIR Path to an additional directory to search
for plugins. This option can be used
multiple times to add multiple directories.
Use "default" to search the default plugin
directories (default)
--no-plugin-dirs Clear plugin directories to search,
including defaults and those provided by
previous --plugin-dirs
--js-runtimes RUNTIME[:PATH] Additional JavaScript runtime to enable,
with an optional location for the runtime
(either the path to the binary or its
containing directory). This option can be
used multiple times to enable multiple
runtimes. Supported runtimes are (in order
of priority, from highest to lowest): deno,
node, quickjs, bun. Only "deno" is enabled
by default. The highest priority runtime
that is both enabled and available will be
used. In order to use a lower priority
runtime when "deno" is available, --no-js-
runtimes needs to be passed before enabling
other runtimes
--no-js-runtimes Clear JavaScript runtimes to enable,
including defaults and those provided by
previous --js-runtimes
--remote-components COMPONENT Remote components to allow yt-dlp to fetch
when required. This option is currently not
needed if you are using an official
executable or have the requisite version of
the yt-dlp-ejs package installed. You can
use this option multiple times to allow
multiple components. Supported values:
ejs:npm (external JavaScript components from
npm), ejs:github (external JavaScript
components from yt-dlp-ejs GitHub). By
default, no remote components are allowed
--no-remote-components Disallow fetching of all remote components,
including any previously allowed by
--remote-components or defaults.
--flat-playlist Do not extract a playlist's URL result
entries; some entry metadata may be missing
and downloading may be bypassed
--no-flat-playlist Fully extract the videos of a playlist
(default)
--live-from-start Download livestreams from the start.
Currently experimental and only supported
for YouTube, Twitch, TVer, and mellow-fan
--no-live-from-start Download livestreams from the current time
(default)
--wait-for-video MIN[-MAX] Wait for scheduled streams to become
available. Pass the minimum number of
seconds (or range) to wait between retries
--no-wait-for-video Do not wait for scheduled streams (default)
--mark-watched Mark videos watched (even with --simulate)
--no-mark-watched Do not mark videos watched (default)
--color [STREAM:]POLICY Whether to emit color codes in output,
optionally prefixed by the STREAM (stdout or
stderr) to apply the setting to. Can be one
of "always", "auto" (default), "never", or
"no_color" (use non color terminal
sequences). Use "auto-tty" or "no_color-tty"
to decide based on terminal support only.
Can be used multiple times
--compat-options OPTS Options that can help keep compatibility
with youtube-dl or youtube-dlc
configurations by reverting some of the
changes made in yt-dlp. See "Differences in
default behavior" for details
--alias ALIASES OPTIONS Create aliases for an option string. Unless
an alias starts with a dash "-", it is
prefixed with "--". Arguments are parsed
according to the Python string formatting
mini-language. E.g. --alias get-audio,-X "-S
aext:{0},abr -x --audio-format {0}" creates
options "--get-audio" and "-X" that takes an
argument (ARG0) and expands to "-S
aext:ARG0,abr -x --audio-format ARG0". All
defined aliases are listed in the --help
output. Alias options can trigger more
aliases; so be careful to avoid defining
recursive options. As a safety measure, each
alias may be triggered a maximum of 100
times. This option can be used multiple times
-t, --preset-alias PRESET Applies a predefined set of options. e.g.
--preset-alias mp3. The following presets
are available: mp3, aac, mp4, mkv, sleep.
See the "Preset Aliases" section at the end
for more info. This option can be used
multiple times
Tùy chọn mạng:
--proxy URL Use the specified HTTP/HTTPS/SOCKS proxy. To
enable SOCKS proxy, specify a proper scheme,
e.g. socks5://user:[email protected]:1080/.
Pass in an empty string (--proxy "") for
direct connection
--socket-timeout SECONDS Time to wait before giving up, in seconds
--source-address IP Client-side IP address to bind to
--impersonate CLIENT[:OS] Client to impersonate for requests. E.g.
chrome, chrome-110, chrome:windows-10. Pass
--impersonate="" to impersonate any client.
Note that forcing impersonation for all
requests may have a detrimental impact on
download speed and stability
--list-impersonate-targets List available clients to impersonate.
-4, --force-ipv4 Make all connections via IPv4
-6, --force-ipv6 Make all connections via IPv6
--enable-file-urls Enable file:// URLs. This is disabled by
default for security reasons.
Giới hạn địa lý:
--geo-verification-proxy URL Use this proxy to verify the IP address for
some geo-restricted sites. The default proxy
specified by --proxy (or none, if the option
is not present) is used for the actual
downloading
--xff VALUE How to fake X-Forwarded-For HTTP header to
try bypassing geographic restriction. One of
"default" (only when known to be useful),
"never", an IP block in CIDR notation, or a
two-letter ISO 3166-2 country code
Lựa chọn Video:
-I, --playlist-items ITEM_SPEC Comma-separated playlist_index of the items
to download. You can specify a range using
"[START]:[STOP][:STEP]". For backward
compatibility, START-STOP is also supported.
Use negative indices to count from the right
and negative STEP to download in reverse
order. E.g. "-I 1:3,7,-5::2" used on a
playlist of size 15 will download the items
at index 1,2,3,7,11,13,15
--min-filesize SIZE Abort download if filesize is smaller than
SIZE, e.g. 50k or 44.6M
--max-filesize SIZE Abort download if filesize is larger than
SIZE, e.g. 50k or 44.6M
--date DATE Download only videos uploaded on this date.
The date can be "YYYYMMDD" or in the format
[now|today|yesterday][-N[day|week|month|year]].
E.g. "--date today-2weeks" downloads only
videos uploaded on the same day two weeks ago
--datebefore DATE Download only videos uploaded on or before
this date. The date formats accepted are the
same as --date
--dateafter DATE Download only videos uploaded on or after
this date. The date formats accepted are the
same as --date
--match-filters FILTER Generic video filter. Any "OUTPUT TEMPLATE"
field can be compared with a number or a
string using the operators defined in
"Filtering Formats". You can also simply
specify a field to match if the field is
present, use "!field" to check if the field
is not present, and "&" to check multiple
conditions. Use a "\" to escape "&" or
quotes if needed. If used multiple times,
the filter matches if at least one of the
conditions is met. E.g. --match-filters
!is_live --match-filters "like_count>?100 &
description~='(?i)\bcats \& dogs\b'" matches
only videos that are not live OR those that
have a like count more than 100 (or the like
field is not available) and also has a
description that contains the phrase "cats &
dogs" (caseless). Use "--match-filters -" to
interactively ask whether to download each
video
--no-match-filters Do not use any --match-filters (default)
--break-match-filters FILTER Same as "--match-filters" but stops the
download process when a video is rejected
--no-break-match-filters Do not use any --break-match-filters (default)
--no-playlist Download only the video, if the URL refers
to a video and a playlist
--yes-playlist Download the playlist, if the URL refers to
a video and a playlist
--age-limit YEARS Download only videos suitable for the given
age
--download-archive FILE Download only videos not listed in the
archive file. Record the IDs of all
downloaded videos in it
--no-download-archive Do not use archive file (default)
--max-downloads NUMBER Abort after downloading NUMBER files
--break-on-existing Stop the download process when encountering
a file that is in the archive supplied with
the --download-archive option
--no-break-on-existing Do not stop the download process when
encountering a file that is in the archive
(default)
--break-per-input Alters --max-downloads, --break-on-existing,
--break-match-filters, and autonumber to
reset per input URL
--no-break-per-input --break-on-existing and similar options
terminates the entire download queue
--skip-playlist-after-errors N Number of allowed failures until the rest of
the playlist is skipped
Tùy chọn tải xuống:
-N, --concurrent-fragments N Number of fragments of a dash/hlsnative
video that should be downloaded concurrently
(default is 1)
-r, --limit-rate RATE Maximum download rate in bytes per second,
e.g. 50K or 4.2M
--throttled-rate RATE Minimum download rate in bytes per second
below which throttling is assumed and the
video data is re-extracted, e.g. 100K
-R, --retries RETRIES Number of retries (default is 10), or
"infinite"
--file-access-retries RETRIES Number of times to retry on file access
error (default is 3), or "infinite"
--fragment-retries RETRIES Number of retries for a fragment (default is
10), or "infinite" (DASH, hlsnative and ISM)
--retry-sleep [TYPE:]EXPR Time to sleep between retries in seconds
(optionally) prefixed by the type of retry
(http (default), fragment, file_access,
extractor) to apply the sleep to. EXPR can
be a number, linear=START[:END[:STEP=1]] or
exp=START[:END[:BASE=2]]. This option can be
used multiple times to set the sleep for the
different retry types, e.g. --retry-sleep
linear=1::2 --retry-sleep fragment:exp=1:20
--skip-unavailable-fragments Skip unavailable fragments for DASH,
hlsnative and ISM downloads (default)
(Alias: --no-abort-on-unavailable-fragments)
--abort-on-unavailable-fragments
Abort download if a fragment is unavailable
(Alias: --no-skip-unavailable-fragments)
--keep-fragments Keep downloaded fragments on disk after
downloading is finished
--no-keep-fragments Delete downloaded fragments after
downloading is finished (default)
--buffer-size SIZE Size of download buffer, e.g. 1024 or 16K
(default is 1024)
--resize-buffer The buffer size is automatically resized
from an initial value of --buffer-size
(default)
--no-resize-buffer Do not automatically adjust the buffer size
--http-chunk-size SIZE Size of a chunk for chunk-based HTTP
downloading, e.g. 10485760 or 10M (default
is disabled). May be useful for bypassing
bandwidth throttling imposed by a webserver
(experimental)
--playlist-random Download playlist videos in random order
--lazy-playlist Process entries in the playlist as they are
received. This disables n_entries,
--playlist-random and --playlist-reverse
--no-lazy-playlist Process videos in the playlist only after
the entire playlist is parsed (default)
--hls-use-mpegts Use the mpegts container for HLS videos;
allowing some players to play the video
while downloading, and reducing the chance
of file corruption if download is
interrupted. This is enabled by default for
live streams
--no-hls-use-mpegts Do not use the mpegts container for HLS
videos. This is default when not downloading
live streams
--download-sections REGEX Download only chapters that match the
regular expression. A "*" prefix denotes
time-range instead of chapter. Negative
timestamps are calculated from the end.
"*from-url" can be used to download between
the "start_time" and "end_time" extracted
from the URL. Needs ffmpeg. This option can
be used multiple times to download multiple
sections, e.g. --download-sections
"*10:15-inf" --download-sections "intro"
--downloader [PROTO:]NAME Name or path of the external downloader to
use (optionally) prefixed by the protocols
(http, ftp, m3u8, dash, rtmp) to use it for.
Currently supports native, aria2c, axel,
curl, ffmpeg, httpie, wget. You can use this
option multiple times to set different
downloaders for different protocols. E.g.
--downloader aria2c --downloader
"dash,m3u8:native" will use aria2c for
http/ftp downloads, and the native
downloader for dash/m3u8 downloads (Alias:
--external-downloader)
--downloader-args NAME:ARGS Give these arguments to the external
downloader. Specify the downloader name and
the arguments separated by a colon ":". For
ffmpeg, arguments can be passed to different
positions using the same syntax as
--postprocessor-args. You can use this
option multiple times to give different
arguments to different downloaders (Alias:
--external-downloader-args)
Tùy chọn hệ thống tập tin:
-a, --batch-file FILE File containing URLs to download ("-" for
stdin), one URL per line. Lines starting
with "#", ";" or "]" are considered as
comments and ignored
--no-batch-file Do not read URLs from batch file (default)
-P, --paths [TYPES:]PATH The paths where the files should be
downloaded. Specify the type of file and the
path separated by a colon ":". All the same
TYPES as --output are supported.
Additionally, you can also provide "home"
(default) and "temp" paths. All intermediary
files are first downloaded to the temp path
and then the final files are moved over to
the home path after download is finished.
This option is ignored if --output is an
absolute path
-o, --output [TYPES:]TEMPLATE Output filename template; see "OUTPUT
TEMPLATE" for details
--output-na-placeholder TEXT Placeholder for unavailable fields in
--output (default: "NA")
--restrict-filenames Restrict filenames to only ASCII characters,
and avoid "&" and spaces in filenames
--no-restrict-filenames Allow Unicode characters, "&" and spaces in
filenames (default)
--windows-filenames Force filenames to be Windows-compatible
--no-windows-filenames Sanitize filenames only minimally
--trim-filenames LENGTH Limit the filename length (excluding
extension) to the specified number of
characters
-w, --no-overwrites Do not overwrite any files
--force-overwrites Overwrite all video and metadata files. This
option includes --no-continue
--no-force-overwrites Do not overwrite the video, but overwrite
related files (default)
-c, --continue Resume partially downloaded files/fragments
(default)
--no-continue Do not resume partially downloaded
fragments. If the file is not fragmented,
restart download of the entire file
--part Use .part files instead of writing directly
into output file (default)
--no-part Do not use .part files - write directly into
output file
--mtime Use the Last-modified header to set the file
modification time
--no-mtime Do not use the Last-modified header to set
the file modification time (default)
--write-description Write video description to a .description file
--no-write-description Do not write video description (default)
--write-info-json Write video metadata to a .info.json file
(this may contain personal information)
--no-write-info-json Do not write video metadata (default)
--write-playlist-metafiles Write playlist metadata in addition to the
video metadata when using --write-info-json,
--write-description etc. (default)
--no-write-playlist-metafiles Do not write playlist metadata when using
--write-info-json, --write-description etc.
--clean-info-json Remove some internal metadata such as
filenames from the infojson (default)
--no-clean-info-json Write all fields to the infojson
--write-comments Retrieve video comments to be placed in the
infojson. The comments are fetched even
without this option if the extraction is
known to be quick (Alias: --get-comments)
--no-write-comments Do not retrieve video comments unless the
extraction is known to be quick (Alias:
--no-get-comments)
--load-info-json FILE JSON file containing the video information
(created with the "--write-info-json" option)
--cookies FILE Netscape formatted file to read cookies from
and dump cookie jar in
--no-cookies Do not read/dump cookies from/to file
(default)
--cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]
The name of the browser to load cookies
from. Currently supported browsers are:
brave, chrome, chromium, edge, firefox,
opera, safari, vivaldi, whale. Optionally,
the KEYRING used for decrypting Chromium
cookies on Linux, the name/path of the
PROFILE to load cookies from, and the
CONTAINER name (if Firefox) ("none" for no
container) can be given with their
respective separators. By default, all
containers of the most recently accessed
profile are used. Currently supported
keyrings are: basictext, gnomekeyring,
kwallet, kwallet5, kwallet6
--no-cookies-from-browser Do not load cookies from browser (default)
--cache-dir DIR Location in the filesystem where yt-dlp can
store some downloaded information (such as
client ids and signatures) permanently. By
default ${XDG_CACHE_HOME}/yt-dlp
--no-cache-dir Disable filesystem caching
--rm-cache-dir Delete all filesystem cache files
Tùy chọn hình thu nhỏ:
--write-thumbnail Write thumbnail image to disk
--no-write-thumbnail Do not write thumbnail image to disk (default)
--write-all-thumbnails Write all thumbnail image formats to disk
--list-thumbnails List available thumbnails of each video.
Simulate unless --no-simulate is used
Tùy chọn lối tắt Internet:
--write-link Write an internet shortcut file, depending
on the current platform (.url, .webloc or
.desktop). The URL may be cached by the OS
--write-url-link Write a .url Windows internet shortcut. The
OS caches the URL based on the file path
--write-webloc-link Write a .webloc macOS internet shortcut
--write-desktop-link Write a .desktop Linux internet shortcut
Tùy chọn chi tiết và mô phỏng:
-q, --quiet Activate quiet mode. If used with --verbose,
print the log to stderr
--no-quiet Deactivate quiet mode. (Default)
--no-warnings Ignore warnings
-s, --simulate Do not download the video and do not write
anything to disk
--no-simulate Download the video even if printing/listing
options are used
--ignore-no-formats-error Ignore "No video formats" error. Useful for
extracting metadata even if the videos are
not actually available for download
(experimental)
--no-ignore-no-formats-error Throw error when no downloadable video
formats are found (default)
--skip-download Do not download the video but write all
related files (Alias: --no-download)
-O, --print [WHEN:]TEMPLATE Field name or output template to print to
screen, optionally prefixed with when to
print it, separated by a ":". Supported
values of "WHEN" are the same as that of
--use-postprocessor (default: video).
Implies --quiet. Implies --simulate unless
--no-simulate or later stages of WHEN are
used. This option can be used multiple times
--print-to-file [WHEN:]TEMPLATE FILE
Append given template to the file. The
values of WHEN and TEMPLATE are the same as
that of --print. FILE uses the same syntax
as the output template. This option can be
used multiple times
-j, --dump-json Quiet, but print JSON information for each
video. Simulate unless --no-simulate is
used. See "OUTPUT TEMPLATE" for a
description of available keys
-J, --dump-single-json Quiet, but print JSON information for each
URL or infojson passed. Simulate unless
--no-simulate is used. If the URL refers to
a playlist, the whole playlist information
is dumped in a single line
--force-write-archive Force download archive entries to be written
as far as no errors occur, even if -s or
another simulation option is used (Alias:
--force-download-archive)
--newline Output progress bar as new lines
--no-progress Do not print progress bar
--progress Show progress bar, even if in quiet mode
--console-title Display progress in console titlebar
--progress-template [TYPES:]TEMPLATE
Template for progress outputs, optionally
prefixed with one of "download:" (default),
"download-title:" (the console title),
"postprocess:", or "postprocess-title:".
The video's fields are accessible under the
"info" key and the progress attributes are
accessible under "progress" key. E.g.
--console-title --progress-template
"download-title:%(info.id)s-%(progress.eta)s"
--progress-delta SECONDS Time between progress output (default: 0)
-v, --verbose Print various debugging information
--dump-pages Print downloaded pages encoded using base64
to debug problems (very verbose)
--write-pages Write downloaded intermediary pages to files
in the current directory to debug problems
--print-traffic Display sent and read HTTP traffic
Cách giải quyết:
--encoding ENCODING Force the specified encoding (experimental)
--legacy-server-connect Explicitly allow HTTPS connection to servers
that do not support RFC 5746 secure
renegotiation
--no-check-certificates Suppress HTTPS certificate validation
--prefer-insecure Use an unencrypted connection to retrieve
information about the video
--add-headers FIELD:VALUE Specify a custom HTTP header and its value,
separated by a colon ":". You can use this
option multiple times
--bidi-workaround Work around terminals that lack
bidirectional text support. Requires bidiv
or fribidi executable in PATH
--sleep-requests SECONDS Number of seconds to sleep between requests
during data extraction
--sleep-interval SECONDS Number of seconds to sleep before each
download. This is the minimum time to sleep
when used along with --max-sleep-interval
(Alias: --min-sleep-interval)
--max-sleep-interval SECONDS Maximum number of seconds to sleep. Can only
be used along with --min-sleep-interval
--sleep-subtitles SECONDS Number of seconds to sleep before each
subtitle download
Tùy chọn định dạng video:
-f, --format FORMAT Video format code, see "FORMAT SELECTION"
for more details
-S, --format-sort SORTORDER Sort the formats by the fields given, see
"Sorting Formats" for more details
--format-sort-reset Disregard previous user specified sort order
and reset to the default
--format-sort-force Force user specified sort order to have
precedence over all fields, see "Sorting
Formats" for more details (Alias: --S-force)
--no-format-sort-force Some fields have precedence over the user
specified sort order (default)
--video-multistreams Allow multiple video streams to be merged
into a single file
--no-video-multistreams Only one video stream is downloaded for each
output file (default)
--audio-multistreams Allow multiple audio streams to be merged
into a single file
--no-audio-multistreams Only one audio stream is downloaded for each
output file (default)
--prefer-free-formats Prefer video formats with free containers
over non-free ones of the same quality. Use
with "-S ext" to strictly prefer free
containers irrespective of quality
--no-prefer-free-formats Don't give any special preference to free
containers (default)
--check-formats Make sure formats are selected only from
those that are actually downloadable
--check-all-formats Check all formats for whether they are
actually downloadable
--no-check-formats Do not check that the formats are actually
downloadable
-F, --list-formats List available formats of each video.
Simulate unless --no-simulate is used
--merge-output-format FORMAT Containers that may be used when merging
formats, separated by "/", e.g. "mp4/mkv".
Ignored if no merge is required. (currently
supported: avi, flv, mkv, mov, mp4, webm)
Tùy chọn phụ đề:
--write-subs Write subtitle file
--no-write-subs Do not write subtitle file (default)
--write-auto-subs Write automatically generated subtitle file
(Alias: --write-automatic-subs)
--no-write-auto-subs Do not write auto-generated subtitles
(default) (Alias: --no-write-automatic-subs)
--list-subs List available subtitles of each video.
Simulate unless --no-simulate is used
--sub-format FORMAT Subtitle format; accepts formats preference
separated by "/", e.g. "srt" or "ass/srt/best"
--sub-langs LANGS Languages of the subtitles to download (can
be regex) or "all" separated by commas, e.g.
--sub-langs "en.*,ja" (where "en.*" is a
regex pattern that matches "en" followed by
0 or more of any character). You can prefix
the language code with a "-" to exclude it
from the requested languages, e.g. --sub-
langs all,-live_chat. Use --list-subs for a
list of available language tags
Tùy chọn xác thực:
-u, --username USERNAME Login with this account ID
-p, --password PASSWORD Account password. If this option is left
out, yt-dlp will ask interactively
-2, --twofactor TWOFACTOR Two-factor authentication code
-n, --netrc Use .netrc authentication data
--netrc-location PATH Location of .netrc authentication data;
either the path or its containing directory.
Defaults to ~/.netrc
--netrc-cmd NETRC_CMD Command to execute to get the credentials
for an extractor.
--video-password PASSWORD Video-specific password
--ap-mso MSO Adobe Pass multiple-system operator (TV
provider) identifier, use --ap-list-mso for
a list of available MSOs
--ap-username USERNAME Multiple-system operator account login
--ap-password PASSWORD Multiple-system operator account password.
If this option is left out, yt-dlp will ask
interactively
--ap-list-mso List all supported multiple-system operators
--client-certificate CERTFILE Path to client certificate file in PEM
format. May include the private key
--client-certificate-key KEYFILE
Path to private key file for client
certificate
--client-certificate-password PASSWORD
Password for client certificate private key,
if encrypted. If not provided, and the key
is encrypted, yt-dlp will ask interactively
Tùy chọn xử lý sau:
-x, --extract-audio Convert video files to audio-only files
(requires ffmpeg and ffprobe)
--audio-format FORMAT Format to convert the audio to when -x is
used. (currently supported: best (default),
aac, alac, flac, m4a, mp3, opus, vorbis,
wav). You can specify multiple rules using
similar syntax as --remux-video
--audio-quality QUALITY Specify ffmpeg audio quality to use when
converting the audio with -x. Insert a value
between 0 (best) and 10 (worst) for VBR or a
specific bitrate like 128K (default 5)
--remux-video FORMAT Remux the video into another container if
necessary (currently supported: avi, flv,
gif, mkv, mov, mp4, webm, aac, aiff, alac,
flac, m4a, mka, mp3, ogg, opus, vorbis,
wav). If the target container does not
support the video/audio codec, remuxing will
fail. You can specify multiple rules; e.g.
"aac>m4a/mov>mp4/mkv" will remux aac to m4a,
mov to mp4 and anything else to mkv
--recode-video FORMAT Re-encode the video into another format if
necessary. The syntax and supported formats
are the same as --remux-video
--postprocessor-args NAME:ARGS Give these arguments to the postprocessors.
Specify the postprocessor/executable name
and the arguments separated by a colon ":"
to give the argument to the specified
postprocessor/executable. Supported PP are:
Merger, ModifyChapters, SplitChapters,
ExtractAudio, VideoRemuxer, VideoConvertor,
Metadata, EmbedSubtitle, EmbedThumbnail,
SubtitlesConvertor, ThumbnailsConvertor,
FixupStretched, FixupM4a, FixupM3u8,
FixupTimestamp and FixupDuration. The
supported executables are: AtomicParsley,
FFmpeg and FFprobe. You can also specify
"PP+EXE:ARGS" to give the arguments to the
specified executable only when being used by
the specified postprocessor. Additionally,
for ffmpeg/ffprobe, "_i"/"_o" can be
appended to the prefix optionally followed
by a number to pass the argument before the
specified input/output file, e.g. --ppa
"Merger+ffmpeg_i1:-v quiet". You can use
this option multiple times to give different
arguments to different postprocessors.
(Alias: --ppa)
-k, --keep-video Keep the intermediate video file on disk
after post-processing
--no-keep-video Delete the intermediate video file after
post-processing (default)
--post-overwrites Overwrite post-processed files (default)
--no-post-overwrites Do not overwrite post-processed files
--embed-subs Embed subtitles in the video (only for mp4,
webm and mkv videos)
--no-embed-subs Do not embed subtitles (default)
--embed-thumbnail Embed thumbnail in the video as cover art
--no-embed-thumbnail Do not embed thumbnail (default)
--embed-metadata Embed metadata to the video file. Also
embeds chapters/infojson if present unless
--no-embed-chapters/--no-embed-info-json are
used (Alias: --add-metadata)
--no-embed-metadata Do not add metadata to file (default)
(Alias: --no-add-metadata)
--embed-chapters Add chapter markers to the video file
(Alias: --add-chapters)
--no-embed-chapters Do not add chapter markers (default) (Alias:
--no-add-chapters)
--embed-info-json Embed the infojson as an attachment to
mkv/mka video files
--no-embed-info-json Do not embed the infojson as an attachment
to the video file
--parse-metadata [WHEN:]FROM:TO
Parse additional metadata like title/artist
from other fields; see "MODIFYING METADATA"
for details. Supported values of "WHEN" are
the same as that of --use-postprocessor
(default: pre_process)
--replace-in-metadata [WHEN:]FIELDS REGEX REPLACE
Replace text in a metadata field using the
given regex. This option can be used
multiple times. Supported values of "WHEN"
are the same as that of --use-postprocessor
(default: pre_process)
--xattrs Write metadata to the video file's xattrs
(using Dublin Core and XDG standards)
--concat-playlist POLICY Concatenate videos in a playlist. One of
"never", "always", or "multi_video"
(default; only when the videos form a single
show). All the video files must have the
same codecs and number of streams to be
concatenable. The "pl_video:" prefix can be
used with "--paths" and "--output" to set
the output filename for the concatenated
files. See "OUTPUT TEMPLATE" for details
--fixup POLICY Automatically correct known faults of the
file. One of never (do nothing), warn (only
emit a warning), detect_or_warn (the
default; fix the file if we can, warn
otherwise), force (try fixing even if the
file already exists)
--ffmpeg-location PATH Location of the ffmpeg binary; either the
path to the binary or its containing directory
--exec [WHEN:]CMD Execute a command, optionally prefixed with
when to execute it, separated by a ":".
Supported values of "WHEN" are the same as
that of --use-postprocessor (default:
after_move). The same syntax as the output
template can be used to pass any field as
arguments to the command; however, for
security reasons the only allowed
conversions are: "i"/"d" (signed integer
decimal), "f" (floating-point decimal) and
"q" (shell-quoted). If no fields are passed,
%(filepath,_filename|)q is appended to the
end of the command. This option can be used
multiple times
--no-exec Remove any previously defined --exec
--convert-subs FORMAT Convert the subtitles to another format
(currently supported: ass, lrc, srt, vtt).
Use "--convert-subs none" to disable
conversion (default) (Alias: --convert-
subtitles)
--convert-thumbnails FORMAT Convert the thumbnails to another format
(currently supported: jpg, png, webp). You
can specify multiple rules using similar
syntax as "--remux-video". Use "--convert-
thumbnails none" to disable conversion
(default)
--split-chapters Split video into multiple files based on
internal chapters. The "chapter:" prefix can
be used with "--paths" and "--output" to set
the output filename for the split files. See
"OUTPUT TEMPLATE" for details
--no-split-chapters Do not split video based on chapters (default)
--remove-chapters REGEX Remove chapters whose title matches the
given regular expression. The syntax is the
same as --download-sections. This option can
be used multiple times
--no-remove-chapters Do not remove any chapters from the file
(default)
--force-keyframes-at-cuts Force keyframes at cuts when
downloading/splitting/removing sections.
This is slow due to needing a re-encode, but
the resulting video may have fewer artifacts
around the cuts
--no-force-keyframes-at-cuts Do not force keyframes around the chapters
when cutting/splitting (default)
--use-postprocessor NAME[:ARGS]
The (case-sensitive) name of plugin
postprocessors to be enabled, and
(optionally) arguments to be passed to it,
separated by a colon ":". ARGS are a
semicolon ";" delimited list of NAME=VALUE.
The "when" argument determines when the
postprocessor is invoked. It can be one of
"pre_process" (after video extraction),
"after_filter" (after video passes filter),
"video" (after --format; before
--print/--output), "before_dl" (before each
video download), "post_process" (after each
video download; default), "after_move"
(after moving the video file to its final
location), "after_video" (after downloading
and processing all formats of a video), or
"playlist" (at end of playlist). This option
can be used multiple times to add different
postprocessors
Tùy chọn khối nhà tài trợ:
Tạo các mục chương hoặc xóa các phân đoạn khác nhau (tài trợ, giới thiệu, v.v.) khỏi video YouTube đã tải xuống bằng cách sử dụng Khối tài trợ API
--sponsorblock-mark CATS SponsorBlock categories to create chapters
for, separated by commas. Available
categories are sponsor, intro, outro,
selfpromo, preview, filler, interaction,
music_offtopic, hook, poi_highlight,
chapter, all and default (=all). You can
prefix the category with a "-" to exclude
it. See [1] for descriptions of the
categories. E.g. --sponsorblock-mark
all,-preview
[1] https://wiki.sponsor.ajay.app/w/Segment_Categories
--sponsorblock-remove CATS SponsorBlock categories to be removed from
the video file, separated by commas. If a
category is present in both mark and remove,
remove takes precedence. The syntax and
available categories are the same as for
--sponsorblock-mark except that "default"
refers to "all,-filler" and poi_highlight,
chapter are not available
--sponsorblock-chapter-title TEMPLATE
An output template for the title of the
SponsorBlock chapters created by
--sponsorblock-mark. The only available
fields are start_time, end_time, category,
categories, name, category_names. Defaults
to "[SponsorBlock]: %(category_names)l"
--no-sponsorblock Disable both --sponsorblock-mark and
--sponsorblock-remove
--sponsorblock-api URL SponsorBlock API location, defaults to
https://sponsor.ajay.app
Tùy chọn trình trích xuất:
--extractor-retries RETRIES Number of retries for known extractor errors
(default is 3), or "infinite"
--allow-dynamic-mpd Process dynamic DASH manifests (default)
(Alias: --no-ignore-dynamic-mpd)
--ignore-dynamic-mpd Do not process dynamic DASH manifests
(Alias: --no-allow-dynamic-mpd)
--hls-split-discontinuity Split HLS playlists to different formats at
discontinuities such as ad breaks
--no-hls-split-discontinuity Do not split HLS playlists into different
formats at discontinuities such as ad breaks
(default)
--extractor-args IE_KEY:ARGS Pass ARGS arguments to the IE_KEY extractor.
See "EXTRACTOR ARGUMENTS" for details. You
can use this option multiple times to give
arguments for different extractors
Bí danh đặt trước:
Bí danh được xác định trước để thuận tiện và dễ sử dụng. Lưu ý rằng các phiên bản tương lai của yt-dlp có thể thêm hoặc điều chỉnh các giá trị đặt trước nhưng tên đặt trước hiện tại sẽ không bị thay đổi hoặc xóa
-t mp3 -f 'ba[acodec^=mp3]/ba/b' -x --audio-format
mp3
-t aac -f
'ba[acodec^=aac]/ba[acodec^=mp4a.40.]/ba/b'
-x --audio-format aac
-t mp4 --merge-output-format mp4 --remux-video mp4
-S vcodec:h264,lang,quality,res,fps,hdr:12,a
codec:aac
-t mkv --merge-output-format mkv --remux-video mkv
-t sleep --sleep-subtitles 5 --sleep-requests 0.75
--sleep-interval 10 --max-sleep-interval 20
CẤU HÌNH
Bạn có thể định cấu hình yt-dlp bằng cách đặt bất kỳ tùy chọn dòng lệnh được hỗ trợ nào vào tệp cấu hình. Cấu hình được tải từ các vị trí sau:
Cấu hình chính:
- Tập tin được đưa cho
--config-locations
- Tập tin được đưa cho
Cấu hình di động: (Được khuyến nghị cho cài đặt di động)
- Nếu sử dụng hệ nhị phân,
yt-dlp.conftrong cùng thư mục với tệp nhị phân - Nếu chạy từ mã nguồn,
yt-dlp.conftrong thư mục mẹ củayt_dlp
- Nếu sử dụng hệ nhị phân,
Cấu hình trang chủ:
yt-dlp.conftrong con đường về nhà được trao cho-P- Nếu
-Pkhông được đưa ra, thư mục hiện tại sẽ được tìm kiếm
Cấu hình người dùng:
${XDG_CONFIG_HOME}/yt-dlp.conf${XDG_CONFIG_HOME}/yt-dlp/config(được khuyến nghị trên Linux/macOS)${XDG_CONFIG_HOME}/yt-dlp/config.txt${APPDATA}/yt-dlp.conf${APPDATA}/yt-dlp/config(được khuyến nghị trên Windows)${APPDATA}/yt-dlp/config.txt~/yt-dlp.conf~/yt-dlp.conf.txt~/.yt-dlp/config~/.yt-dlp/config.txt
Xem thêm: Lưu ý về các biến môi trường
Cấu hình hệ thống:
/etc/yt-dlp.conf/etc/yt-dlp/config/etc/yt-dlp/config.txt
Ví dụ: với tệp cấu hình sau, yt-dlp sẽ luôn trích xuất âm thanh, sao chép thời gian, sử dụng proxy và lưu tất cả video trong YouTube thư mục trong thư mục chính của bạn:
# Lines starting with # are comments
# Always extract audio
-x
# Copy the mtime
--mtime
# Use this proxy
--proxy 127.0.0.1:3128
# Save all videos under YouTube directory in your home directory
-o ~/YouTube/%(title)s.%(ext)s
Lưu ý: Các tùy chọn trong tệp cấu hình chỉ là các tùy chọn giống nhau hay còn gọi là các công tắc được sử dụng trong lệnh gọi dòng lệnh thông thường; do đó ở đó phải không có khoảng trắng sau - hoặc --, ví dụ: -o hoặc --proxy nhưng không - o hoặc -- proxy. Chúng cũng phải được trích dẫn khi cần thiết, như thể nó là một hệ vỏ UNIX.
Bạn có thể sử dụng --ignore-config nếu bạn muốn tắt tất cả các tệp cấu hình cho một lần chạy yt-dlp cụ thể. Nếu --ignore-config được tìm thấy bên trong bất kỳ tệp cấu hình nào, sẽ không có cấu hình nào khác được tải. Ví dụ: việc có tùy chọn trong tệp cấu hình di động sẽ ngăn tải cấu hình gia đình, người dùng và hệ thống. Ngoài ra, (để tương thích ngược) nếu --ignore-config được tìm thấy bên trong tệp cấu hình hệ thống, cấu hình người dùng sẽ không được tải.
Mã hóa tập tin cấu hình
Các tệp cấu hình được giải mã theo UTF BOM nếu có và trong mã hóa từ ngôn ngữ hệ thống nếu không.
Nếu bạn muốn tệp của mình được giải mã khác, hãy thêm # coding: ENCODING vào đầu tập tin (ví dụ: # coding: shift-jis). Không được có ký tự nào trước đó, kể cả dấu cách hoặc BOM.
Xác thực với netrc
Bạn cũng có thể muốn định cấu hình lưu trữ thông tin xác thực tự động cho các trình trích xuất hỗ trợ xác thực (bằng cách cung cấp thông tin đăng nhập và mật khẩu với --username và --password) để không chuyển thông tin đăng nhập dưới dạng đối số dòng lệnh trong mỗi lần thực thi yt-dlp và ngăn việc theo dõi mật khẩu văn bản đơn giản trong lịch sử lệnh shell. Bạn có thể đạt được điều này bằng cách sử dụng .netrc tập tin trên cơ sở mỗi máy chiết. Để làm được điều đó, bạn sẽ cần phải tạo một .netrc nộp hồ sơ vào --netrc-location và hạn chế quyền đọc/ghi chỉ của bạn:
touch ${HOME}/.netrc
chmod a-rwx,u+rw ${HOME}/.netrc
Sau đó, bạn có thể thêm thông tin xác thực cho trình trích xuất theo định dạng sau, trong đó máy vắt là tên của trình trích xuất bằng chữ thường:
machine <extractor> login <username> password <password>
Ví dụ:
machine youtube login [email protected] password my_youtube_password
machine twitch login my_twitch_account_name password my_twitch_password
Để kích hoạt xác thực với .netrc tập tin bạn nên vượt qua --netrc vào yt-dlp hoặc đặt nó vào tập tin cấu hình.
Vị trí mặc định của tệp .netrc là ~ (xem bên dưới).
Là một giải pháp thay thế cho việc sử dụng .netrc tệp, có nhược điểm là giữ mật khẩu của bạn trong một tệp văn bản thuần túy, bạn có thể định cấu hình lệnh shell tùy chỉnh để cung cấp thông tin xác thực cho trình trích xuất. Điều này được thực hiện bằng cách cung cấp --netrc-cmd tham số, nó sẽ xuất thông tin đăng nhập ở định dạng netrc và trả về 0 khi thành công, các giá trị khác sẽ được coi là lỗi. {} trong lệnh sẽ được thay thế bằng tên của trình trích xuất để có thể chọn thông tin xác thực cho trình trích xuất phù hợp.
Ví dụ. Để sử dụng một mã hóa .netrc tập tin được lưu trữ dưới dạng .authinfo.gpg
yt-dlp --netrc-cmd 'gpg --decrypt ~/.authinfo.gpg' 'https://www.youtube.com/watch?v=YE7VzlLtp-4'
Lưu ý về các biến môi trường
- Các biến môi trường thường được chỉ định là
${VARIABLE}/$VARIABLEtrên UNIX và%VARIABLE%trên Windows; nhưng luôn được hiển thị là${VARIABLE}trong tài liệu này - yt-dlp cũng cho phép sử dụng các biến kiểu UNIX trên Windows cho các tùy chọn giống như đường dẫn; ví dụ.
--output,--config-locations - Nếu không đặt,
${XDG_CONFIG_HOME}mặc định là~/.configvà${XDG_CACHE_HOME}để~/.cache - Trên Windows,
~chỉ vào${HOME}nếu có; hoặc,${USERPROFILE}hoặc${HOMEDRIVE}${HOMEPATH}mặt khác - Trên Windows,
${USERPROFILE}nói chung là trỏ đếnC:\Users\<user name>và${APPDATA}để${USERPROFILE}\AppData\Roaming
MẪU ĐẦU RA
các -o tùy chọn được sử dụng để chỉ ra mẫu cho tên tệp đầu ra trong khi -P tùy chọn được sử dụng để chỉ định đường dẫn mà mỗi loại tệp sẽ được lưu vào.
tl;dr: điều hướng tôi đến các ví dụ.
Cách sử dụng đơn giản nhất của -o không được đặt bất kỳ đối số mẫu nào khi tải xuống một tệp, như trong yt-dlp -o funny_video.flv "https://some/video" (phần mở rộng tập tin mã hóa cứng như thế này là không được đề xuất và có thể phá vỡ một số quá trình xử lý hậu kỳ).
Tuy nhiên, nó cũng có thể chứa các chuỗi đặc biệt sẽ được thay thế khi tải xuống từng video. Các chuỗi đặc biệt có thể được định dạng theo Hoạt động định dạng chuỗi Python, ví dụ: %(NAME)s hoặc %(NAME)05d. Để làm rõ, đó là ký hiệu phần trăm, theo sau là tên trong ngoặc đơn, theo sau là các thao tác định dạng.
Bản thân tên trường (phần bên trong dấu ngoặc đơn) cũng có thể có một số định dạng đặc biệt:
Truyền tải đối tượng: Từ điển và danh sách có sẵn trong siêu dữ liệu có thể được duyệt bằng cách sử dụng dấu chấm
.dải phân cách; ví dụ.%(tags.0)s,%(subtitles.en.-1.ext)s. Bạn có thể thực hiện cắt lát Python bằng dấu hai chấm:; Ví dụ.%(id.3:7)s,%(id.6:2:-1)s,%(formats.:.format_id)s. niềng răng xoăn{}có thể được sử dụng để xây dựng từ điển chỉ với các khóa cụ thể; ví dụ.%(formats.:.{format_id,height})#j. Tên trường trống%()sđề cập đến toàn bộ thông tin; ví dụ.%(.{id,title})s. Lưu ý rằng tất cả các trường có sẵn bằng phương pháp này không được liệt kê bên dưới. sử dụng-jđể xem các trường như vậysố học: Số học đơn giản có thể được thực hiện trên các trường số bằng cách sử dụng
+,-và*. Ví dụ.%(playlist_index+10)03d,%(n_entries+1-playlist_index)dĐịnh dạng ngày/giờ: Các trường ngày/giờ có thể được định dạng theo định dạng strftime bằng cách chỉ định nó được tách khỏi tên trường bằng cách sử dụng một
>. Ví dụ.%(duration>%H-%M-%S)s,%(upload_date>%Y-%m-%d)s,%(epoch-3600>%H-%M-%S)sLựa chọn thay thế: Các trường thay thế có thể được chỉ định và phân tách bằng dấu
,. Ví dụ.%(release_date>%Y,upload_date>%Y|Unknown)sthay thế: Một giá trị thay thế có thể được chỉ định bằng cách sử dụng một
&dấu phân cách theostr.formatngôn ngữ nhỏ. Nếu trường là không trống, giá trị thay thế này sẽ được sử dụng thay cho nội dung trường thực tế. Việc này được thực hiện sau khi các trường thay thế được xem xét; do đó sự thay thế được sử dụng nếu bất kỳ của các trường thay thế là không trống rỗng. Ví dụ.%(chapters&has chapters|no chapters)s,%(title&TITLE={:>20}|NO TITLE)sMặc định: Giá trị mặc định bằng chữ có thể được chỉ định khi trường trống bằng cách sử dụng
|dải phân cách. Điều này ghi đè--output-na-placeholder. Ví dụ.%(uploader|Unknown)sNhiều chuyển đổi hơn: Ngoài các loại định dạng thông thường
diouxXeEfFgGcrs, yt-dlp còn hỗ trợ chuyển đổi sangB= Bngày,j= jcon trai (cờ#để in đẹp,+cho Unicode),h= Thoát HTML,l= được phân tách bằng dấu phẩy list (cờ#cho\nđược phân tách bằng dòng mới),q= một chuỗi qđược chọn cho thiết bị đầu cuối (cờ#để chia danh sách thành các đối số khác nhau),D= thêm Dhậu tố thập phân (ví dụ: 10M) (cờ#để sử dụng 1024 làm hệ số) vàS= Sanitize dưới dạng tên tệp (cờ#bị hạn chế)Chuẩn hóa Unicode: Kiểu định dạng
Ucó thể được sử dụng cho NFC Chuẩn hóa Unicode. Cờ dạng thay thế (#) thay đổi chuẩn hóa thành NFD và cờ chuyển đổi+có thể được sử dụng để chuẩn hóa tương đương tương thích NFKC/NFKD. Ví dụ.%(title)+.100Ulà NFKC
Tóm lại, cú pháp chung cho một trường là:
%(name[.keys][addition][>strf][,alternate][&replacement][|default])[flags][width][.precision][length]type
Ngoài ra, bạn có thể đặt các mẫu đầu ra khác nhau cho các tệp siêu dữ liệu khác nhau tách biệt với mẫu đầu ra chung bằng cách chỉ định loại tệp theo sau là mẫu được phân tách bằng dấu hai chấm :. Các loại tệp khác nhau được hỗ trợ là subtitle, thumbnail, description, annotation (không dùng nữa), infojson, link, pl_thumbnail, pl_description, pl_infojson, chapter, pl_video. Ví dụ. -o "%(title)s.%(ext)s" -o "thumbnail:%(title)s/%(title)s.%(ext)s" sẽ đặt các hình thu nhỏ vào một thư mục có cùng tên với video. Nếu bất kỳ mẫu nào trống, loại tệp đó sẽ không được ghi. Ví dụ. --write-thumbnail -o "thumbnail:" sẽ chỉ viết hình thu nhỏ cho danh sách phát chứ không viết cho video.
Lưu ý: Do quá trình xử lý hậu kỳ (tức là hợp nhất, v.v.), tên tệp đầu ra thực tế có thể khác. sử dụng --print after_move:filepath để có được tên sau khi hoàn tất quá trình xử lý hậu kỳ.
Các trường có sẵn là:
id(chuỗi): Mã nhận dạng videotitle(chuỗi): Tiêu đề videofulltitle(chuỗi): Tiêu đề video bỏ qua dấu thời gian trực tiếp và tiêu đề chungext(chuỗi): Phần mở rộng tên tệp videoalt_title(chuỗi): Tiêu đề phụ của videodescription(chuỗi): Mô tả của videodisplay_id(chuỗi): Mã định danh thay thế cho videouploader(chuỗi): Tên đầy đủ của người tải video lênuploader_id(chuỗi): Biệt hiệu hoặc id của người tải video lênuploader_url(chuỗi): URL tới hồ sơ của người tải video lênlicense(chuỗi): Tên giấy phép mà video được cấp phépcreators(danh sách): Người tạo videocreator(chuỗi): Người tạo video; được phân tách bằng dấu phẩytimestamp(số): Dấu thời gian UNIX tại thời điểm video có sẵnupload_date(chuỗi): Ngày tải lên video theo giờ UTC (YYYYMMDD)release_timestamp(số): Dấu thời gian UNIX tại thời điểm video được phát hànhrelease_date(chuỗi): Ngày (YYYYMMDD) khi video được phát hành theo giờ UTCrelease_year(số): Năm (YYYY) khi video hoặc album được phát hànhmodified_timestamp(số): Dấu thời gian UNIX của thời điểm video được sửa đổi lần cuốimodified_date(chuỗi): Ngày (YYYYMMDD) khi video được sửa đổi lần cuối trong UTCchannel(chuỗi): Tên đầy đủ của kênh tải video lên đóchannel_id(chuỗi): Id của kênhchannel_url(chuỗi): URL của kênhchannel_follower_count(số): Số người theo dõi kênhchannel_is_verified(boolean): Liệu kênh có được xác minh trên nền tảng hay khônglocation(chuỗi): Vị trí thực tế nơi video được quayduration(số): Độ dài của video tính bằng giâyduration_string(chuỗi): Độ dài của video (HH:mm:ss)view_count(số): Có bao nhiêu người dùng đã xem video trên nền tảngconcurrent_view_count(số): Có bao nhiêu người dùng hiện đang xem video trên nền tảng.like_count(số): Số lượt đánh giá tích cực của videodislike_count(số): Số lượng đánh giá tiêu cực của videorepost_count(số): Số lượt đăng lại của videoaverage_rating(số): Đánh giá trung bình do người dùng đưa ra, thang đo được sử dụng tùy thuộc vào trang webcomment_count(số): Số lượng bình luận trên video (Đối với một số trình trích xuất, bình luận chỉ được tải xuống ở cuối nên không thể sử dụng trường này)save_count(số): Số lần video được lưu hoặc đánh dấuage_limit(số): Giới hạn độ tuổi cho video (năm)live_status(chuỗi): Một trong số "not_live", "is_live", "is_upcoming", "was_live", "post_live" (đã hoạt động nhưng VOD chưa được xử lý)is_live(boolean): Video này là video phát trực tiếp hay video có thời lượng cố địnhwas_live(boolean): Video này ban đầu có phải là luồng trực tiếp hay khôngplayable_in_embed(chuỗi): Liệu video này có được phép phát trong trình phát được nhúng trên các trang web khác hay khôngavailability(chuỗi): Video ở chế độ "riêng tư", "premium_only", "subscriber_only", "needs_auth", "không công khai" hay "công khai"media_type(chuỗi): Loại phương tiện được phân loại theo trang web, ví dụ: "tập", "clip", "đoạn giới thiệu"start_time(số): Thời gian tính bằng giây khi quá trình sao chép sẽ bắt đầu, như được chỉ định trong URLend_time(số): Thời gian tính bằng giây khi quá trình sao chép sẽ kết thúc, như được chỉ định trong URLextractor(chuỗi): Tên của trình trích xuấtextractor_key(chuỗi): Tên khóa của trình trích xuấtepoch(số): Thời điểm Unix khi quá trình trích xuất thông tin hoàn tấtautonumber(số): Số sẽ tăng lên sau mỗi lần tải xuống, bắt đầu từ--autonumber-start, được đệm bằng các số 0 đứng đầu đến 5 chữ sốvideo_autonumber(số): Số sẽ tăng dần theo từng videon_entries(số): Tổng số mục được trích xuất trong danh sách phátplaylist_id(chuỗi): Mã định danh của danh sách phát có chứa videoplaylist_title(chuỗi): Tên danh sách phát có chứa videoplaylist(chuỗi):playlist_titlenếu có hoặc nếu khôngplaylist_idplaylist_count(số): Tổng số mục trong danh sách phát. Có thể không biết liệu toàn bộ danh sách phát có được trích xuất hay khôngplaylist_index(số): Chỉ mục của video trong danh sách phát được đệm bằng các số 0 đứng đầu theo chỉ mục cuối cùngplaylist_autonumber(số): Vị trí của video trong hàng đợi tải xuống danh sách phát được đệm bằng các số 0 đứng đầu theo tổng thời lượng của danh sách phátplaylist_uploader(chuỗi): Tên đầy đủ của người tải lên danh sách phátplaylist_uploader_id(chuỗi): Biệt hiệu hoặc id của người tải lên danh sách phátplaylist_channel(chuỗi): Hiển thị tên kênh đã tải lên danh sách phátplaylist_channel_id(chuỗi): Mã nhận dạng của kênh đã tải lên danh sách phátplaylist_webpage_url(chuỗi): URL của trang web danh sách phátwebpage_url(chuỗi): URL tới trang web video, nếu được cung cấp cho yt-dlp, sẽ mang lại kết quả tương tựwebpage_url_basename(chuỗi): Tên cơ sở của URL trang webwebpage_url_domain(chuỗi): Tên miền của URL trang weboriginal_url(chuỗi): URL do người dùng cung cấp (hoặc giống vớiwebpage_urlcho các mục danh sách phát)categories(danh sách): Danh sách các danh mục mà video thuộc vềtags(danh sách): Danh sách các thẻ được gán cho videocast(danh sách): Danh sách diễn viên
Tất cả các trường trong Định dạng lọc cũng có thể được sử dụng
Có sẵn cho video thuộc một số chương hoặc phần logic:
chapter(chuỗi): Tên hoặc tiêu đề của chương chứa videochapter_number(số): Số chương của videochapter_id(chuỗi): Id của chương chứa video
Có sẵn cho video là một tập của loạt phim hoặc chương trình nào đó:
series(chuỗi): Tiêu đề của bộ phim hoặc chương trình mà tập video thuộc vềseries_id(chuỗi): Id của bộ phim hoặc chương trình mà tập video thuộc vềseason(chuỗi): Tiêu đề của phần mà tập video thuộc vềseason_number(số): Số phần của tập videoseason_id(chuỗi): Id của phần mà tập video thuộc vềepisode(chuỗi): Tiêu đề của tập videoepisode_number(số): Số tập video trong một phầnepisode_id(chuỗi): Id của tập video
Có sẵn cho phương tiện là một bản nhạc hoặc một phần của album nhạc:
track(chuỗi): Tiêu đề của bài háttrack_number(số): Số bản nhạc trong album hoặc đĩatrack_id(chuỗi): Id của bản nhạcartists(danh sách): (các) nghệ sĩ của bài hátartist(chuỗi): Nghệ sĩ của bản nhạc; được phân tách bằng dấu phẩygenres(danh sách): Thể loại của bản nhạcgenre(chuỗi): Thể loại của bản nhạc; được phân tách bằng dấu phẩycomposers(danh sách): (Các) nhà soạn nhạc của tác phẩmcomposer(chuỗi): (Các) nhà soạn nhạc của tác phẩm; được phân tách bằng dấu phẩyalbum(chuỗi): Tiêu đề album chứa bài hátalbum_type(chuỗi): Loại albumalbum_artists(danh sách): Tất cả nghệ sĩ có mặt trong albumalbum_artist(chuỗi): Tất cả nghệ sĩ có mặt trong album; được phân tách bằng dấu phẩydisc_number(số): Số đĩa hoặc phương tiện vật lý khác chứa bản nhạc
Chỉ khả dụng khi sử dụng --download-sections và cho chapter: tiền tố khi sử dụng --split-chapters đối với video có chương nội bộ:
section_title(chuỗi): Tiêu đề của chươngsection_number(số): Số chương trong tệpsection_start(số): Thời gian bắt đầu của chương tính bằng giâysection_end(số): Thời gian kết thúc chương tính bằng giây
Chỉ khả dụng khi được sử dụng trong --print:
urls(chuỗi): URL của tất cả các định dạng được yêu cầu, một URL trên mỗi dòngfilename(string): Tên file video. Lưu ý rằng tên tập tin thực tế có thể khác nhauformats_table(bảng): Bảng định dạng video được in bởi--list-formatsthumbnails_table(bảng): Bảng định dạng hình thu nhỏ được in bởi--list-thumbnailssubtitles_table(bảng): Bảng định dạng phụ đề được in bởi--list-subsautomatic_captions_table(bảng): Bảng định dạng phụ đề tự động được in bởi--list-subs
Chỉ khả dụng sau khi video được tải xuống (post_process/after_move):
filepath: Đường dẫn thực tế của file video đã tải về
Chỉ có ở --sponsorblock-chapter-title:
start_time(số): Thời gian bắt đầu của chương tính bằng giâyend_time(số): Thời gian kết thúc chương tính bằng giâycategories(danh sách): Các Nhà tài trợChặn danh mục chương này thuộc vềcategory(chuỗi): Danh mục Nhà tài trợ nhỏ nhất mà chương thuộc vềcategory_names(danh sách): Tên thân thiện của các danh mụcname(chuỗi): Tên thân thiện của danh mục nhỏ nhấttype(chuỗi): Cái Loại hành động chặn nhà tài trợ của chương
Mỗi chuỗi nói trên khi được tham chiếu trong mẫu đầu ra sẽ được thay thế bằng giá trị thực tế tương ứng với tên chuỗi. Ví dụ: cho -o %(title)s-%(id)s.%(ext)s và một video mp4 có tiêu đề yt-dlp test video và id YE7VzlLtp-4, điều này sẽ dẫn đến một yt-dlp test video-YE7VzlLtp-4.mp4 tập tin được tạo trong thư mục hiện tại.
Lưu ý: Một số trình tự không được đảm bảo xuất hiện vì chúng phụ thuộc vào siêu dữ liệu thu được từ một trình trích xuất cụ thể. Các chuỗi như vậy sẽ được thay thế bằng giá trị giữ chỗ được cung cấp cùng với --output-na-placeholder (NA theo mặc định).
Mẹo: Nhìn vào -j đầu ra để xác định trường nào có sẵn cho URL cụ thể
Đối với chuỗi số, bạn có thể sử dụng định dạng liên quan đến số; ví dụ. %(view_count)05d sẽ dẫn đến một chuỗi có số lượt xem được đệm bằng số 0 tối đa 5 ký tự, như trong 00042.
Các mẫu đầu ra cũng có thể chứa đường dẫn phân cấp tùy ý, ví dụ: -o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" điều này sẽ dẫn đến việc tải xuống từng video trong một thư mục tương ứng với mẫu đường dẫn này. Mọi thư mục bị thiếu sẽ được tự động tạo cho bạn.
Để sử dụng phần trăm chữ trong mẫu đầu ra, hãy sử dụng %%. Để xuất ra thiết bị xuất chuẩn, hãy sử dụng -o -.
Mẫu mặc định hiện tại là %(title)s [%(id)s].%(ext)s.
Trong một số trường hợp, bạn không muốn các ký tự đặc biệt như 中, dấu cách hoặc &, chẳng hạn như khi truyền tên tệp đã tải xuống sang hệ thống Windows hoặc tên tệp qua kênh không an toàn 8 bit. Trong những trường hợp này, hãy thêm --restrict-filenames flag để có được tiêu đề ngắn hơn.
Ví dụ về mẫu đầu ra
$ yt-dlp --print filename -o "test video.%(ext)s" ptd1NN40vMw
test video.webm # Literal name with correct extension
$ yt-dlp --print filename -o "%(title)s.%(ext)s" ptd1NN40vMw
To'y!🤯😂🤦🏻♂️.webm # All kinds of weird characters
$ yt-dlp --print filename -o "%(title)s.%(ext)s" ptd1NN40vMw --restrict-filenames
To_y.webm # Restricted file name
# Download YouTube playlist videos in separate directory indexed by video order in a playlist
$ yt-dlp -o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
# Download YouTube playlist videos in separate directories according to their uploaded year
$ yt-dlp -o "%(upload_date>%Y)s/%(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
# Prefix playlist index with " - " separator, but only if it is available
$ yt-dlp -o "%(playlist_index&{} - |)s%(title)s.%(ext)s" YE7VzlLtp-4 "https://www.youtube.com/user/TheLinuxFoundation/playlists"
# Download all playlists of YouTube channel/user keeping each playlist in separate directory:
$ yt-dlp -o "%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" "https://www.youtube.com/user/TheLinuxFoundation/playlists"
# Download Udemy course keeping each chapter in separate directory under MyVideos directory in your home
$ yt-dlp -u user -p password -P "~/MyVideos" -o "%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s" "https://www.udemy.com/java-tutorial"
# Download entire series season keeping each series and each season in separate directory under C:/MyVideos
$ yt-dlp -P "C:/MyVideos" -o "%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s" "https://videomore.ru/kino_v_detalayah/5_sezon/367617"
# Download video as "C:\MyVideos\uploader\title.ext", subtitles as "C:\MyVideos\subs\uploader\title.ext"
# and put all temporary files in "C:\MyVideos\tmp"
$ yt-dlp -P "C:/MyVideos" -P "temp:tmp" -P "subtitle:subs" -o "%(uploader)s/%(title)s.%(ext)s" YE7VzlLtp-4 --write-subs
# Download video as "C:\MyVideos\uploader\title.ext" and subtitles as "C:\MyVideos\uploader\subs\title.ext"
$ yt-dlp -P "C:/MyVideos" -o "%(uploader)s/%(title)s.%(ext)s" -o "subtitle:%(uploader)s/subs/%(title)s.%(ext)s" YE7VzlLtp-4 --write-subs
# Stream the video being downloaded to stdout
$ yt-dlp -o - YE7VzlLtp-4
LỰA CHỌN ĐỊNH DẠNG
Theo mặc định, yt-dlp cố gắng tải xuống chất lượng tốt nhất hiện có nếu bạn đừng vượt qua bất kỳ lựa chọn nào. Điều này thường tương đương với việc sử dụng -f bestvideo*+bestaudio/best. Tuy nhiên, nếu nhiều luồng âm thanh được bật (--audio-multistreams), định dạng mặc định thay đổi thành -f bestvideo+bestaudio/best. Tương tự, nếu ffmpeg không có sẵn hoặc nếu bạn sử dụng yt-dlp để truyền phát tới stdout (-o -), mặc định trở thành -f best/bestvideo+bestaudio.
Cảnh báo không dùng nữa: Các phiên bản mới nhất của yt-dlp có thể truyền đồng thời nhiều định dạng tới thiết bị xuất chuẩn bằng cách sử dụng ffmpeg. Vì vậy, trong các phiên bản sau này, mặc định cho điều này sẽ được đặt thành -f bv*+ba/b tương tự như tải xuống thông thường. Nếu bạn muốn bảo tồn -f b/bv+ba cài đặt này, bạn nên chỉ định rõ ràng nó trong các tùy chọn cấu hình.
Cú pháp chung để chọn định dạng là -f FORMAT (hoặc --format FORMAT) ở đâu FORMAT là một biểu thức chọn, tức là một biểu thức mô tả định dạng hoặc các định dạng bạn muốn tải xuống.
tl;dr: điều hướng tôi đến các ví dụ.
Trường hợp đơn giản nhất là yêu cầu một định dạng cụ thể; ví dụ. với -f 22 bạn có thể tải xuống định dạng có mã định dạng bằng 22. Bạn có thể lấy danh sách mã định dạng có sẵn cho video cụ thể bằng cách sử dụng --list-formats hoặc -F. Lưu ý rằng các mã định dạng này dành riêng cho trình trích xuất.
Bạn cũng có thể sử dụng phần mở rộng tập tin (hiện tại 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm được hỗ trợ) để tải xuống định dạng chất lượng tốt nhất của một phần mở rộng tệp cụ thể được phân phát dưới dạng một tệp duy nhất, ví dụ: -f webm sẽ tải xuống định dạng chất lượng tốt nhất với webm phần mở rộng được phục vụ dưới dạng một tập tin duy nhất.
Bạn có thể sử dụng -f - để tương tác cung cấp bộ chọn định dạng cho mỗi video
Bạn cũng có thể sử dụng các tên đặc biệt để chọn các định dạng trường hợp đặc biệt:
all: Chọn tất cả các định dạng riêng biệtmergeall: Chọn và hợp nhất tất cả các định dạng (Phải sử dụng với--audio-multistreams,--video-multistreamshoặc cả hai)b*,best*: Chọn định dạng có chất lượng tốt nhất chứa một trong hai video hoặc âm thanh hoặc cả hai (tức là;vcodec!=none or acodec!=none)b,best: Chọn định dạng có chất lượng tốt nhất chứa cả hai video và âm thanh. Tương đương vớibest*[vcodec!=none][acodec!=none]bv,bestvideo: Chọn chất lượng tốt nhất chỉ có video định dạng. Tương đương vớibest*[acodec=none]bv*,bestvideo*: Chọn định dạng có chất lượng tốt nhất chứa video. Nó cũng có thể chứa âm thanh. Tương đương vớibest*[vcodec!=none]ba,bestaudio: Chọn chất lượng tốt nhất chỉ có âm thanh định dạng. Tương đương vớibest*[vcodec=none]ba*,bestaudio*: Chọn định dạng có chất lượng tốt nhất chứa âm thanh. Nó cũng có thể chứa video. Tương đương vớibest*[acodec!=none](Không sử dụng!)w*,worst*: Chọn định dạng có chất lượng kém nhất chứa video hoặc âm thanhw,worst: Chọn định dạng có chất lượng kém nhất chứa cả video và âm thanh. Tương đương vớiworst*[vcodec!=none][acodec!=none]wv,worstvideo: Chọn định dạng chỉ dành cho video có chất lượng kém nhất. Tương đương vớiworst*[acodec=none]wv*,worstvideo*: Chọn định dạng có chất lượng kém nhất chứa video. Nó cũng có thể chứa âm thanh. Tương đương vớiworst*[vcodec!=none]wa,worstaudio: Chọn định dạng chỉ có âm thanh có chất lượng kém nhất. Tương đương vớiworst*[vcodec=none]wa*,worstaudio*: Chọn định dạng có chất lượng kém nhất chứa âm thanh. Nó cũng có thể chứa video. Tương đương vớiworst*[acodec!=none]
Ví dụ: để tải xuống định dạng chỉ dành cho video có chất lượng kém nhất, bạn có thể sử dụng -f worstvideo. Tuy nhiên, khuyến cáo không nên sử dụng worst và các tùy chọn liên quan. Khi bộ chọn định dạng của bạn được worst, định dạng tệ nhất về mọi mặt sẽ được chọn. Trong hầu hết các trường hợp, điều bạn thực sự muốn là video có kích thước tệp nhỏ nhất. Vì vậy, nói chung là tốt hơn để sử dụng -S +size hoặc chặt chẽ hơn, -S +size,+br,+res,+fps thay vì -f worst. Xem Sắp xếp định dạng để biết thêm chi tiết.
Bạn có thể chọn định dạng tốt nhất thứ n của loại bằng cách sử dụng best<type>.<n>. Ví dụ, best.2 sẽ chọn định dạng kết hợp tốt thứ 2. Tương tự, bv*.3 sẽ chọn định dạng tốt thứ 3 có chứa luồng video.
Nếu bạn muốn tải xuống nhiều video và chúng không có sẵn định dạng giống nhau, bạn có thể chỉ định thứ tự ưu tiên bằng cách sử dụng dấu gạch chéo. Lưu ý rằng các định dạng ở phía bên trái được ưu tiên; ví dụ. -f 22/17/18 sẽ tải xuống định dạng 22 nếu có, nếu không nó sẽ tải xuống định dạng 17 nếu có, nếu không nó sẽ tải xuống định dạng 18 nếu có, nếu không nó sẽ phàn nàn rằng không có định dạng phù hợp để tải xuống.
Nếu bạn muốn tải xuống nhiều định dạng của cùng một video, hãy sử dụng dấu phẩy làm dấu phân cách, ví dụ: -f 22,17,18 tất nhiên sẽ tải xuống cả ba định dạng này nếu chúng có sẵn. Hoặc một ví dụ phức tạp hơn kết hợp với tính năng ưu tiên: -f 136/137/mp4/bestvideo,140/m4a/bestaudio.
Bạn có thể hợp nhất video và âm thanh của nhiều định dạng thành một tệp duy nhất bằng cách sử dụng -f <format1>+<format2>+... (yêu cầu cài đặt ffmpeg); ví dụ. -f bestvideo+bestaudio sẽ tải xuống định dạng chỉ có video tốt nhất, định dạng chỉ có âm thanh tốt nhất và trộn chúng cùng với ffmpeg.
Cảnh báo không dùng nữa: Kể từ khi bên dưới hành vi được mô tả là phức tạp và phản trực giác, điều này sẽ bị xóa và tính năng đa luồng sẽ được bật theo mặc định trong tương lai. Thay vào đó, một toán tử mới sẽ được thêm vào để giới hạn các định dạng cho một âm thanh/video
Trừ khi --video-multistreams được sử dụng, tất cả các định dạng có luồng video ngoại trừ định dạng đầu tiên sẽ bị bỏ qua. Tương tự, trừ khi --audio-multistreams được sử dụng, tất cả các định dạng có luồng âm thanh ngoại trừ định dạng đầu tiên sẽ bị bỏ qua. Ví dụ. -f bestvideo+best+bestaudio --video-multistreams --audio-multistreams sẽ tải xuống và hợp nhất cả 3 định dạng nhất định. File kết quả sẽ có 2 luồng video và 2 luồng âm thanh. Nhưng -f bestvideo+best+bestaudio --no-video-multistreams sẽ chỉ tải xuống và hợp nhất bestvideo và bestaudio. best bị bỏ qua vì định dạng khác chứa luồng video (bestvideo) đã được chọn. Do đó, thứ tự của các định dạng rất quan trọng. -f best+bestaudio --no-audio-multistreams sẽ chỉ tải xuống best trong khi -f bestaudio+best --no-audio-multistreams sẽ bỏ qua best và chỉ tải xuống bestaudio.
Định dạng lọc
Bạn cũng có thể lọc các định dạng video bằng cách đặt điều kiện trong ngoặc, như trong -f "best[height=720]" (hoặc -f "[filesize>10M]" vì các bộ lọc không có bộ chọn được hiểu là best).
Các trường meta số sau đây có thể được sử dụng để so sánh <, <=, >, >=, = (bằng), != (không bằng):
filesize: Số byte, nếu biết trướcfilesize_approx: Ước tính số bytewidth: Chiều rộng của video, nếu biếtheight: Chiều cao của video, nếu biếtaspect_ratio: Tỷ lệ khung hình của video, nếu biếttbr: Tốc độ bit trung bình của âm thanh và video trong kbpsabr: Tốc độ bit âm thanh trung bình trong kbpsvbr: Tốc độ bit video trung bình trong kbpsasr: Tốc độ lấy mẫu âm thanh tính bằng Hertzfps: Tốc độ khung hìnhaudio_channels: Số lượng kênh âm thanhstretched_ratio:width:heightsố pixel của video, nếu không phải là hình vuông
Đồng thời lọc công việc để so sánh = (bằng), ^= (bắt đầu bằng), $= (kết thúc bằng), *= (chứa), ~= (khớp với biểu thức chính quy) và các trường meta chuỗi sau:
url: URL videoext: Phần mở rộng tập tinacodec: Tên codec âm thanh đang sử dụngvcodec: Tên của codec video đang sử dụngcontainer: Tên định dạng vùng chứaprotocol: Giao thức sẽ được sử dụng để tải xuống thực tế, chữ thường (http,https,rtmp,rtmpe,f4m,ism,http_dash_segments,m3u8hoặcm3u8_native)language: Mã ngôn ngữdynamic_range: Phạm vi động của videoformat_id: Mô tả ngắn gọn về định dạngformat: Mô tả định dạng mà con người có thể đọc đượcformat_note: Thông tin bổ sung về định dạngresolution: Mô tả văn bản về chiều rộng và chiều cao
Bất kỳ so sánh chuỗi nào cũng có thể được bắt đầu bằng phủ định ! để tạo ra một so sánh ngược lại, ví dụ: !*= (không chứa). So sánh của so sánh chuỗi cần phải được trích dẫn bằng dấu ngoặc kép hoặc dấu ngoặc đơn nếu nó chứa dấu cách hoặc ký tự đặc biệt không phải là ._-.
Lưu ý: Không có trường meta nào nói trên được đảm bảo xuất hiện vì điều này chỉ phụ thuộc vào siêu dữ liệu mà trình trích xuất cụ thể thu được, tức là siêu dữ liệu do trang web cung cấp. Bất kỳ trường nào khác được trình trích xuất cung cấp cũng có thể được sử dụng để lọc.
Các định dạng không biết giá trị sẽ bị loại trừ trừ khi bạn đặt dấu chấm hỏi (?) sau toán tử. Bạn có thể kết hợp các bộ lọc định dạng, vì vậy -f "bv[height<=?720][tbr>500]" chọn video tối đa 720p (hoặc video không xác định được chiều cao) với tốc độ bit lớn hơn 500 kbps. Bạn cũng có thể sử dụng các bộ lọc với all để tải xuống tất cả các định dạng đáp ứng bộ lọc, ví dụ: -f "all[vcodec=none]" chọn tất cả các định dạng chỉ có âm thanh.
Bộ chọn định dạng cũng có thể được nhóm bằng dấu ngoặc đơn; ví dụ. -f "(mp4,webm)[height<480]" sẽ tải xuống các định dạng mp4 và webm được hợp nhất trước tốt nhất với chiều cao thấp hơn 480.
Sắp xếp định dạng
Bạn có thể thay đổi tiêu chí để được coi là best bằng cách sử dụng -S (--format-sort). Định dạng chung cho việc này là --format-sort field1,field2....
Các trường có sẵn là:
hasvid: Ưu tiên cho các định dạng có luồng videohasaud: Ưu tiên cho các định dạng có luồng âm thanhie_pref: Tùy chọn định dạnglang: Tùy chọn ngôn ngữ được xác định bởi trình trích xuất (ví dụ: ngôn ngữ gốc được ưu tiên hơn mô tả âm thanh)quality: Chất lượng của định dạngsource: Ưu tiên của nguồnproto: Giao thức được sử dụng để tải xuống (https/ftps>http/ftp>m3u8_native/m3u8>http_dash_segments>websocket_frag>f4f/f4m)vcodec: Bộ giải mã video (av01>vp9.2>vp9>h265>h264>vp8>h263>theora> khác)acodec: Bộ giải mã âm thanh (flac/alac>wav/aiff>opus>vorbis>aac>mp4a>mp3>ac4>eac3>ac3>dts> khác)codec: Tương đương vớivcodec,acodecvext: Phần mở rộng video (mp4>mov>webm>flv> khác). Nếu--prefer-free-formatsđược sử dụng,webmđược ưu tiên.aext: Phần mở rộng âm thanh (m4a>aac>mp3>ogg>opus>webm> khác). Nếu--prefer-free-formatsđược sử dụng, thứ tự thay đổi thànhogg>opus>webm>mp3>m4a>aacext: Tương đương vớivext,aextfilesize: Kích thước tệp chính xác, nếu biết trướcfs_approx: Kích thước tập tin gần đúngsize: Kích thước tệp chính xác nếu có, nếu không thì kích thước tệp gần đúngheight: Chiều cao của videowidth: Chiều rộng của videores: Độ phân giải video, được tính là kích thước nhỏ nhất.fps: Tốc độ khung hình của videohdr: Phạm vi động của video (DV>HDR12>HDR10+>HDR10>HLG>SDR)channels: Số lượng kênh âm thanhtbr: Tổng tốc độ bit trung bình trong kbpsvbr: Tốc độ bit video trung bình trong kbpsabr: Tốc độ bit âm thanh trung bình trong kbpsbr: Tốc độ bit trung bình trong kbps,tbr/vbr/abrasr: Tốc độ mẫu âm thanh tính bằng Hz
Cảnh báo không dùng nữa: Nhiều trường trong số này có bí danh (hiện không có giấy tờ), có thể bị xóa trong phiên bản tương lai. Bạn chỉ nên sử dụng tên trường được ghi lại.
Tất cả các trường, trừ khi có quy định khác, đều được sắp xếp theo thứ tự giảm dần. Để đảo ngược điều này, hãy thêm tiền tố vào trường +. Ví dụ. +res thích định dạng có độ phân giải nhỏ nhất. Ngoài ra, bạn có thể thêm một giá trị ưu tiên cho các trường, cách nhau bằng dấu :. Ví dụ. res:720 thích video lớn hơn nhưng không lớn hơn 720p và video nhỏ nhất nếu không có video nào nhỏ hơn 720p. cho codec và ext, bạn có thể cung cấp hai giá trị ưu tiên, giá trị đầu tiên cho video và giá trị thứ hai cho âm thanh. Ví dụ. +codec:avc:m4a (tương đương với +vcodec:avc,+acodec:m4a) đặt tùy chọn codec video thành h264 > h265 > vp9 > vp9.2 > av01 > vp8 > h263 > theora và ưu tiên codec âm thanh mp4a > aac > vorbis > opus > mp3 > ac3 > dts. Bạn cũng có thể sắp xếp ưu tiên các giá trị gần nhất với giá trị được cung cấp bằng cách sử dụng ~ như dấu phân cách. Ví dụ. filesize~1G thích định dạng có kích thước tệp gần nhất với 1 GiB.
những cánh đồng hasvid và ie_pref luôn được ưu tiên cao nhất trong việc sắp xếp, bất kể thứ tự do người dùng xác định. Hành vi này có thể được thay đổi bằng cách sử dụng --format-sort-force. Ngoài ra, thứ tự mặc định được sử dụng là: lang,quality,res,fps,hdr:12,vcodec,channels,acodec,size,br,asr,proto,ext,hasaud,source,id. Trình trích xuất có thể ghi đè thứ tự mặc định này, nhưng chúng không thể ghi đè thứ tự do người dùng cung cấp.
Lưu ý rằng mặc định cho hdr là hdr:12; tức là Dolby Vision không được ưa thích. Lựa chọn này được đưa ra vì các định dạng DV vẫn chưa tương thích hoàn toàn với hầu hết các thiết bị. Điều này có thể được thay đổi trong tương lai.
Nếu bộ chọn định dạng của bạn là worst, mục cuối cùng được chọn sau khi sắp xếp. Điều này có nghĩa là nó sẽ chọn định dạng tệ nhất về mọi mặt. Trong hầu hết các trường hợp, điều bạn thực sự muốn là video có kích thước tệp nhỏ nhất. Vì vậy, nói chung là tốt hơn để sử dụng -f best -S +size,+br,+res,+fps.
Nếu bạn sử dụng -S/--format-sort tùy chọn nhiều lần, mỗi đối số sắp xếp tiếp theo sẽ được thêm vào trước đối số trước đó và chỉ mục nhập có mức độ ưu tiên cao nhất của bất kỳ trường trùng lặp nào sẽ được giữ nguyên. Ví dụ. -S proto -S res tương đương với -S res,protovà -S res:720,fps -S vcodec,res:1080 tương đương với -S vcodec,res:1080,fps. Bạn có thể sử dụng --format-sort-reset bỏ qua mọi điều đã được thông qua trước đó -S/--format-sort đối số và đặt lại về thứ tự mặc định.
Mẹo: Bạn có thể sử dụng -v -F để xem các định dạng đã được sắp xếp như thế nào (tệ nhất đến tốt nhất).
Ví dụ về lựa chọn định dạng
# Download and merge the best video-only format and the best audio-only format,
# or download the best combined format if video-only format is not available
$ yt-dlp -f "bv+ba/b"
# Download best format that contains video,
# and if it doesn't already have an audio stream, merge it with best audio-only format
$ yt-dlp -f "bv*+ba/b"
# Same as above
$ yt-dlp
# Download the best video-only format and the best audio-only format without merging them
# For this case, an output template should be used since
# by default, bestvideo and bestaudio will have the same file name.
$ yt-dlp -f "bv,ba" -o "%(title)s.f%(format_id)s.%(ext)s"
# Download and merge the best format that has a video stream,
# and all audio-only formats into one file
$ yt-dlp -f "bv*+mergeall[vcodec=none]" --audio-multistreams
# Download and merge the best format that has a video stream,
# and the best 2 audio-only formats into one file
$ yt-dlp -f "bv*+ba+ba.2" --audio-multistreams
# The following examples show the old method (without -S) of format selection
# and how to use -S to achieve a similar but (generally) better result
# Download the worst video available (old method)
$ yt-dlp -f "wv*+wa/w"
# Download the best video available but with the smallest resolution
$ yt-dlp -S "+res"
# Download the smallest video available
$ yt-dlp -S "+size,+br"
# Download the best mp4 video available, or the best video if no mp4 available
$ yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b"
# Download the best video with the best extension
# (For video, mp4 > mov > webm > flv. For audio, m4a > aac > mp3 ...)
$ yt-dlp -S "ext"
# Download the best video available but no better than 480p,
# or the worst video if there is no video under 480p
$ yt-dlp -f "bv*[height<=480]+ba/b[height<=480] / wv*+ba/w"
# Download the best video available with the largest height but no better than 480p,
# or the best video with the smallest resolution if there is no video under 480p
$ yt-dlp -S "height:480"
# Download the best video available with the largest resolution but no better than 480p,
# or the best video with the smallest resolution if there is no video under 480p
# Resolution is determined by using the smallest dimension.
# So this works correctly for vertical videos as well
$ yt-dlp -S "res:480"
# Download the best video (that also has audio) but no bigger than 50 MB,
# or the worst video (that also has audio) if there is no video under 50 MB
$ yt-dlp -f "b[filesize<50M] / w"
# Download the largest video (that also has audio) but no bigger than 50 MB,
# or the smallest video (that also has audio) if there is no video under 50 MB
$ yt-dlp -f "b" -S "filesize:50M"
# Download the best video (that also has audio) that is closest in size to 50 MB
$ yt-dlp -f "b" -S "filesize~50M"
# Download best video available via direct link over HTTP/HTTPS protocol,
# or the best video available via any protocol if there is no such video
$ yt-dlp -f "(bv*+ba/b)[protocol^=http][protocol!*=dash] / (bv*+ba/b)"
# Download best video available via the best protocol
# (https/ftps > http/ftp > m3u8_native > m3u8 > http_dash_segments ...)
$ yt-dlp -S "proto"
# Download the best video with either h264 or h265 codec,
# or the best video if there is no such video
$ yt-dlp -f "(bv*[vcodec~='^((he|a)vc|h26[45])']+ba) / (bv*+ba/b)"
# Download the best video with best codec no better than h264,
# or the best video with worst codec if there is no such video
$ yt-dlp -S "codec:h264"
# Download the best video with worst codec no worse than h264,
# or the best video with best codec if there is no such video
$ yt-dlp -S "+codec:h264"
# More complex examples
# Download the best video no better than 720p preferring framerate greater than 30,
# or the worst video (still preferring framerate greater than 30) if there is no such video
$ yt-dlp -f "((bv*[fps>30]/bv*)[height<=720]/(wv*[fps>30]/wv*)) + ba / (b[fps>30]/b)[height<=720]/(w[fps>30]/w)"
# Download the video with the largest resolution no better than 720p,
# or the video with the smallest resolution available if there is no such video,
# preferring larger framerate for formats with the same resolution
$ yt-dlp -S "res:720,fps"
# Download the video with smallest resolution no worse than 480p,
# or the video with the largest resolution available if there is no such video,
# preferring better codec and then larger total bitrate for the same resolution
$ yt-dlp -S "+res:480,codec,br"
SỬA ĐỔI SIÊU DỮ LIỆU
Siêu dữ liệu mà trình trích xuất thu được có thể được sửa đổi bằng cách sử dụng --parse-metadata và --replace-in-metadata
--replace-in-metadata FIELDS REGEX REPLACE được sử dụng để thay thế văn bản trong bất kỳ trường siêu dữ liệu nào bằng cách sử dụng biểu thức chính quy Python. Tham khảo ngược có thể được sử dụng trong chuỗi thay thế để sử dụng nâng cao.
Cú pháp chung của --parse-metadata FROM:TO là đặt tên của một trường hoặc một mẫu đầu ra để trích xuất dữ liệu từ đó và định dạng để diễn giải dữ liệu đó, được phân tách bằng dấu hai chấm :. Hoặc là một biểu thức chính quy Python với các nhóm chụp được đặt tên, một tên trường duy nhất hoặc cú pháp tương tự với mẫu đầu ra (chỉ %(field)s định dạng được hỗ trợ) có thể được sử dụng cho TO. Tùy chọn này có thể được sử dụng nhiều lần để phân tích và sửa đổi các trường khác nhau.
Lưu ý rằng các tùy chọn này giữ nguyên thứ tự tương đối của chúng, cho phép thực hiện thay thế trong các trường được phân tích cú pháp và ngược lại. Ngoài ra, bất kỳ trường nào được tạo ra đều có thể được sử dụng trong mẫu đầu ra và cũng sẽ ảnh hưởng đến siêu dữ liệu của tệp phương tiện được thêm vào khi sử dụng --embed-metadata.
Tùy chọn này cũng có một vài cách sử dụng đặc biệt:
Bạn có thể tải xuống URL bổ sung dựa trên siêu dữ liệu của video hiện đang tải xuống. Để thực hiện việc này, hãy đặt trường
additional_urlstới URL mà bạn muốn tải xuống. Ví dụ.--parse-metadata "description:(?P<additional_urls>https?://www\.vimeo\.com/\d+)"sẽ tải xuống video vimeo đầu tiên được tìm thấy trong phần mô tảBạn có thể sử dụng điều này để thay đổi siêu dữ liệu được nhúng trong tệp phương tiện. Để thực hiện việc này, hãy đặt giá trị của trường tương ứng bằng
meta_tiền tố. Ví dụ: bất kỳ giá trị nào bạn đặt thànhmeta_descriptiontrường sẽ được thêm vàodescriptiontrong tệp - bạn có thể sử dụng trường này để đặt "mô tả" và "tóm tắt" khác. Để sửa đổi siêu dữ liệu của từng luồng riêng lẻ, hãy sử dụngmeta<n>_tiền tố (ví dụ:meta1_language). Bất kỳ giá trị nào được đặt thànhmeta_trường sẽ ghi đè lên tất cả các giá trị mặc định.
Lưu ý: Việc sửa đổi siêu dữ liệu xảy ra trước khi lựa chọn định dạng, trích xuất sau và các hoạt động xử lý hậu kỳ khác. Một số trường có thể được thêm hoặc thay đổi trong các bước này, ghi đè các thay đổi của bạn.
Để tham khảo, đây là các trường yt-dlp thêm theo mặc định vào siêu dữ liệu tệp:
| Trường siêu dữ liệu | Từ |
|---|---|
title |
track hoặc title |
date |
upload_date |
description, synopsis |
description |
purl, comment |
webpage_url |
track |
track_number |
artist |
artist, artists, creator, creators, uploader hoặc uploader_id |
composer |
composer hoặc composers |
genre |
genre, genres, categories hoặc tags |
album |
album hoặc series |
album_artist |
album_artist hoặc album_artists |
disc |
disc_number |
show |
series |
season_number |
season_number |
episode_id |
episode hoặc episode_id |
episode_sort |
episode_number |
language của mỗi luồng |
định dạng của language |
Lưu ý: Định dạng tệp có thể không hỗ trợ một số trường này
Sửa đổi ví dụ về siêu dữ liệu
# Interpret the title as "Artist - Title"
$ yt-dlp --parse-metadata "title:%(artist)s - %(title)s"
# Regex example
$ yt-dlp --parse-metadata "description:Artist - (?P<artist>.+)"
# Copy the episode field to the title field (with FROM and TO as single fields)
$ yt-dlp --parse-metadata "episode:title"
# Set title as "Series name S01E05"
$ yt-dlp --parse-metadata "%(series)s S%(season_number)02dE%(episode_number)02d:%(title)s"
# Prioritize uploader as the "artist" field in video metadata
$ yt-dlp --parse-metadata "%(uploader|)s:%(meta_artist)s" --embed-metadata
# Set "comment" field in video metadata using description instead of webpage_url,
# handling multiple lines correctly
$ yt-dlp --parse-metadata "description:(?s)(?P<meta_comment>.+)" --embed-metadata
# Do not set any "synopsis" in the video metadata
$ yt-dlp --parse-metadata ":(?P<meta_synopsis>)"
# Remove "formats" field from the infojson by setting it to an empty string
$ yt-dlp --parse-metadata "video::(?P<formats>)" --write-info-json
# Replace all spaces and "_" in title and uploader with a `-`
$ yt-dlp --replace-in-metadata "title,uploader" "[ _]" "-"
LUẬN LUẬT TUYỆT VỜI
Một số trình trích xuất chấp nhận các đối số bổ sung có thể được chuyển bằng cách sử dụng --extractor-args KEY:ARGS. ARGS là một ; (dấu chấm phẩy) chuỗi được phân tách ARG=VAL1,VAL2. Ví dụ. --extractor-args "youtube:player-client=tv,mweb;formats=incomplete" --extractor-args "twitter:api=syndication"
Lưu ý: Trong CLI, ARG có thể sử dụng - thay vì _; ví dụ. youtube:player-client" trở thành youtube:player_client"
Các trình trích xuất sau đây sử dụng tính năng này:
youtube
lang: Ưu tiên siêu dữ liệu được dịch (title,descriptionv.v.) của mã ngôn ngữ này (phân biệt chữ hoa chữ thường). Theo mặc định, siêu dữ liệu ngôn ngữ chính của video được ưu tiên và dự phòng thànhenđã dịch. Xem youtube/_base.py để biết danh sách mã ngôn ngữ nội dung được hỗ trợskip: Một hoặc nhiềuhls,dashhoặctranslated_subsđể bỏ qua việc trích xuất các bảng kê khai m3u8, bảng kê khai dấu gạch ngang và phụ đề được dịch tự động tương ứngplayer_client: Khách hàng để trích xuất dữ liệu video từ đó. Các khách hàng hiện có làweb,web_safari,web_embedded,web_music,web_creator,mweb,ios,visionos,android,android_vr,tv,tv_downgradedvàtv_simply. Theo mặc định,visionos,webđược sử dụng. Nếu không có thời gian chạy/công cụ JavaScript thìwebđược bỏ qua. Nếu cookie đăng nhập được chuyển tới yt-dlp thìweb_embedded,tv_downgraded,webđược sử dụng cho các tài khoản miễn phí vàweb_creator,tv_downgraded,webđược sử dụng cho các tài khoản trả phí. cácweb_musickhách hàng được thêm vào chomusic.youtube.comURL khi cookie đăng nhập được sử dụng. cácweb_embeddedứng dụng khách được thêm vào cho các video bị giới hạn độ tuổi người xem nhưng đôi khi chỉ hoạt động thành công xung quanh giới hạn độ tuổi người xem (ví dụ: nếu video có thể nhúng được). cáctv_downgradedvàweb_embeddedkhách hàng có thể được thêm vào như một phương án dự phòng nếuandroid_vrhoặcvisionoskhông thể truy cập video. cácweb_creatorkhách hàng được thêm vào cho các video bị giới hạn độ tuổi nếu yêu cầu xác minh độ tuổi tài khoản. Một số khách hàng nhưweb_creatorvàweb_music, yêu cầu mộtpo_tokenđể có thể tải xuống các định dạng của chúng. Một số khách hàng nhưweb_creator, sẽ chỉ hoạt động với xác thực. Không phải tất cả khách hàng đều hỗ trợ xác thực qua cookie. Bạn có thể sử dụngdefaultcho các máy khách mặc định hoặc bạn có thể sử dụngallcho tất cả khách hàng (không khuyến khích). Bạn có thể đặt tiền tố cho khách hàng bằng-để loại trừ nó, ví dụ:youtube:player_client=default,-webplayer_skip: Bỏ qua một số yêu cầu mạng thường cần thiết để trích xuất mạnh mẽ. Một hoặc nhiềuconfigs(bỏ qua cấu hình máy khách),webpage(bỏ qua trang web ban đầu),js(bỏ qua trình phát js),initial_data(bỏ qua dữ liệu ban đầu/yêu cầu ep tiếp theo). Mặc dù các tùy chọn này có thể giúp giảm số lượng yêu cầu cần thiết hoặc tránh một số giới hạn về tốc độ nhưng chúng có thể gây ra các vấn đề như thiếu định dạng hoặc siêu dữ liệu. Xem #860 và #12826 để biết thêm chi tiếtwebpage_skip: Bỏ qua việc trích xuất dữ liệu trang web được nhúng. Một hoặc cả haiplayer_response,initial_data. Các tùy chọn này nhằm mục đích thử nghiệm và không bỏ qua bất kỳ yêu cầu mạng nào. Theo mặc định, cả hai đều không bị bỏ qua; tuy nhiên, nếu mộtplayer_js_versiongiá trị khác vớiactualđược sử dụng thìwebpage_skip=player_responseđược ngụ ýwebpage_client: Ứng dụng khách để sử dụng cho yêu cầu trang web video. Một trongweb(mặc định) hoặcweb_safariplayer_params: Thông số trình phát YouTube để sử dụng cho các yêu cầu của trình phát. Sẽ ghi đè bất kỳ giá trị mặc định nào do yt-dlp đặt.player_js_variant: Biến thể trình phát JavaScript được sử dụng để giải mã n/sig. Các biến thể được biết đến là:main,tcc,tce,es5,es6,es6_tcc,es6_tce,tv,tv_es6,phone,house. Mặc định làmainvà những cái khác là dành cho mục đích gỡ lỗi. Bạn có thể sử dụngactualđi theo những gì được quy định bởi trang webplayer_js_version: Phiên bản trình phát JavaScript được sử dụng để giải mã n/sig, ở định dạngsignature_timestamp@hash(ví dụ:20348@0004de42). Mặc định là sử dụng những gì được trang web quy định và có thể được chọn bằngactual. Sử dụng bất kỳ giá trị nào khác sẽ ngụ ýwebpage_skip=player_responsecomment_sort:tophoặcnew(mặc định) - chọn chế độ sắp xếp bình luận (bên YouTube)max_comments: Giới hạn số lượng bình luận được thu thập. Danh sách các số nguyên đại diện được phân tách bằng dấu phẩymax-comments,max-parents,max-replies,max-replies-per-thread,max-depth. Mặc định làall,all,all,all,all- A
max-depthgiá trị của1sẽ loại bỏ tất cả các câu trả lời, bất kểmax-replieshoặcmax-replies-per-threadgiá trị đã cho - Ví dụ:
all,all,1000,10,2sẽ nhận được tổng cộng tối đa 1000 câu trả lời, với tối đa 10 câu trả lời cho mỗi chuỗi và chỉ có 2 cấp độ chuyên sâu (tức là các nhận xét cấp cao nhất cộng với các câu trả lời ngay lập tức của họ).1000,all,100sẽ nhận được tối đa 1000 bình luận, với tổng số tối đa 100 câu trả lời
- A
formats: Thay đổi các loại định dạng cần trả về.dashy(chuyển đổi HTTP thành DASH),duplicate(nội dung giống hệt nhau nhưng URL hoặc giao thức khác nhau; bao gồmdashy),incomplete(không thể tải xuống hoàn toàn - dấu gạch ngang trực tiếp và sau trực tiếp, m3u8 sau trực tiếp và https thích ứng trực tiếp mà không có --live-from-start),missing_pot(bao gồm các định dạng yêu cầu Mã thông báo PO nhưng bị thiếu)innertube_host: Máy chủ Innertube API để sử dụng cho tất cả các yêu cầu API; ví dụ:studio.youtube.com,youtubei.googleapis.com. Lưu ý rằng cookie được xuất từ một tên miền phụ sẽ không hoạt động trên các tên miền phụ khácinnertube_key: Phím Innertube API để sử dụng cho tất cả các yêu cầu API. Theo mặc định, không có phím API nào được sử dụngraise_incomplete_data:Incomplete Data Receivedgây ra lỗi thay vì báo cáo cảnh báodata_sync_id: Ghi đè ID đồng bộ hóa dữ liệu của tài khoản được sử dụng trong các yêu cầu Innertube API. Điều này có thể cần thiết nếu bạn đang sử dụng tài khoản vớiyoutube:player_skip=webpage,configshoặcyoutubetab:skip=webpagevisitor_data: Ghi đè Dữ liệu khách truy cập được sử dụng trong các yêu cầu Innertube API. Điều này nên được sử dụng vớiplayer_skip=webpage,configsvà không có cookie. Lưu ý: điều này có thể có tác dụng phụ nếu sử dụng không đúng cách. Nếu muốn có một phiên từ trình duyệt, thay vào đó bạn nên chuyển cookie (có chứa ID khách truy cập)po_token: (Các) Mã thông báo Bằng chứng Xuất xứ (PO) để sử dụng. Danh sách Mã thông báo PO được phân tách bằng dấu phẩy ở định dạngCLIENT.CONTEXT+PO_TOKEN, ví dụ:youtube:po_token=web.gvs+XXX,web.player=XXX,web_safari.gvs+YYY. Bối cảnh có thể là bất kỳgvs(URL máy chủ video của Google),player(Yêu cầu trình phát Innertube) hoặcsubs(Phụ đề)pot_trace: Bật tính năng ghi nhật ký gỡ lỗi để tìm nạp Mã thông báo PO. Hoặctruehoặcfalse(mặc định)fetch_pot: Chính sách sử dụng để tìm nạp PO Token từ nhà cung cấp. Một trongalways(luôn thử tìm nạp Mã thông báo PO bất kể khách hàng có yêu cầu mã thông báo PO cho ngữ cảnh nhất định hay không),never(không bao giờ lấy Mã thông báo PO) hoặcauto(mặc định; chỉ tìm nạp Mã thông báo PO nếu khách hàng yêu cầu một mã cho ngữ cảnh nhất định)jsc_trace: Bật tính năng ghi nhật ký gỡ lỗi để tìm nạp Thử thách JS. Hoặctruehoặcfalse(mặc định)use_ad_playback_context: Bỏ qua quảng cáo đầu video để loại bỏ thời gian chờ bắt buộc trước khi tải xuống. KHÔNG sử dụng tùy chọn này khi chuyển cookie tài khoản trả phí sang yt-dlp vì nó sẽ làm mất các định dạng trả phí. Chỉ có tác dụng vớimwebvàweb_musickhách hàng người chơi. Hoặctruehoặcfalse(mặc định)
youtube-ejs
jitless: Chạy các công cụ JavaScript được hỗ trợ ở chế độ không có JIT. Thời gian chạy được hỗ trợ làdeno,nodevàbun. Cung cấp bảo mật tốt hơn với chi phí hiệu suất/tốc độ. Hãy lưu ý rằngnodevàbunvẫn được coi là không an toàn. Hoặctruehoặcfalse(mặc định)
youtubepot-webpo
bind_to_visitor_id: Có nên sử dụng ID khách truy cập thay vì Dữ liệu khách truy cập để lưu mã thông báo WebPO vào bộ nhớ đệm hay không. Hoặctrue(mặc định) hoặcfalse
youtubetab (danh sách phát, kênh, nguồn cấp dữ liệu YouTube, v.v.)
skip: Một hoặc nhiềuwebpage(bỏ qua tải xuống trang web ban đầu),authcheck(cho phép tải xuống danh sách phát yêu cầu xác thực khi không tải xuống trang web ban đầu. Điều này có thể gây ra hành vi không mong muốn, hãy xem #1122 để biết thêm chi tiết)approximate_date: Trích xuất gần đúngupload_datevàtimestamptrong danh sách phát phẳng. Điều này có thể khiến các bộ lọc dựa trên ngày hơi bị tắt
chung chung
fragment_query: Chuyển bất kỳ truy vấn nào trong URL tệp kê khai mpd/m3u8 tới các đoạn của chúng nếu không có giá trị nào được cung cấp hoặc áp dụng chuỗi truy vấn được cung cấp dưới dạngfragment_query=VALUE. Lưu ý rằng nếu luồng có khóa HLS AES-128 thì các tham số truy vấn cũng sẽ được chuyển đến URI khóa, trừ khikey_queryextractor-arg được chuyển hoặc trừ khi URI khóa bên ngoài được cung cấp thông quahls_keytrình trích xuất-arg. Không áp dụng cho ffmpegvariant_query: Chuyển truy vấn URL m3u8 chính sang các URL danh sách phát biến thể của nó nếu không có giá trị nào được cung cấp hoặc áp dụng chuỗi truy vấn được cung cấp dưới dạngvariant_query=VALUEkey_query: Chuyển truy vấn URL m3u8 chính tới URI khóa giải mã HLS AES-128 của nó nếu không có giá trị nào được cung cấp hoặc nếu không thì áp dụng chuỗi truy vấn được cung cấp dưới dạngkey_query=VALUE. Lưu ý rằng điều này sẽ không có hiệu lực nếu URI chính được cung cấp thông quahls_keytrình trích xuất-arg. Không áp dụng cho ffmpeghls_key: URI khóa HLS AES-128 hoặc khóa (dưới dạng hex) và tùy chọn IV (dưới dạng hex), ở dạng(URI|KEY)[,IV]; ví dụ.generic:hls_key=ABCDEF1234567980,0xFEDCBA0987654321. Việc chuyển bất kỳ giá trị nào trong số này sẽ buộc sử dụng trình tải xuống HLS gốc và ghi đè các giá trị tương ứng có trong danh sách phát m3u8is_live: Bỏ qua phát hiện HLS trực tiếp và cài đặt thủ cônglive_status- một giá trị củafalsesẽ thiết lậpnot_live, mọi giá trị khác (hoặc không có giá trị) sẽ được đặtis_liveimpersonate: (Các) mục tiêu để thử và mạo danh yêu cầu trang web ban đầu; ví dụ.generic:impersonate=safari,chrome-110. sử dụnggeneric:impersonateđể mạo danh bất kỳ mục tiêu có sẵn nào và sử dụnggeneric:impersonate=falseđể tắt tính năng mạo danh (mặc định)
vikichannel
video_types: Các loại video để tải xuống - một hoặc nhiềuepisodes,movies,clips,trailers
youtubewebarchive
check_all: Cố gắng kiểm tra nhiều hơn với chi phí là nhiều yêu cầu hơn. Một hoặc nhiềuthumbnails,captures
trò chơi giật gân
comment_sort:hot(mặc định),you(cần có cookie),top,new- chọn chế độ sắp xếp bình luận (bên phía GameJolt)
ngôi sao nóng bỏng
res: độ phân giải cần bỏ qua - một hoặc nhiềusd,hd,fhdvcodec: vcodec cần bỏ qua - một hoặc nhiềuh264,h265,dvh265dr: phạm vi động cần bỏ qua - một hoặc nhiềusdr,hdr10,dv
app_id: Giá trị củaX-IG-App-IDtiêu đề được sử dụng cho các yêu cầu API. Có thể là số ID thực tế,ioshoặcweb(mặc định)
niconicochannelplus
max_comments: Số lượng bình luận tối đa cần trích xuất - mặc định là120
tiktok
api_hostname: Tên máy chủ để sử dụng cho cuộc gọi API trên thiết bị di động, ví dụ:api22-normal-c-alisg.tiktokv.comapp_name: Tên ứng dụng mặc định để sử dụng với cuộc gọi API trên thiết bị di động, ví dụ:trillapp_version: Phiên bản ứng dụng mặc định để sử dụng với cuộc gọi API trên thiết bị di động - phải được đặt cùng vớimanifest_app_version, ví dụ:34.1.2manifest_app_version: Phiên bản ứng dụng số mặc định để sử dụng với cuộc gọi API trên thiết bị di động, ví dụ:2023401020aid: ID ứng dụng mặc định để sử dụng với cuộc gọi API trên thiết bị di động, ví dụ:1180app_info: Cho phép trích xuất API trên thiết bị di động bằng một hoặc nhiều chuỗi thông tin ứng dụng ở định dạng<iid>/[app_name]/[app_version]/[manifest_app_version]/[aid], ở đâuiidlà ID cài đặt ứng dụng duy nhất.iidlà giá trị bắt buộc duy nhất; tất cả các giá trị khác và/dấu phân cách có thể được bỏ qua, ví dụ:tiktok:app_info=1234567890123456789hoặctiktok:app_info=123,456/trill///1180,789//34.0.1/340001device_id: Cho phép trích xuất API di động bằng ID thiết bị chính hãng để sử dụng với các cuộc gọi di động API. Mặc định là chuỗi 19 chữ số ngẫu nhiên
kênh rokfin
tab: Tab nào cần tải xuống - một trongnew,top,videos,podcasts,streams,stacks
api: Chọn một tronggraphql(mặc định),legacyhoặcsyndicationdưới dạng API để trích xuất tweet. Không có hiệu lực nếu đăng nhập
stacommu, wrestleuniverse
device_id: Giá trị UUID do trang web chỉ định và dùng để thực thi giới hạn thiết bị đối với nội dung phát trực tiếp trả phí. Có thể được tìm thấy trong bộ nhớ cục bộ của trình duyệt
co giật
client_id: Giá trị ID khách hàng sẽ được gửi cùng với các yêu cầu GraphQL, ví dụ:twitch:client_id=kimne78kx3ncx6brgo4mv6wki5h1ko
nhkradirulive (NHK らじる★らじる LIVE)
area: Biến thể khu vực nào cần trích xuất. Các khu vực hợp lệ là:sapporo,sendai,tokyo,nagoya,osaka,hiroshima,matsuyama,fukuoka. Mặc định làtokyo
nflplusreplay
type: Loại phát lại trò chơi để trích xuất. Các loại hợp lệ là:full_game,full_game_spanish,condensed_gamevàall_22. Bạn có thể sử dụngallđể trích xuất tất cả các loại phát lại có sẵn, đây là mặc định
jiocinema
refresh_token: CáirefreshTokenUUID từ bộ nhớ cục bộ của trình duyệt có thể được chuyển qua để kéo dài thời gian sử dụng phiên đăng nhập của bạn khi đăng nhập bằngtokenlàm tên người dùng vàaccessTokentừ bộ nhớ cục bộ của trình duyệt dưới dạng mật khẩu
jiosaavn
bitrate: Tốc độ bit âm thanh theo yêu cầu. Một hoặc nhiều16,32,64,128,320. Mặc định là128,320
afreecatvlive
cdn: Một hoặc nhiều ID CDN để sử dụng với lệnh gọi API cho URL luồng, ví dụ:gcp_cdn,gs_cdn_pc_app,gs_cdn_mobile_web,gs_cdn_pc_web
đám mây âm thanh
formats: Các định dạng yêu cầu từ API. Các giá trị được yêu cầu phải ở định dạng{protocol}_{codec}, ví dụ:hls_opus,http_aac. các*ký tự có chức năng như một ký tự đại diện, ví dụ:*_mp3và có thể được chuyển qua chính nó để yêu cầu tất cả các định dạng. Các giao thức được biết đến bao gồmhttp,hlsvàhls-aes; codec đã biết bao gồmaac,opusvàmp3. Bản gốcdownloadcác định dạng luôn được trích xuất. Mặc định làhttp_aac,hls_aac,http_opus,hls_opus,http_mp3,hls_mp3
orfon (orf:on)
prefer_segments_playlist: Ưu tiên danh sách phát gồm các phân đoạn chương trình thay vì một video hoàn chỉnh khi có sẵn. Nếu muốn phân đoạn riêng lẻ, hãy sử dụng--concat-playlist never --extractor-args "orfon:prefer_segments_playlist"
bilibili
prefer_multi_flv: Thích trích xuất các định dạng flv hơn mp4 đối với các video cũ hơn vẫn cung cấp các định dạng cũ
dòng sonyliv
sort_order: Thứ tự sắp xếp tập để trích xuất loạt phim - một trongasc(tăng dần, cũ nhất trước) hoặcdesc(giảm dần, mới nhất xếp trước). Mặc định làasc
vệt
api_key: Phím API choX-Streaks-Api-Keytiêu đề
tver
backend: Phần phụ trợ API để sử dụng cho việc trích xuất - một trongstreaks(mặc định) hoặcbrightcove(không dùng nữa)
vimeo
client: Ứng dụng khách để trích xuất dữ liệu video từ đó. Các khách hàng hiện có làandroidvàweb. Chỉ có một khách hàng có thể được sử dụng. cácwebclient được sử dụng theo mặc định và nó chỉ hoạt động với cookie tài khoản hoặc thông tin đăng nhập. cácandroidứng dụng khách chỉ hoạt động với mã thông báo OAuth đã lưu vào bộ nhớ đệm trước đóoriginal_format_policy: Chính sách về thời điểm thử giải nén các định dạng gốc. Một trongalways,neverhoặcauto. Mặc địnhautochính sách cố gắng tránh vượt quá giới hạn tốc độ API của ứng dụng khách web bằng cách chỉ đưa ra yêu cầu bổ sung khi Vimeo công khai khả năng tải xuống của video
Zan
split_angles: Chia luồng nhiều góc thành các định dạng góc riêng biệt. Buộc mã hóa lại luồng video trong khi tải xuống và yêu cầu ffmpeg. Hoặctruehoặcfalse(mặc định)
Lưu ý: Các tùy chọn này có thể được thay đổi/xóa trong tương lai mà không cần quan tâm đến khả năng tương thích ngược
PLUGIN
Lưu ý rằng tất cả các plugin được nhập ngay cả khi không được gọi và điều đó không có kiểm tra được thực hiện trên mã plugin. Bạn phải tự chịu rủi ro khi sử dụng plugin và chỉ khi bạn tin tưởng vào mã!
Các plugin có thể là <type>s extractor hoặc postprocessor.
- Các plugin trình trích xuất không cần phải được bật từ CLI và được tự động gọi khi URL đầu vào phù hợp với nó.
- Các plugin giải nén được ưu tiên hơn các trình giải nén tích hợp.
- Các plugin của bộ xử lý hậu kỳ có thể được gọi bằng cách sử dụng
--use-postprocessor NAME.
Các plugin được tải từ các gói không gian tên yt_dlp_plugins.extractor và yt_dlp_plugins.postprocessor.
Nói cách khác, cấu trúc tệp trên đĩa trông giống như sau:
yt_dlp_plugins/
extractor/
myplugin.py
postprocessor/
myplugin.py
yt-dlp tìm kiếm những thứ này yt_dlp_plugins thư mục không gian tên ở nhiều vị trí (xem bên dưới) và tải các plugin từ tất cả của họ. Đặt biến môi trường YTDLP_NO_PLUGINS đến một cái gì đó không trống để vô hiệu hóa hoàn toàn việc tải plugin.
Xem wiki cho một số plugin đã biết
Cài đặt plugin
Plugin có thể được cài đặt bằng nhiều phương pháp và vị trí khác nhau.
Thư mục cấu hình: Các gói plugin (chứa một
yt_dlp_pluginsthư mục không gian tên) có thể được thả vào tiêu chuẩn sau vị trí cấu hình:- Plugin người dùng
${XDG_CONFIG_HOME}/yt-dlp/plugins/<package name>/yt_dlp_plugins/(được khuyến nghị trên Linux/macOS)${XDG_CONFIG_HOME}/yt-dlp-plugins/<package name>/yt_dlp_plugins/${APPDATA}/yt-dlp/plugins/<package name>/yt_dlp_plugins/(được khuyến nghị trên Windows)${APPDATA}/yt-dlp-plugins/<package name>/yt_dlp_plugins/~/.yt-dlp/plugins/<package name>/yt_dlp_plugins/~/yt-dlp-plugins/<package name>/yt_dlp_plugins/
- Plugin hệ thống
/etc/yt-dlp/plugins/<package name>/yt_dlp_plugins//etc/yt-dlp-plugins/<package name>/yt_dlp_plugins/
- Plugin người dùng
Vị trí có thể thực thi: Các gói plugin có thể được cài đặt tương tự trong một
yt-dlp-pluginsthư mục dưới vị trí thực thi (được khuyến nghị cho cài đặt di động):- Nhị phân: ở đâu
<root-dir>/yt-dlp.exe,<root-dir>/yt-dlp-plugins/<package name>/yt_dlp_plugins/ - Nguồn: ở đâu
<root-dir>/yt_dlp/__main__.py,<root-dir>/yt-dlp-plugins/<package name>/yt_dlp_plugins/
- Nhị phân: ở đâu
pip và các vị trí khác trong
PYTHONPATH- Các gói plugin có thể được cài đặt và quản lý bằng cách sử dụng
pip. Xem plugin yt-dlp-mẫu cho một ví dụ.- Lưu ý: các tệp plugin giữa các gói plugin được cài đặt bằng pip phải có tên tệp duy nhất.
- Bất kỳ đường dẫn nào trong
PYTHONPATHđược tìm kiếm trongyt_dlp_pluginsthư mục không gian tên.- Lưu ý: Điều này không áp dụng cho các bản dựng Pyinstaller.
- Các gói plugin có thể được cài đặt và quản lý bằng cách sử dụng
.zip, .egg và .whl tài liệu lưu trữ có chứa một yt_dlp_plugins thư mục không gian tên trong thư mục gốc của chúng cũng được hỗ trợ dưới dạng gói plugin.
- ví dụ.
${XDG_CONFIG_HOME}/yt-dlp/plugins/mypluginpkg.zipở đâumypluginpkg.zipchứayt_dlp_plugins/<type>/myplugin.py
Chạy yt-dlp với --verbose để kiểm tra xem plugin đã được tải chưa.
Phát triển plugin
Xem plugin yt-dlp-mẫu repo cho gói plugin mẫu và Phát triển plugin phần hướng dẫn phát triển plugin trên wiki.
Tất cả các lớp công khai có tên kết thúc bằng IE/PP được nhập từ mỗi tệp cho trình trích xuất và bộ xử lý hậu kỳ tương ứng. Điều này tôn trọng tiền tố gạch dưới (ví dụ: _MyBasePluginIE là riêng tư) và __all__. Tương tự, các mô-đun có thể được loại trừ bằng cách đặt trước tên mô-đun một dấu gạch dưới (ví dụ: _myplugin.py).
Để thay thế một trình trích xuất hiện có bằng một lớp con của một trình trích xuất, hãy đặt plugin_name đối số từ khóa lớp (ví dụ: class MyPluginIE(ABuiltInIE, plugin_name='myplugin') sẽ thay thế ABuiltInIE với MyPluginIE). Vì trình trích xuất thay thế trình trích xuất lớp cha nên bạn nên loại trừ trình trích xuất lớp con khỏi được nhập riêng bằng cách đặt nó ở chế độ riêng tư bằng một trong các phương pháp được mô tả ở trên.
Nếu bạn là tác giả plugin, hãy thêm plugin yt-dlp làm chủ đề cho kho lưu trữ của bạn để có thể khám phá.
Xem Hướng dẫn dành cho nhà phát triển về cách viết và kiểm tra một trình giải nén.
NHẮP YT-DLP
yt-dlp nỗ lực hết sức để trở thành một chương trình dòng lệnh tốt và do đó có thể gọi được từ bất kỳ ngôn ngữ lập trình nào.
Chương trình của bạn nên tránh phân tích cú pháp thiết bị xuất chuẩn thông thường vì chúng có thể thay đổi trong các phiên bản sau. Thay vào đó, họ nên sử dụng các tùy chọn như -J, --print, --progress-template, --exec vv để tạo đầu ra của bảng điều khiển mà bạn có thể tái tạo và phân tích cú pháp một cách đáng tin cậy.
Từ chương trình Python, bạn có thể nhúng yt-dlp theo cách mạnh mẽ hơn, như sau:
from yt_dlp import YoutubeDL
URLS = ['https://www.youtube.com/watch?v=YE7VzlLtp-4']
with YoutubeDL() as ydl:
ydl.download(URLS)
Rất có thể, bạn sẽ muốn sử dụng nhiều tùy chọn khác nhau. Để biết danh sách các tùy chọn có sẵn, hãy xem yt_dlp/YoutubeDL.py hoặc help(yt_dlp.YoutubeDL) trong vỏ Python. Nếu bạn đã quen thuộc với CLI, bạn có thể sử dụng devscripts/cli_to_api.py để dịch bất kỳ chuyển đổi CLI nào sang YoutubeDL thông số.
Mẹo: Nếu bạn đang chuyển mã của mình từ youtube-dl sang yt-dlp, một điểm quan trọng cần lưu ý là chúng tôi không đảm bảo giá trị trả về của YoutubeDL.extract_info có thể tuần tự hóa JSON hoặc thậm chí là một từ điển. Nó sẽ giống như từ điển, nhưng nếu bạn muốn đảm bảo nó là một từ điển có thể tuần tự hóa, hãy chuyển nó qua YoutubeDL.sanitize_info như thể hiện trong ví dụ dưới đây
Nhúng ví dụ
Trích xuất thông tin
import json
import yt_dlp
URL = 'https://www.youtube.com/watch?v=YE7VzlLtp-4'
# ℹ️ See help(yt_dlp.YoutubeDL) for a list of available options and public functions
ydl_opts = {}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(URL, download=False)
# ℹ️ ydl.sanitize_info makes the info json-serializable
print(json.dumps(ydl.sanitize_info(info)))
Tải xuống bằng thông tin-JSON
import yt_dlp
INFO_FILE = 'path/to/video.info.json'
with yt_dlp.YoutubeDL() as ydl:
error_code = ydl.download_with_info_file(INFO_FILE)
print('Some videos failed to download' if error_code
else 'All videos successfully downloaded')
Trích xuất âm thanh
import yt_dlp
URLS = ['https://www.youtube.com/watch?v=YE7VzlLtp-4']
ydl_opts = {
'format': 'm4a/bestaudio/best',
# ℹ️ See help(yt_dlp.postprocessor) for a list of available Postprocessors and their arguments
'postprocessors': [{ # Extract audio using ffmpeg
'key': 'FFmpegExtractAudio',
'preferredcodec': 'm4a',
}]
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
error_code = ydl.download(URLS)
Lọc video
import yt_dlp
URLS = ['https://www.youtube.com/watch?v=YE7VzlLtp-4']
def longer_than_a_minute(info, *, incomplete):
"""Download only videos longer than a minute (or with unknown duration)"""
duration = info.get('duration')
if duration and duration < 60:
return 'The video is too short'
ydl_opts = {
'match_filter': longer_than_a_minute,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
error_code = ydl.download(URLS)
Thêm logger và móc tiến trình
import yt_dlp
URLS = ['https://www.youtube.com/watch?v=YE7VzlLtp-4']
class MyLogger:
def debug(self, msg):
# For compatibility with youtube-dl, both debug and info are passed into debug
# You can distinguish them by the prefix '[debug] '
if msg.startswith('[debug] '):
pass
else:
self.info(msg)
def info(self, msg):
pass
def warning(self, msg):
pass
def error(self, msg):
print(msg)
# ℹ️ See "progress_hooks" in help(yt_dlp.YoutubeDL)
def my_hook(d):
if d['status'] == 'finished':
print('Done downloading, now post-processing ...')
ydl_opts = {
'logger': MyLogger(),
'progress_hooks': [my_hook],
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(URLS)
Thêm một PostProcessor tùy chỉnh
import yt_dlp
URLS = ['https://www.youtube.com/watch?v=YE7VzlLtp-4']
# ℹ️ See help(yt_dlp.postprocessor.PostProcessor)
class MyCustomPP(yt_dlp.postprocessor.PostProcessor):
def run(self, info):
self.to_screen('Doing stuff')
return [], info
with yt_dlp.YoutubeDL() as ydl:
# ℹ️ "when" can take any value in yt_dlp.utils.POSTPROCESS_WHEN
ydl.add_post_processor(MyCustomPP(), when='pre_process')
ydl.download(URLS)
Sử dụng bộ chọn định dạng tùy chỉnh
import yt_dlp
URLS = ['https://www.youtube.com/watch?v=YE7VzlLtp-4']
def format_selector(ctx):
""" Select the best video and the best audio that won't result in an mkv.
NOTE: This is just an example and does not handle all cases """
# formats are already sorted worst to best
formats = ctx.get('formats')[::-1]
# acodec='none' means there is no audio
best_video = next(f for f in formats
if f['vcodec'] != 'none' and f['acodec'] == 'none')
# find compatible audio extension
audio_ext = {'mp4': 'm4a', 'webm': 'webm'}[best_video['ext']]
# vcodec='none' means there is no video
best_audio = next(f for f in formats if (
f['acodec'] != 'none' and f['vcodec'] == 'none' and f['ext'] == audio_ext))
# These are the minimum required fields for a merged format
yield {
'format_id': f'{best_video["format_id"]}+{best_audio["format_id"]}',
'ext': best_video['ext'],
'requested_formats': [best_video, best_audio],
# Must be + separated list of protocols
'protocol': f'{best_video["protocol"]}+{best_audio["protocol"]}'
}
ydl_opts = {
'format': format_selector,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(URLS)
NHỮNG THAY ĐỔI TỪ YOUTUBE-DL
Tính năng mới
Rẽ nhánh từ yt-dlc@f9401f2 và sáp nhập với youtube-dl@a08f2b7 (ngoại lệ)
Tích hợp khối nhà tài trợ: Bạn có thể đánh dấu/xóa phần nhà tài trợ trong video YouTube bằng cách sử dụng Khối tài trợ API
Sắp xếp định dạng: Các tùy chọn sắp xếp định dạng mặc định đã được thay đổi để độ phân giải cao hơn và codec tốt hơn giờ đây sẽ được ưu tiên thay vì chỉ sử dụng tốc độ bit lớn hơn. Hơn nữa, bây giờ bạn có thể chỉ định thứ tự sắp xếp bằng cách sử dụng
-S. Điều này cho phép lựa chọn định dạng dễ dàng hơn nhiều so với những gì có thể bằng cách sử dụng--format(ví dụ)Hợp nhất với animelover1984/youtube-dl: Bạn nhận được hầu hết các tính năng và cải tiến từ animelover1984/youtube-dl bao gồm cả
--write-comments,BiliBiliSearch,BilibiliChannel, Nhúng hình thu nhỏ vào mp4/ogg/opus, thông tin danh sách phát, v.v. Xem #31 để biết chi tiết.Cải tiến của YouTube:
- Hỗ trợ Clip, Truyện (
ytstories:<channel UCID>), Tìm kiếm (bao gồm các bộ lọc)*, Tìm kiếm âm nhạc trên YouTube, tìm kiếm theo kênh cụ thể, Tiền tố tìm kiếm (ytsearch:)*, Hỗn hợp và Nguồn cấp dữ liệu (:ytfav,:ytwatchlater,:ytsubs,:ythistory,:ytrec,:ytnotif) - Sửa chữa cho điều chỉnh dựa trên n-sig *
- Tải xuống các buổi phát trực tiếp ngay từ đầu bằng cách sử dụng
--live-from-start(thực nghiệm) - URL kênh tải xuống tất cả video tải lên của kênh, bao gồm cả video ngắn và video trực tiếp
- Hỗ trợ Clip, Truyện (
Cookie từ trình duyệt: Cookie có thể được trích xuất tự động từ tất cả các trình duyệt web chính bằng cách sử dụng
--cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]Phạm vi thời gian tải xuống: Video có thể được tải xuống một phần dựa trên dấu thời gian hoặc chương bằng cách sử dụng
--download-sectionsChia video theo chương: Video có thể được chia thành nhiều tệp dựa trên các chương bằng cách sử dụng
--split-chaptersTải xuống đoạn đa luồng: Tải xuống song song nhiều đoạn video m3u8/mpd. sử dụng
--concurrent-fragments(-N) tùy chọn để đặt số lượng chủ đề được sử dụngMáy vắt mới và cố định: Nhiều trình trích xuất mới đã được thêm vào và rất nhiều trình trích xuất hiện có đã được sửa. Xem nhật ký thay đổi hoặc danh sách các trang web được hỗ trợ
MSO mới: Philo, Spectrum, SlingTV, Cablevision, RCN, v.v.
Trích xuất phụ đề từ bảng kê khai: Phụ đề có thể được trích xuất từ các tệp kê khai phương tiện truyền phát trực tuyến. Xem cam kết/be6202f để biết chi tiết
Nhiều đường dẫn và mẫu đầu ra: Bạn có thể đưa ra những cách khác nhau mẫu đầu ra và đường dẫn tải xuống cho các loại tệp khác nhau. Bạn cũng có thể đặt đường dẫn tạm thời nơi các tệp trung gian được tải xuống bằng cách sử dụng
--paths(-P)Cấu hình di động: Các tập tin cấu hình được tải tự động từ thư mục gốc và thư mục gốc. Xem CẤU HÌNH để biết chi tiết
Cải tiến mẫu đầu ra: Các mẫu đầu ra hiện có thể có định dạng ngày giờ, độ lệch số, truyền tải đối tượng, v.v. Xem mẫu đầu ra để biết chi tiết. Thậm chí những hoạt động nâng cao hơn cũng có thể được thực hiện với sự trợ giúp của
--parse-metadatavà--replace-in-metadataCác lựa chọn mới khác: Nhiều tùy chọn mới đã được thêm vào như
--alias,--print,--concat-playlist,--wait-for-video,--retry-sleep,--sleep-requests,--convert-thumbnails,--force-download-archive,--force-overwrites,--break-match-filtersv.v.Cải tiến: Regex và các toán tử khác trong
--format/--match-filters, nhiều--postprocessor-argsvà--downloader-args, kiểm tra kho lưu trữ nhanh hơn, hơn thế nữa tùy chọn lựa chọn định dạng, hợp nhất nhiều video/âm thanh, nhiều--config-locations,--execở các giai đoạn khác nhau, v.v.Plugin: Trình trích xuất và PostProcessors có thể được tải từ một tệp bên ngoài. Xem plugin để biết chi tiết
Tự cập nhật: Các bản phát hành có thể được cập nhật bằng cách sử dụng
yt-dlp -Uvà hạ cấp bằng cách sử dụng--update-tonếu được yêu cầuBản dựng tự động: Bản dựng hàng đêm/chính có thể được sử dụng với
--update-to nightlyvà--update-to master
Xem nhật ký thay đổi hoặc cam kết để biết danh sách đầy đủ các thay đổi
Các tính năng được đánh dấu bằng * đã được chuyển trở lại youtube-dl
Sự khác biệt trong hành vi mặc định
Một số tùy chọn mặc định của yt-dlp khác với youtube-dl và youtube-dlc:
- yt-dlp chỉ hỗ trợ Python 3.10+và sẽ xóa hỗ trợ cho nhiều phiên bản hơn khi chúng trở thành EOL; trong khi youtube-dl vẫn hỗ trợ Python 2.6+ và 3.2+
- Các tùy chọn
--auto-number(-A),--title(-t) và--literal(-l), không còn hoạt động nữa. Xem tùy chọn đã xóa để biết chi tiết avconvkhông được hỗ trợ thay thế choffmpeg- yt-dlp lưu trữ các tệp cấu hình ở các vị trí hơi khác với youtube-dl. Xem CẤU HÌNH để có danh sách các vị trí chính xác
- Mặc định mẫu đầu ra là
%(title)s [%(id)s].%(ext)s. Không có lý do thực sự cho sự thay đổi này. Điều này đã được thay đổi trước khi yt-dlp được công khai và hiện tại không có kế hoạch thay đổi lại thành%(title)s-%(id)s.%(ext)s. Thay vào đó, bạn có thể sử dụng--compat-options filename - Mặc định sắp xếp định dạng khác với youtube-dl và thích độ phân giải cao hơn và codec tốt hơn thay vì tốc độ bit cao hơn. Bạn có thể sử dụng
--format-sorttùy chọn để thay đổi điều này thành bất kỳ thứ tự nào bạn thích hoặc sử dụng--compat-options format-sortđể sử dụng thứ tự sắp xếp của youtube-dl. Các phiên bản cũ hơn của yt-dlp ưa thích VP9 hơn do khả năng tương thích rộng hơn; bạn có thể sử dụng--compat-options prefer-vp9-sortđể trở lại tùy chọn sắp xếp định dạng đó. Hai tùy chọn tương thích này không thể được sử dụng cùng nhau - Bộ chọn định dạng mặc định là
bv*+ba/b. Điều này có nghĩa là nếu tìm thấy định dạng video + âm thanh kết hợp tốt hơn định dạng chỉ có video tốt nhất thì định dạng trước sẽ được ưu tiên. sử dụng-f bv+ba/bhoặc--compat-options format-specđể hoàn nguyên điều này - Không giống như youtube-dlc, yt-dlp không cho phép hợp nhất nhiều luồng âm thanh/video vào một tệp theo mặc định (vì điều này xung đột với việc sử dụng
-f bv*+ba). Nếu cần, tính năng này phải được kích hoạt bằng cách sử dụng--audio-multistreamsvà--video-multistreams. Bạn cũng có thể sử dụng--compat-options multistreamsđể kích hoạt cả hai --no-abort-on-errorđược bật theo mặc định. sử dụng--abort-on-errorhoặc--compat-options abort-on-errorthay vào đó hãy hủy bỏ các lỗi- Khi ghi các tệp siêu dữ liệu như hình thu nhỏ, mô tả hoặc infojson, thông tin tương tự (nếu có) cũng được ghi cho danh sách phát. sử dụng
--no-write-playlist-metafileshoặc--compat-options no-playlist-metafileskhông ghi những tập tin này --add-metadatađính kèminfojsonđểmkvcác tệp ngoài việc ghi siêu dữ liệu khi được sử dụng với--write-info-json. sử dụng--no-embed-info-jsonhoặc--compat-options no-attach-info-jsonđể hoàn nguyên điều này- Một số siêu dữ liệu được nhúng vào các trường khác nhau khi sử dụng
--add-metadataso với youtube-dl. Đáng chú ý nhất,commenttrường chứawebpage_urlvàsynopsischứadescription. bạn có thể sử dụng--parse-metadatađể sửa đổi điều này theo ý thích của bạn hoặc sử dụng--compat-options embed-metadatađể hoàn nguyên điều này playlist_indexhoạt động khác khi được sử dụng với các tùy chọn như--playlist-reversevà--playlist-items. Xem #302 để biết chi tiết. Bạn có thể sử dụng--compat-options playlist-indexnếu bạn muốn giữ hành vi trước đó- Đầu ra của
-Fđược liệt kê ở một định dạng mới. sử dụng--compat-options list-formatsđể hoàn nguyên điều này - Cuộc trò chuyện trực tiếp (nếu có) được coi là phụ đề. sử dụng
--sub-langs all,-live_chatđể tải xuống tất cả phụ đề ngoại trừ trò chuyện trực tiếp. Bạn cũng có thể sử dụng--compat-options no-live-chatđể ngăn chặn việc tải xuống bất kỳ cuộc trò chuyện/danmaku trực tiếp nào - URL kênh YouTube tải xuống tất cả các video tải lên của kênh. Để chỉ tải xuống các video trong một tab cụ thể, hãy chuyển URL của tab đó. Nếu kênh không hiển thị tab được yêu cầu thì sẽ xuất hiện lỗi. Ngoài ra,
/liveURL sẽ báo lỗi nếu không có video trực tiếp thay vì âm thầm tải xuống toàn bộ kênh. Bạn có thể sử dụng--compat-options no-youtube-channel-redirectđể hoàn nguyên tất cả các chuyển hướng này - Các video không khả dụng cũng được liệt kê cho danh sách phát YouTube. sử dụng
--compat-options no-youtube-unavailable-videosđể loại bỏ cái này - Ngày tải lên được trích xuất từ YouTube là theo giờ UTC.
- Nếu
ffmpegđược sử dụng làm trình tải xuống, việc tải xuống và hợp nhất các định dạng sẽ diễn ra trong một bước duy nhất khi có thể. Sử dụng--compat-options no-direct-mergeđể hoàn nguyên điều này - Nhúng hình thu nhỏ vào
mp4được thực hiện bằng chất gây đột biến nếu có thể. sử dụng--compat-options embed-thumbnail-atomicparsleyđể buộc sử dụng AtomicParsley thay thế - Một số siêu dữ liệu nội bộ như tên tệp bị xóa theo mặc định khỏi infojson. sử dụng
--no-clean-infojsonhoặc--compat-options no-clean-infojsonđể hoàn nguyên điều này - Khi nào
--embed-subsvà--write-subsđược sử dụng cùng nhau, phụ đề được ghi vào đĩa và cũng được nhúng vào tệp phương tiện. Bạn có thể sử dụng chỉ--embed-subsđể nhúng phần phụ và tự động xóa tệp riêng biệt. Xem #630 (bình luận) để biết thêm thông tin.--compat-options no-keep-subscó thể được sử dụng để hoàn nguyên điều này certifisẽ được sử dụng cho chứng chỉ gốc SSL, nếu được cài đặt. Nếu bạn muốn sử dụng chứng chỉ hệ thống (ví dụ: tự ký), hãy sử dụng--compat-options no-certifi- Việc loại bỏ các ký tự không hợp lệ trong tên tệp của yt-dlp khác/thông minh hơn so với youtube-dl. Bạn có thể sử dụng
--compat-options filename-sanitizationđể trở lại hành vi của youtube-dl - (Hiện chưa được triển khai)
yt-dlp cố gắng phân tích cú pháp đầu ra của trình tải xuống bên ngoài thành đầu ra tiến trình tiêu chuẩn nếu có thể. Bạn có thể sử dụng--compat-options no-external-downloader-progressđể có được đầu ra của trình tải xuống như hiện trạng - Áp dụng phiên bản yt-dlp từ 2021.09.01 đến 2022.11.11 (bao gồm)
--match-filtersvào danh sách phát lồng nhau. Đây là tác dụng phụ ngoài ý muốn của 8f18ac và được cố định trong d7b460. sử dụng--compat-options playlist-match-filterđể hoàn nguyên điều này - ước tính các phiên bản yt-dlp từ 2021.11.10 đến 2023.06.21 (bao gồm)
filesize_approxgiá trị cho các định dạng phân mảnh/tệp kê khai. Điều này đã được thêm vào để thuận tiện trong f2fe69, nhưng đã được hoàn nguyên trong 0dff8e do có khả năng cực kỳ thiếu chính xác của các giá trị ước tính. sử dụng--compat-options manifest-filesize-approxđể tiếp tục trích xuất các giá trị ước tính - yt-dlp sử dụng chương trình phụ trợ máy khách HTTP hiện đại như
requests. sử dụng--compat-options prefer-legacy-http-handlerthích trình xử lý HTTP kế thừa (urllib) được sử dụng cho các yêu cầu HTTP tiêu chuẩn. - Các mô-đun phụ
swfinterp,casefoldđược gỡ bỏ. - Vượt qua
--simulate(hoặc gọiextract_infovớidownload=False) không còn thay đổi lựa chọn định dạng mặc định. Xem #9843 để biết chi tiết. - yt-dlp không còn áp dụng thời gian sửa đổi của máy chủ cho các tệp đã tải xuống theo mặc định. sử dụng
--mtimehoặc--compat-options mtime-by-defaultđể hoàn nguyên điều này.
Để thuận tiện, có một số bí danh tùy chọn tương thích có sẵn để sử dụng:
--compat-options all: Sử dụng tất cả các tùy chọn tương thích (KHÔNG sử dụng cái này!)--compat-options youtube-dl: Giống như--compat-options all,-multistreams,-playlist-match-filter,-manifest-filesize-approx,-allow-unsafe-ext,-prefer-vp9-sort,-allow-unsafe-exec-expansion--compat-options youtube-dlc: Giống như--compat-options all,-no-live-chat,-no-youtube-channel-redirect,-playlist-match-filter,-manifest-filesize-approx,-allow-unsafe-ext,-prefer-vp9-sort,-allow-unsafe-exec-expansion--compat-options 2021: Giống như--compat-options 2022,no-certifi,filename-sanitization--compat-options 2022: Giống như--compat-options 2023,playlist-match-filter,no-external-downloader-progress,prefer-legacy-http-handler,manifest-filesize-approx--compat-options 2023: Giống như--compat-options 2024,prefer-vp9-sort--compat-options 2024: Giống như--compat-options 2025,mtime-by-default--compat-options 2025: Hiện tại không làm gì cả. Sử dụng điều này để kích hoạt tất cả các tùy chọn tương thích trong tương lai
Việc sử dụng một trong các bí danh tùy chọn tương thích hàng năm sẽ ghim hành vi mặc định của yt-dlp về trạng thái ban đầu kết thúc của năm dương lịch đó.
Các tùy chọn tương thích sau đây khôi phục hành vi dễ bị tổn thương từ trước các bản vá bảo mật:
--compat-options allow-unsafe-ext: Cho phép tải xuống các tệp có bất kỳ tiện ích mở rộng nào (kể cả những tiện ích mở rộng không an toàn) (GHSA-79w7-vh3h-8g4j):warning: Chỉ sử dụng nếu tải xuống tệp hợp lệ bị từ chối vì phần mở rộng của nó được phát hiện là không phổ biến
Tùy chọn này có thể cho phép thực thi mã từ xa! Hãy xem xét mở một vấn đề thay vào đó!
--compat-options allow-unsafe-exec-expansion: Cái--exectùy chọn cho phép sử dụng cú pháp mẫu đầu ra trong các lệnh của nó; tuy nhiên, vì lý do bảo mật, các chuyển đổi có thể được sử dụng bị hạn chế ởi/d(số thập phân có dấu),f(số thập phân dấu phẩy động) vàq(trích dẫn shell). Các phiên bản yt-dlp từ 2021.04.11 đến 2026.03.17 (bao gồm) không áp dụng hạn chế này. Tùy chọn này hoàn nguyên hạn chế này:warning: Tùy chọn này có thể cho phép thực thi mã từ xa! Cân nhắc sử dụng
%()qchuyển đổi trong mẫu lệnh thực thi của bạn cho bất kỳ giá trị chuỗi nào.
Tùy chọn không dùng nữa
Đây là tất cả các tùy chọn không được dùng nữa và giải pháp thay thế hiện tại để đạt được hiệu quả tương tự
Tùy chọn gần như dư thừa
Mặc dù các tùy chọn này gần giống như các tùy chọn mới nhưng có một số khác biệt khiến chúng trở nên dư thừa.
-j, --dump-json --print "%()j"
-F, --list-formats --print formats_table
--list-thumbnails --print thumbnails_table --print playlist:thumbnails_table
--list-subs --print automatic_captions_table --print subtitles_table
Tùy chọn dự phòng
Mặc dù các tùy chọn này là dư thừa nhưng chúng vẫn được mong đợi sẽ được sử dụng do tính dễ sử dụng của chúng.
--get-description --print description
--get-duration --print duration_string
--get-filename --print filename
--get-format --print format
--get-id --print id
--get-thumbnail --print thumbnail
-e, --get-title --print title
-g, --get-url --print urls
--match-title REGEX --match-filters "title ~= (?i)REGEX"
--reject-title REGEX --match-filters "title !~= (?i)REGEX"
--min-views COUNT --match-filters "view_count >=? COUNT"
--max-views COUNT --match-filters "view_count <=? COUNT"
--break-on-reject Use --break-match-filters
--user-agent UA --add-headers "User-Agent:UA"
--referer URL --add-headers "Referer:URL"
--playlist-start NUMBER -I NUMBER:
--playlist-end NUMBER -I :NUMBER
--playlist-reverse -I ::-1
--no-playlist-reverse Default
--no-colors --color no_color
Không được đề xuất
Mặc dù các tùy chọn này vẫn hoạt động nhưng việc sử dụng chúng không được khuyến khích vì có những lựa chọn thay thế khác để đạt được điều tương tự.
--force-generic-extractor --ies generic,default
--exec-before-download CMD --exec "before_dl:CMD"
--no-exec-before-download --no-exec
--all-formats -f all
--all-subs --sub-langs all --write-subs
--print-json -j --no-simulate
--autonumber-size NUMBER Use string formatting, e.g. %(autonumber)03d
--autonumber-start NUMBER Use internal field formatting like %(autonumber+NUMBER)s
--id -o "%(id)s.%(ext)s"
--metadata-from-title FORMAT --parse-metadata "%(title)s:FORMAT"
--hls-prefer-native --downloader "m3u8:native"
--hls-prefer-ffmpeg --downloader "m3u8:ffmpeg"
--list-formats-old --compat-options list-formats (Alias: --no-list-formats-as-table)
--list-formats-as-table --compat-options -list-formats [Default]
--geo-bypass --xff "default"
--no-geo-bypass --xff "never"
--geo-bypass-country CODE --xff CODE
--geo-bypass-ip-block IP_BLOCK --xff IP_BLOCK
Tùy chọn nhà phát triển
Các tùy chọn này không nhằm mục đích sử dụng bởi người dùng cuối
--test Download only part of video for testing extractors
--load-pages Load pages dumped by --write-pages
--allow-unplayable-formats List unplayable formats also
--no-allow-unplayable-formats Default
Bí danh cũ
Đây là những bí danh không còn được ghi lại vì nhiều lý do
--clean-infojson --clean-info-json
--force-write-download-archive --force-write-archive
--no-clean-infojson --no-clean-info-json
--no-split-tracks --no-split-chapters
--no-write-srt --no-write-subs
--prefer-unsecure --prefer-insecure
--rate-limit RATE --limit-rate RATE
--split-tracks --split-chapters
--srt-lang LANGS --sub-langs LANGS
--trim-file-names LENGTH --trim-filenames LENGTH
--write-srt --write-subs
--yes-overwrites --force-overwrites
Tùy chọn tài trợ
Hỗ trợ cho SponSkrub đã bị loại bỏ để ủng hộ --sponsorblock tùy chọn
--sponskrub --sponsorblock-mark all
--no-sponskrub --no-sponsorblock
--sponskrub-cut --sponsorblock-remove all
--no-sponskrub-cut --sponsorblock-remove -all
--sponskrub-force Not applicable
--no-sponskrub-force Not applicable
--sponskrub-location Not applicable
--sponskrub-args Not applicable
Không còn được hỗ trợ
Các tùy chọn này có thể không còn hoạt động như dự kiến
--prefer-avconv avconv is not officially supported by yt-dlp (Alias: --no-prefer-ffmpeg)
--prefer-ffmpeg Default (Alias: --no-prefer-avconv)
-C, --call-home Not implemented
--no-call-home Default
--include-ads No longer supported
--no-include-ads Default
--write-annotations No supported site has annotations now
--no-write-annotations Default
--avconv-location Removed alias for --ffmpeg-location
--cn-verification-proxy URL Removed alias for --geo-verification-proxy URL
--dump-headers Removed alias for --print-traffic
--dump-intermediate-pages Removed alias for --dump-pages
--youtube-skip-dash-manifest Removed alias for --extractor-args "youtube:skip=dash" (Alias: --no-youtube-include-dash-manifest)
--youtube-skip-hls-manifest Removed alias for --extractor-args "youtube:skip=hls" (Alias: --no-youtube-include-hls-manifest)
--youtube-include-dash-manifest Default (Alias: --no-youtube-skip-dash-manifest)
--youtube-include-hls-manifest Default (Alias: --no-youtube-skip-hls-manifest)
--youtube-print-sig-code Removed testing functionality
--dump-user-agent No longer supported
--xattr-set-filesize No longer supported
--compat-options seperate-video-versions No longer needed
--compat-options no-youtube-prefer-utc-upload-date No longer supported
Đã xóa
Các tùy chọn này không được dùng nữa kể từ năm 2014 và hiện đã bị xóa hoàn toàn
-A, --auto-number -o "%(autonumber)s-%(id)s.%(ext)s"
-t, -l, --title, --literal -o "%(title)s-%(id)s.%(ext)s"
ĐÓNG GÓP
Xem ĐÓNG GÓP.md để được hướng dẫn về Mở một vấn đề và Đóng góp mã cho dự án
WIKI
Xem Wiki để biết thêm thông tin
Dự án cùng danh mục
Lộ trình tương tác, hướng dẫn và nội dung giáo dục khác để giúp các nhà phát triển phát triển trong sự nghiệp của họ.
Sử dụng các mô hình lớn AI và quy trình làm việc tự động để tạo video ngắn có độ phân giải cao dựa trên chủ đề hoặc từ khóa chỉ bằng một cú nhấp chuột. Tạo video ngắn HD từ một chủ đề hoặc từ khóa bằng quy trình làm việc AI tự động.
Giải pháp quản lý ảnh và video tự lưu trữ hiệu suất cao.
Hướng dẫn lập trình viên cách nấu ăn tại nhà.
Tự tin cung cấp ứng dụng web 🚀
hoán đổi khuôn mặt theo thời gian thực và video deepfake chỉ bằng một cú nhấp chuột chỉ bằng một hình ảnh