mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-15 13:43:04 +00:00
Compare commits
11 Commits
230d5c8239
...
1ac4fd80c8
Author | SHA1 | Date | |
---|---|---|---|
|
1ac4fd80c8 | ||
|
885fe351fb | ||
|
f92347c312 | ||
|
a86e01e743 | ||
|
1ed70fd0b7 | ||
|
def4973ae7 | ||
|
0af80bcf70 | ||
|
eff4275925 | ||
|
998a3cae0c | ||
|
471d0367c7 | ||
|
3975b4d2e8 |
6
.github/ISSUE_TEMPLATE/1_broken_site.yml
vendored
6
.github/ISSUE_TEMPLATE/1_broken_site.yml
vendored
@ -11,7 +11,7 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: I'm reporting a broken site
|
- label: I'm reporting a broken site
|
||||||
required: true
|
required: true
|
||||||
- label: I've verified that I'm running yt-dlp version **2022.05.18** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
- label: I've verified that I'm running yt-dlp version **2022.06.22.1** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
||||||
required: true
|
required: true
|
||||||
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
||||||
required: true
|
required: true
|
||||||
@ -51,12 +51,12 @@ body:
|
|||||||
[debug] Portable config file: yt-dlp.conf
|
[debug] Portable config file: yt-dlp.conf
|
||||||
[debug] Portable config: ['-i']
|
[debug] Portable config: ['-i']
|
||||||
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
||||||
[debug] yt-dlp version 2022.05.18 (exe)
|
[debug] yt-dlp version 2022.06.22.1 (exe)
|
||||||
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
||||||
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
||||||
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
yt-dlp is up to date (2022.05.18)
|
yt-dlp is up to date (2022.06.22.1)
|
||||||
<more lines>
|
<more lines>
|
||||||
render: shell
|
render: shell
|
||||||
validations:
|
validations:
|
||||||
|
@ -11,7 +11,7 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: I'm reporting a new site support request
|
- label: I'm reporting a new site support request
|
||||||
required: true
|
required: true
|
||||||
- label: I've verified that I'm running yt-dlp version **2022.05.18** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
- label: I've verified that I'm running yt-dlp version **2022.06.22.1** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
||||||
required: true
|
required: true
|
||||||
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
||||||
required: true
|
required: true
|
||||||
@ -62,12 +62,12 @@ body:
|
|||||||
[debug] Portable config file: yt-dlp.conf
|
[debug] Portable config file: yt-dlp.conf
|
||||||
[debug] Portable config: ['-i']
|
[debug] Portable config: ['-i']
|
||||||
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
||||||
[debug] yt-dlp version 2022.05.18 (exe)
|
[debug] yt-dlp version 2022.06.22.1 (exe)
|
||||||
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
||||||
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
||||||
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
yt-dlp is up to date (2022.05.18)
|
yt-dlp is up to date (2022.06.22.1)
|
||||||
<more lines>
|
<more lines>
|
||||||
render: shell
|
render: shell
|
||||||
validations:
|
validations:
|
||||||
|
@ -11,7 +11,7 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: I'm requesting a site-specific feature
|
- label: I'm requesting a site-specific feature
|
||||||
required: true
|
required: true
|
||||||
- label: I've verified that I'm running yt-dlp version **2022.05.18** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
- label: I've verified that I'm running yt-dlp version **2022.06.22.1** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
||||||
required: true
|
required: true
|
||||||
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
||||||
required: true
|
required: true
|
||||||
@ -60,12 +60,12 @@ body:
|
|||||||
[debug] Portable config file: yt-dlp.conf
|
[debug] Portable config file: yt-dlp.conf
|
||||||
[debug] Portable config: ['-i']
|
[debug] Portable config: ['-i']
|
||||||
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
||||||
[debug] yt-dlp version 2022.05.18 (exe)
|
[debug] yt-dlp version 2022.06.22.1 (exe)
|
||||||
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
||||||
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
||||||
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
yt-dlp is up to date (2022.05.18)
|
yt-dlp is up to date (2022.06.22.1)
|
||||||
<more lines>
|
<more lines>
|
||||||
render: shell
|
render: shell
|
||||||
validations:
|
validations:
|
||||||
|
6
.github/ISSUE_TEMPLATE/4_bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/4_bug_report.yml
vendored
@ -11,7 +11,7 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: I'm reporting a bug unrelated to a specific site
|
- label: I'm reporting a bug unrelated to a specific site
|
||||||
required: true
|
required: true
|
||||||
- label: I've verified that I'm running yt-dlp version **2022.05.18** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
- label: I've verified that I'm running yt-dlp version **2022.06.22.1** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
||||||
required: true
|
required: true
|
||||||
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
- label: I've checked that all provided URLs are playable in a browser with the same IP and same login details
|
||||||
required: true
|
required: true
|
||||||
@ -45,12 +45,12 @@ body:
|
|||||||
[debug] Portable config file: yt-dlp.conf
|
[debug] Portable config file: yt-dlp.conf
|
||||||
[debug] Portable config: ['-i']
|
[debug] Portable config: ['-i']
|
||||||
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
[debug] Encodings: locale cp1252, fs utf-8, stdout utf-8, stderr utf-8, pref cp1252
|
||||||
[debug] yt-dlp version 2022.05.18 (exe)
|
[debug] yt-dlp version 2022.06.22.1 (exe)
|
||||||
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
[debug] Python version 3.8.8 (CPython 64bit) - Windows-10-10.0.19041-SP0
|
||||||
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
[debug] exe versions: ffmpeg 3.0.1, ffprobe 3.0.1
|
||||||
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
[debug] Optional libraries: Cryptodome, keyring, mutagen, sqlite, websockets
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
yt-dlp is up to date (2022.05.18)
|
yt-dlp is up to date (2022.06.22.1)
|
||||||
<more lines>
|
<more lines>
|
||||||
render: shell
|
render: shell
|
||||||
validations:
|
validations:
|
||||||
|
2
.github/ISSUE_TEMPLATE/5_feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/5_feature_request.yml
vendored
@ -13,7 +13,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
|
- label: I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
|
||||||
required: true
|
required: true
|
||||||
- label: I've verified that I'm running yt-dlp version **2022.05.18** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
- label: I've verified that I'm running yt-dlp version **2022.06.22.1** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
||||||
required: true
|
required: true
|
||||||
- label: I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues including closed ones. DO NOT post duplicates
|
- label: I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues including closed ones. DO NOT post duplicates
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/ISSUE_TEMPLATE/6_question.yml
vendored
2
.github/ISSUE_TEMPLATE/6_question.yml
vendored
@ -13,6 +13,8 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
|
- label: I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
|
||||||
required: true
|
required: true
|
||||||
|
- label: I've verified that I'm running yt-dlp version **2022.06.22.1** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
|
||||||
|
required: true
|
||||||
- label: I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar questions including closed ones. DO NOT post duplicates
|
- label: I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar questions including closed ones. DO NOT post duplicates
|
||||||
required: true
|
required: true
|
||||||
- label: I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
|
- label: I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
|
||||||
|
5
.github/workflows/build.yml
vendored
5
.github/workflows/build.yml
vendored
@ -29,6 +29,7 @@ jobs:
|
|||||||
make issuetemplates
|
make issuetemplates
|
||||||
|
|
||||||
- name: Push to release
|
- name: Push to release
|
||||||
|
id: push_release
|
||||||
run: |
|
run: |
|
||||||
git config --global user.name github-actions
|
git config --global user.name github-actions
|
||||||
git config --global user.email github-actions@example.com
|
git config --global user.email github-actions@example.com
|
||||||
@ -174,10 +175,10 @@ jobs:
|
|||||||
if: "env.BREW_TOKEN != ''"
|
if: "env.BREW_TOKEN != ''"
|
||||||
run: |
|
run: |
|
||||||
git clone git@github.com:yt-dlp/homebrew-taps taps/
|
git clone git@github.com:yt-dlp/homebrew-taps taps/
|
||||||
python devscripts/update-formulae.py taps/Formula/yt-dlp.rb "${{ steps.bump_version.outputs.ytdlp_version }}"
|
python devscripts/update-formulae.py taps/Formula/yt-dlp.rb "${{ needs.create_release.outputs.ytdlp_version }}"
|
||||||
git -C taps/ config user.name github-actions
|
git -C taps/ config user.name github-actions
|
||||||
git -C taps/ config user.email github-actions@example.com
|
git -C taps/ config user.email github-actions@example.com
|
||||||
git -C taps/ commit -am 'yt-dlp: ${{ steps.bump_version.outputs.ytdlp_version }}'
|
git -C taps/ commit -am 'yt-dlp: ${{ needs.create_release.outputs.ytdlp_version }}'
|
||||||
git -C taps/ push
|
git -C taps/ push
|
||||||
|
|
||||||
|
|
||||||
|
19
CONTRIBUTORS
19
CONTRIBUTORS
@ -248,3 +248,22 @@ rand-net
|
|||||||
vertan
|
vertan
|
||||||
Wikidepia
|
Wikidepia
|
||||||
Yipten
|
Yipten
|
||||||
|
moench-tegeder
|
||||||
|
christoph-heinrich
|
||||||
|
HobbyistDev
|
||||||
|
LunarFang416
|
||||||
|
sbor23
|
||||||
|
aurelg
|
||||||
|
adamanldo
|
||||||
|
gamer191
|
||||||
|
vkorablin
|
||||||
|
Burve
|
||||||
|
mnn
|
||||||
|
ZhymabekRoman
|
||||||
|
mozbugbox
|
||||||
|
aejdl
|
||||||
|
ping
|
||||||
|
sqrtNOT
|
||||||
|
bubbleguuum
|
||||||
|
darkxex
|
||||||
|
miseran
|
||||||
|
127
Changelog.md
127
Changelog.md
@ -11,6 +11,131 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
### 2022.06.22.1
|
||||||
|
|
||||||
|
* [build] Fix updating homebrew formula
|
||||||
|
|
||||||
|
### 2022.06.22
|
||||||
|
|
||||||
|
* [**Deprecate support for Python 3.6**](https://github.com/yt-dlp/yt-dlp/issues/3764#issuecomment-1154051119)
|
||||||
|
* **Add option `--download-sections` to download video partially**
|
||||||
|
* Chapter regex and time ranges are accepted (Eg: `--download-sections *1:10-2:20`)
|
||||||
|
* Add option `--alias`
|
||||||
|
* Add option `--lazy-playlist` to process entries as they are received
|
||||||
|
* Add option `--retry-sleep`
|
||||||
|
* Add slicing notation to `--playlist-items`
|
||||||
|
* Adds support for negative indices and step
|
||||||
|
* Add `-I` as alias for `--playlist-index`
|
||||||
|
* Makes `--playlist-start`, `--playlist-end`, `--playlist-reverse`, `--no-playlist-reverse` redundant
|
||||||
|
* `--config-location -` to provide options interactively
|
||||||
|
* [build] Add Linux standalone builds
|
||||||
|
* [update] Self-restart after update
|
||||||
|
* Merge youtube-dl: Upto [commit/8a158a9](https://github.com/ytdl-org/youtube-dl/commit/8a158a9)
|
||||||
|
* Add `--no-update`
|
||||||
|
* Allow extractors to specify section_start/end for clips
|
||||||
|
* Do not print progress to `stderr` with `-q`
|
||||||
|
* Ensure pre-processor errors do not block video download
|
||||||
|
* Fix `--simulate --max-downloads`
|
||||||
|
* Improve error handling of bad config files
|
||||||
|
* Return an error code if update fails
|
||||||
|
* Fix bug in [3a408f9](https://github.com/yt-dlp/yt-dlp/commit/3a408f9d199127ca2626359e21a866a09ab236b3)
|
||||||
|
* [ExtractAudio] Allow conditional conversion
|
||||||
|
* [ModifyChapters] Fix repeated removal of small segments
|
||||||
|
* [ThumbnailsConvertor] Allow conditional conversion
|
||||||
|
* [cookies] Detect profiles for cygwin/BSD by [moench-tegeder](https://github.com/moench-tegeder)
|
||||||
|
* [dash] Show fragment count with `--live-from-start` by [flashdagger](https://github.com/flashdagger)
|
||||||
|
* [extractor] Add `_search_json` by [coletdjnz](https://github.com/coletdjnz), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor] Add `default` parameter to `_search_json` by [coletdjnz](https://github.com/coletdjnz), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor] Add dev option `--load-pages`
|
||||||
|
* [extractor] Handle `json_ld` with multiple `@type`s
|
||||||
|
* [extractor] Import `_ALL_CLASSES` lazily
|
||||||
|
* [extractor] Recognize `src` attribute from HTML5 media elements by [Lesmiscore](https://github.com/Lesmiscore)
|
||||||
|
* [extractor/generic] Revert e6ae51c123897927eb3c9899923d8ffd31c7f85d
|
||||||
|
* [f4m] Bugfix
|
||||||
|
* [ffmpeg] Check version lazily
|
||||||
|
* [jsinterp] Some optimizations and refactoring by [dirkf](https://github.com/dirkf), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [utils] Improve performance using `functools.cache`
|
||||||
|
* [utils] Send HTTP/1.1 ALPN extension by [coletdjnz](https://github.com/coletdjnz)
|
||||||
|
* [utils] `ExtractorError`: Fix `exc_info`
|
||||||
|
* [utils] `ISO3166Utils`: Add `EU` and `AP`
|
||||||
|
* [utils] `Popen`: Refactor to use contextmanager
|
||||||
|
* [utils] `locked_file`: Fix for PyPy on Windows
|
||||||
|
* [update] Expose more functionality to API
|
||||||
|
* [update] Use `.git` folder to distinguish `source`/`unknown`
|
||||||
|
* [compat] Add `functools.cached_property`
|
||||||
|
* [test] Fix `FakeYDL` signatures by [coletdjnz](https://github.com/coletdjnz)
|
||||||
|
* [docs] Improvements
|
||||||
|
* [cleanup, ExtractAudio] Refactor
|
||||||
|
* [cleanup, downloader] Refactor `report_progress`
|
||||||
|
* [cleanup, extractor] Refactor `_download_...` methods
|
||||||
|
* [cleanup, extractor] Rename `extractors.py` to `_extractors.py`
|
||||||
|
* [cleanup, utils] Don't use kwargs for `format_field`
|
||||||
|
* [cleanup, build] Refactor
|
||||||
|
* [cleanup, docs] Re-indent "Usage and Options" section
|
||||||
|
* [cleanup] Deprecate `YoutubeDL.parse_outtmpl`
|
||||||
|
* [cleanup] Misc fixes and cleanup by [Lesmiscore](https://github.com/Lesmiscore), [MrRawes](https://github.com/MrRawes), [christoph-heinrich](https://github.com/christoph-heinrich), [flashdagger](https://github.com/flashdagger), [gamer191](https://github.com/gamer191), [kwconder](https://github.com/kwconder), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/DailyWire] Add extractors by [HobbyistDev](https://github.com/HobbyistDev), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/fourzerostudio] Add extractors by [Lesmiscore](https://github.com/Lesmiscore)
|
||||||
|
* [extractor/GoogleDrive] Add folder extractor by [evansp](https://github.com/evansp), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/MirrorCoUK] Add extractor by [LunarFang416](https://github.com/LunarFang416), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/atscaleconfevent] Add extractor by [Ashish0804](https://github.com/Ashish0804)
|
||||||
|
* [extractor/freetv] Add extractor by [elyse0](https://github.com/elyse0)
|
||||||
|
* [extractor/ixigua] Add Extractor by [HobbyistDev](https://github.com/HobbyistDev)
|
||||||
|
* [extractor/kicker.de] Add extractor by [HobbyistDev](https://github.com/HobbyistDev)
|
||||||
|
* [extractor/netverse] Add extractors by [HobbyistDev](https://github.com/HobbyistDev), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/playsuisse] Add extractor by [pukkandan](https://github.com/pukkandan), [sbor23](https://github.com/sbor23)
|
||||||
|
* [extractor/substack] Add extractor by [elyse0](https://github.com/elyse0)
|
||||||
|
* [extractor/youtube] **Support downloading clips**
|
||||||
|
* [extractor/youtube] Add `innertube_host` and `innertube_key` extractor args by [coletdjnz](https://github.com/coletdjnz)
|
||||||
|
* [extractor/youtube] Add warning for PostLiveDvr
|
||||||
|
* [extractor/youtube] Bring back `_extract_chapters_from_description`
|
||||||
|
* [extractor/youtube] Extract `comment_count` from webpage
|
||||||
|
* [extractor/youtube] Fix `:ytnotifications` extractor by [coletdjnz](https://github.com/coletdjnz)
|
||||||
|
* [extractor/youtube] Fix initial player response extraction by [coletdjnz](https://github.com/coletdjnz), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/youtube] Fix live chat for videos with content warning by [coletdjnz](https://github.com/coletdjnz)
|
||||||
|
* [extractor/youtube] Make signature extraction non-fatal
|
||||||
|
* [extractor/youtube:tab] Detect `videoRenderer` in `_post_thread_continuation_entries`
|
||||||
|
* [extractor/BiliIntl] Fix metadata extraction
|
||||||
|
* [extractor/BiliIntl] Fix subtitle extraction by [HobbyistDev](https://github.com/HobbyistDev)
|
||||||
|
* [extractor/FranceCulture] Fix extractor by [aurelg](https://github.com/aurelg), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/PokemonSoundLibrary] Remove extractor by [Lesmiscore](https://github.com/Lesmiscore)
|
||||||
|
* [extractor/StreamCZ] Fix extractor by [adamanldo](https://github.com/adamanldo), [dirkf](https://github.com/dirkf)
|
||||||
|
* [extractor/WatchESPN] Support free videos and BAM_DTC by [ischmidt20](https://github.com/ischmidt20)
|
||||||
|
* [extractor/animelab] Remove extractor by [gamer191](https://github.com/gamer191)
|
||||||
|
* [extractor/bloomberg] Change playback endpoint by [m4tu4g](https://github.com/m4tu4g)
|
||||||
|
* [extractor/ccc] Extract view_count by [vkorablin](https://github.com/vkorablin)
|
||||||
|
* [extractor/crunchyroll:beta] Fix extractor after API change by [Burve](https://github.com/Burve), [tejing1](https://github.com/tejing1)
|
||||||
|
* [extractor/curiositystream] Get `auth_token` from cookie by [mnn](https://github.com/mnn)
|
||||||
|
* [extractor/digitalconcerthall] Fix extractor by [ZhymabekRoman](https://github.com/ZhymabekRoman)
|
||||||
|
* [extractor/dropbox] Extract the correct `mountComponent`
|
||||||
|
* [extractor/dropout] Login is not mandatory
|
||||||
|
* [extractor/duboku] Fix for hostname change by [mozbugbox](https://github.com/mozbugbox)
|
||||||
|
* [extractor/espn] Add `WatchESPN` extractor by [ischmidt20](https://github.com/ischmidt20), [pukkandan](https://github.com/pukkandan)
|
||||||
|
* [extractor/expressen] Fix extractor by [aejdl](https://github.com/aejdl)
|
||||||
|
* [extractor/foxnews] Update embed extraction by [elyse0](https://github.com/elyse0)
|
||||||
|
* [extractor/ina] Fix extractor by [elyse0](https://github.com/elyse0)
|
||||||
|
* [extractor/iwara:user] Make paging better by [Lesmiscore](https://github.com/Lesmiscore)
|
||||||
|
* [extractor/jwplatform] Look for `data-video-jw-id`
|
||||||
|
* [extractor/lbry] Update livestream API by [flashdagger](https://github.com/flashdagger)
|
||||||
|
* [extractor/mediaset] Improve `_VALID_URL`
|
||||||
|
* [extractor/naver] Add `navernow` extractor by [ping](https://github.com/ping)
|
||||||
|
* [extractor/niconico:series] Fix extractor by [sqrtNOT](https://github.com/sqrtNOT)
|
||||||
|
* [extractor/npr] Use stream url from json-ld by [r5d](https://github.com/r5d)
|
||||||
|
* [extractor/pornhub] Extract `uploader_id` field by [Lesmiscore](https://github.com/Lesmiscore)
|
||||||
|
* [extractor/radiofrance] Add more radios by [bubbleguuum](https://github.com/bubbleguuum)
|
||||||
|
* [extractor/rumble] Detect JS embed
|
||||||
|
* [extractor/rumble] Extract subtitles by [fstirlitz](https://github.com/fstirlitz)
|
||||||
|
* [extractor/southpark] Add `southpark.lat` extractor by [darkxex](https://github.com/darkxex)
|
||||||
|
* [extractor/spotify:show] Fix extractor
|
||||||
|
* [extractor/tiktok] Detect embeds
|
||||||
|
* [extractor/tiktok] Extract `SIGI_STATE` by [dirkf](https://github.com/dirkf), [pukkandan](https://github.com/pukkandan), [sulyi](https://github.com/sulyi)
|
||||||
|
* [extractor/tver] Fix extractor by [Lesmiscore](https://github.com/Lesmiscore)
|
||||||
|
* [extractor/vevo] Fix extractor by [Lesmiscore](https://github.com/Lesmiscore)
|
||||||
|
* [extractor/yahoo:gyao] Fix extractor
|
||||||
|
* [extractor/zattoo] Fix live streams by [miseran](https://github.com/miseran)
|
||||||
|
* [extractor/zdf] Improve format sorting by [elyse0](https://github.com/elyse0)
|
||||||
|
|
||||||
|
|
||||||
### 2022.05.18
|
### 2022.05.18
|
||||||
|
|
||||||
* Add support for SSL client certificate authentication by [coletdjnz](https://github.com/coletdjnz), [dirkf](https://github.com/dirkf)
|
* Add support for SSL client certificate authentication by [coletdjnz](https://github.com/coletdjnz), [dirkf](https://github.com/dirkf)
|
||||||
@ -1156,7 +1281,7 @@
|
|||||||
* [build] Automate more of the release process by [animelover1984](https://github.com/animelover1984), [pukkandan](https://github.com/pukkandan)
|
* [build] Automate more of the release process by [animelover1984](https://github.com/animelover1984), [pukkandan](https://github.com/pukkandan)
|
||||||
* [build] Fix sha256 by [nihil-admirari](https://github.com/nihil-admirari)
|
* [build] Fix sha256 by [nihil-admirari](https://github.com/nihil-admirari)
|
||||||
* [build] Bring back brew taps by [nao20010128nao](https://github.com/nao20010128nao)
|
* [build] Bring back brew taps by [nao20010128nao](https://github.com/nao20010128nao)
|
||||||
* [build] Provide `--onedir` zip for windows by [pukkandan](https://github.com/pukkandan)
|
* [build] Provide `--onedir` zip for windows
|
||||||
* [cleanup,docs] Add deprecation warning in docs for some counter intuitive behaviour
|
* [cleanup,docs] Add deprecation warning in docs for some counter intuitive behaviour
|
||||||
* [cleanup] Fix line endings for `nebula.py` by [glenn-slayden](https://github.com/glenn-slayden)
|
* [cleanup] Fix line endings for `nebula.py` by [glenn-slayden](https://github.com/glenn-slayden)
|
||||||
* [cleanup] Improve `make clean-test` by [sulyi](https://github.com/sulyi)
|
* [cleanup] Improve `make clean-test` by [sulyi](https://github.com/sulyi)
|
||||||
|
@ -90,6 +90,7 @@ yt-dlp is a [youtube-dl](https://github.com/ytdl-org/youtube-dl) fork based on t
|
|||||||
* Youtube music Albums, channels etc can be downloaded ([except self-uploaded music](https://github.com/yt-dlp/yt-dlp/issues/723))
|
* Youtube music Albums, channels etc can be downloaded ([except self-uploaded music](https://github.com/yt-dlp/yt-dlp/issues/723))
|
||||||
* Download livestreams from the start using `--live-from-start` (experimental)
|
* Download livestreams from the start using `--live-from-start` (experimental)
|
||||||
* Support for downloading stories (`ytstories:<channel UCID>`)
|
* Support for downloading stories (`ytstories:<channel UCID>`)
|
||||||
|
* Support for downloading clips
|
||||||
|
|
||||||
* **Cookies from browser**: Cookies can be automatically extracted from all major web browsers using `--cookies-from-browser BROWSER[+KEYRING][:PROFILE]`
|
* **Cookies from browser**: Cookies can be automatically extracted from all major web browsers using `--cookies-from-browser BROWSER[+KEYRING][:PROFILE]`
|
||||||
|
|
||||||
@ -263,7 +264,7 @@ File|Description
|
|||||||
<!-- MANPAGE: END EXCLUDED SECTION -->
|
<!-- MANPAGE: END EXCLUDED SECTION -->
|
||||||
|
|
||||||
## DEPENDENCIES
|
## DEPENDENCIES
|
||||||
Python versions 3.6+ (CPython and PyPy) are supported. Other versions and implementations may or may not work correctly.
|
Python versions 3.7+ (CPython and PyPy) are supported. Other versions and implementations may or may not work correctly.
|
||||||
|
|
||||||
<!-- Python 3.5+ uses VC++14 and it is already embedded in the binary created
|
<!-- Python 3.5+ uses VC++14 and it is already embedded in the binary created
|
||||||
<!x-- https://www.microsoft.com/en-us/download/details.aspx?id=26999 --x>
|
<!x-- https://www.microsoft.com/en-us/download/details.aspx?id=26999 --x>
|
||||||
@ -301,8 +302,8 @@ While all the other dependencies are optional, `ffmpeg` and `ffprobe` are highly
|
|||||||
|
|
||||||
* [**avconv** and **avprobe**](https://www.libav.org) - Now **deprecated** alternative to ffmpeg. License [depends on the build](https://libav.org/legal)
|
* [**avconv** and **avprobe**](https://www.libav.org) - Now **deprecated** alternative to ffmpeg. License [depends on the build](https://libav.org/legal)
|
||||||
* [**sponskrub**](https://github.com/faissaloo/SponSkrub) - For using the now **deprecated** [sponskrub options](#sponskrub-options). Licensed under [GPLv3+](https://github.com/faissaloo/SponSkrub/blob/master/LICENCE.md)
|
* [**sponskrub**](https://github.com/faissaloo/SponSkrub) - For using the now **deprecated** [sponskrub options](#sponskrub-options). Licensed under [GPLv3+](https://github.com/faissaloo/SponSkrub/blob/master/LICENCE.md)
|
||||||
* [**rtmpdump**](http://rtmpdump.mplayerhq.hu) - For downloading `rtmp` streams. ffmpeg will be used as a fallback. Licensed under [GPLv2+](http://rtmpdump.mplayerhq.hu)
|
* [**rtmpdump**](http://rtmpdump.mplayerhq.hu) - For downloading `rtmp` streams. ffmpeg can be used instead with `--downloader ffmpeg`. Licensed under [GPLv2+](http://rtmpdump.mplayerhq.hu)
|
||||||
* [**mplayer**](http://mplayerhq.hu/design7/info.html) or [**mpv**](https://mpv.io) - For downloading `rstp` streams. ffmpeg will be used as a fallback. Licensed under [GPLv2+](https://github.com/mpv-player/mpv/blob/master/Copyright)
|
* [**mplayer**](http://mplayerhq.hu/design7/info.html) or [**mpv**](https://mpv.io) - For downloading `rstp`/`mms` streams. ffmpeg can be used instead with `--downloader ffmpeg`. Licensed under [GPLv2+](https://github.com/mpv-player/mpv/blob/master/Copyright)
|
||||||
|
|
||||||
To use or redistribute the dependencies, you must agree to their respective licensing terms.
|
To use or redistribute the dependencies, you must agree to their respective licensing terms.
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
# Supported sites
|
# Supported sites
|
||||||
|
- **0000studio:archive**
|
||||||
|
- **0000studio:clip**
|
||||||
- **17live**
|
- **17live**
|
||||||
- **17live:clip**
|
- **17live:clip**
|
||||||
- **1tv**: Первый канал
|
- **1tv**: Первый канал
|
||||||
@ -60,8 +62,6 @@
|
|||||||
- **AmHistoryChannel**
|
- **AmHistoryChannel**
|
||||||
- **anderetijden**: npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nl
|
- **anderetijden**: npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nl
|
||||||
- **AnimalPlanet**
|
- **AnimalPlanet**
|
||||||
- **AnimeLab**: [<abbr title="netrc machine"><em>animelab</em></abbr>]
|
|
||||||
- **AnimeLabShows**: [<abbr title="netrc machine"><em>animelab</em></abbr>]
|
|
||||||
- **AnimeOnDemand**: [<abbr title="netrc machine"><em>animeondemand</em></abbr>]
|
- **AnimeOnDemand**: [<abbr title="netrc machine"><em>animeondemand</em></abbr>]
|
||||||
- **ant1newsgr:article**: ant1news.gr articles
|
- **ant1newsgr:article**: ant1news.gr articles
|
||||||
- **ant1newsgr:embed**: ant1news.gr embedded videos
|
- **ant1newsgr:embed**: ant1news.gr embedded videos
|
||||||
@ -89,6 +89,7 @@
|
|||||||
- **AsianCrush**
|
- **AsianCrush**
|
||||||
- **AsianCrushPlaylist**
|
- **AsianCrushPlaylist**
|
||||||
- **AtresPlayer**: [<abbr title="netrc machine"><em>atresplayer</em></abbr>]
|
- **AtresPlayer**: [<abbr title="netrc machine"><em>atresplayer</em></abbr>]
|
||||||
|
- **AtScaleConfEvent**
|
||||||
- **ATTTechChannel**
|
- **ATTTechChannel**
|
||||||
- **ATVAt**
|
- **ATVAt**
|
||||||
- **AudiMedia**
|
- **AudiMedia**
|
||||||
@ -276,6 +277,8 @@
|
|||||||
- **dailymotion**: [<abbr title="netrc machine"><em>dailymotion</em></abbr>]
|
- **dailymotion**: [<abbr title="netrc machine"><em>dailymotion</em></abbr>]
|
||||||
- **dailymotion:playlist**: [<abbr title="netrc machine"><em>dailymotion</em></abbr>]
|
- **dailymotion:playlist**: [<abbr title="netrc machine"><em>dailymotion</em></abbr>]
|
||||||
- **dailymotion:user**: [<abbr title="netrc machine"><em>dailymotion</em></abbr>]
|
- **dailymotion:user**: [<abbr title="netrc machine"><em>dailymotion</em></abbr>]
|
||||||
|
- **DailyWire**
|
||||||
|
- **DailyWirePodcast**
|
||||||
- **damtomo:record**
|
- **damtomo:record**
|
||||||
- **damtomo:video**
|
- **damtomo:video**
|
||||||
- **daum.net**
|
- **daum.net**
|
||||||
@ -322,8 +325,8 @@
|
|||||||
- **drtv**
|
- **drtv**
|
||||||
- **drtv:live**
|
- **drtv:live**
|
||||||
- **DTube**
|
- **DTube**
|
||||||
- **duboku**: www.duboku.co
|
- **duboku**: www.duboku.io
|
||||||
- **duboku:list**: www.duboku.co entire series
|
- **duboku:list**: www.duboku.io entire series
|
||||||
- **Dumpert**
|
- **Dumpert**
|
||||||
- **dvtv**: http://video.aktualne.cz/
|
- **dvtv**: http://video.aktualne.cz/
|
||||||
- **dw**
|
- **dw**
|
||||||
@ -403,6 +406,8 @@
|
|||||||
- **FranceTVSite**
|
- **FranceTVSite**
|
||||||
- **Freesound**
|
- **Freesound**
|
||||||
- **freespeech.org**
|
- **freespeech.org**
|
||||||
|
- **freetv:series**
|
||||||
|
- **FreeTvMovies**
|
||||||
- **FrontendMasters**: [<abbr title="netrc machine"><em>frontendmasters</em></abbr>]
|
- **FrontendMasters**: [<abbr title="netrc machine"><em>frontendmasters</em></abbr>]
|
||||||
- **FrontendMastersCourse**: [<abbr title="netrc machine"><em>frontendmasters</em></abbr>]
|
- **FrontendMastersCourse**: [<abbr title="netrc machine"><em>frontendmasters</em></abbr>]
|
||||||
- **FrontendMastersLesson**: [<abbr title="netrc machine"><em>frontendmasters</em></abbr>]
|
- **FrontendMastersLesson**: [<abbr title="netrc machine"><em>frontendmasters</em></abbr>]
|
||||||
@ -452,6 +457,7 @@
|
|||||||
- **google:podcasts**
|
- **google:podcasts**
|
||||||
- **google:podcasts:feed**
|
- **google:podcasts:feed**
|
||||||
- **GoogleDrive**
|
- **GoogleDrive**
|
||||||
|
- **GoogleDrive:Folder**
|
||||||
- **GoPro**
|
- **GoPro**
|
||||||
- **Goshgay**
|
- **Goshgay**
|
||||||
- **GoToStage**
|
- **GoToStage**
|
||||||
@ -535,6 +541,7 @@
|
|||||||
- **Iwara**
|
- **Iwara**
|
||||||
- **iwara:playlist**
|
- **iwara:playlist**
|
||||||
- **iwara:user**
|
- **iwara:user**
|
||||||
|
- **Ixigua**
|
||||||
- **Izlesene**
|
- **Izlesene**
|
||||||
- **Jable**
|
- **Jable**
|
||||||
- **JablePlaylist**
|
- **JablePlaylist**
|
||||||
@ -554,12 +561,14 @@
|
|||||||
- **Ketnet**
|
- **Ketnet**
|
||||||
- **khanacademy**
|
- **khanacademy**
|
||||||
- **khanacademy:unit**
|
- **khanacademy:unit**
|
||||||
|
- **Kicker**
|
||||||
- **KickStarter**
|
- **KickStarter**
|
||||||
- **KinjaEmbed**
|
- **KinjaEmbed**
|
||||||
- **KinoPoisk**
|
- **KinoPoisk**
|
||||||
- **KonserthusetPlay**
|
- **KonserthusetPlay**
|
||||||
- **Koo**
|
- **Koo**
|
||||||
- **KrasView**: Красвью
|
- **KrasView**: Красвью
|
||||||
|
- **KTH**
|
||||||
- **Ku6**
|
- **Ku6**
|
||||||
- **KUSI**
|
- **KUSI**
|
||||||
- **kuwo:album**: 酷我音乐 - 专辑
|
- **kuwo:album**: 酷我音乐 - 专辑
|
||||||
@ -675,6 +684,7 @@
|
|||||||
- **miomio.tv**
|
- **miomio.tv**
|
||||||
- **mirrativ**
|
- **mirrativ**
|
||||||
- **mirrativ:user**
|
- **mirrativ:user**
|
||||||
|
- **MirrorCoUK**
|
||||||
- **MiTele**: mitele.es
|
- **MiTele**: mitele.es
|
||||||
- **mixch**
|
- **mixch**
|
||||||
- **mixch:archive**
|
- **mixch:archive**
|
||||||
@ -740,6 +750,7 @@
|
|||||||
- **NationalGeographicTV**
|
- **NationalGeographicTV**
|
||||||
- **Naver**
|
- **Naver**
|
||||||
- **Naver:live**
|
- **Naver:live**
|
||||||
|
- **navernow**
|
||||||
- **NBA**
|
- **NBA**
|
||||||
- **nba:watch**
|
- **nba:watch**
|
||||||
- **nba:watch:collection**
|
- **nba:watch:collection**
|
||||||
@ -769,6 +780,8 @@
|
|||||||
- **netease:singer**: 网易云音乐 - 歌手
|
- **netease:singer**: 网易云音乐 - 歌手
|
||||||
- **netease:song**: 网易云音乐
|
- **netease:song**: 网易云音乐
|
||||||
- **NetPlus**: [<abbr title="netrc machine"><em>netplus</em></abbr>]
|
- **NetPlus**: [<abbr title="netrc machine"><em>netplus</em></abbr>]
|
||||||
|
- **Netverse**
|
||||||
|
- **NetversePlaylist**
|
||||||
- **Netzkino**
|
- **Netzkino**
|
||||||
- **Newgrounds**
|
- **Newgrounds**
|
||||||
- **Newgrounds:playlist**
|
- **Newgrounds:playlist**
|
||||||
@ -932,6 +945,7 @@
|
|||||||
- **PlayPlusTV**: [<abbr title="netrc machine"><em>playplustv</em></abbr>]
|
- **PlayPlusTV**: [<abbr title="netrc machine"><em>playplustv</em></abbr>]
|
||||||
- **PlayStuff**
|
- **PlayStuff**
|
||||||
- **PlaysTV**
|
- **PlaysTV**
|
||||||
|
- **PlaySuisse**
|
||||||
- **Playtvak**: Playtvak.cz, iDNES.cz and Lidovky.cz
|
- **Playtvak**: Playtvak.cz, iDNES.cz and Lidovky.cz
|
||||||
- **Playvid**
|
- **Playvid**
|
||||||
- **PlayVids**
|
- **PlayVids**
|
||||||
@ -942,7 +956,6 @@
|
|||||||
- **Podchaser**
|
- **Podchaser**
|
||||||
- **podomatic**
|
- **podomatic**
|
||||||
- **Pokemon**
|
- **Pokemon**
|
||||||
- **PokemonSoundLibrary**
|
|
||||||
- **PokemonWatch**
|
- **PokemonWatch**
|
||||||
- **PokerGo**: [<abbr title="netrc machine"><em>pokergo</em></abbr>]
|
- **PokerGo**: [<abbr title="netrc machine"><em>pokergo</em></abbr>]
|
||||||
- **PokerGoCollection**: [<abbr title="netrc machine"><em>pokergo</em></abbr>]
|
- **PokerGoCollection**: [<abbr title="netrc machine"><em>pokergo</em></abbr>]
|
||||||
@ -1150,6 +1163,7 @@
|
|||||||
- **southpark.cc.com**
|
- **southpark.cc.com**
|
||||||
- **southpark.cc.com:español**
|
- **southpark.cc.com:español**
|
||||||
- **southpark.de**
|
- **southpark.de**
|
||||||
|
- **southpark.lat**
|
||||||
- **southpark.nl**
|
- **southpark.nl**
|
||||||
- **southparkstudios.dk**
|
- **southparkstudios.dk**
|
||||||
- **SovietsCloset**
|
- **SovietsCloset**
|
||||||
@ -1189,6 +1203,7 @@
|
|||||||
- **StretchInternet**
|
- **StretchInternet**
|
||||||
- **Stripchat**
|
- **Stripchat**
|
||||||
- **stv:player**
|
- **stv:player**
|
||||||
|
- **Substack**
|
||||||
- **SunPorno**
|
- **SunPorno**
|
||||||
- **sverigesradio:episode**
|
- **sverigesradio:episode**
|
||||||
- **sverigesradio:publication**
|
- **sverigesradio:publication**
|
||||||
@ -1463,6 +1478,7 @@
|
|||||||
- **washingtonpost:article**
|
- **washingtonpost:article**
|
||||||
- **wat.tv**
|
- **wat.tv**
|
||||||
- **WatchBox**
|
- **WatchBox**
|
||||||
|
- **WatchESPN**
|
||||||
- **WatchIndianPorn**: Watch Indian Porn
|
- **WatchIndianPorn**: Watch Indian Porn
|
||||||
- **WDR**
|
- **WDR**
|
||||||
- **wdr:mobile**: (**Currently broken**)
|
- **wdr:mobile**: (**Currently broken**)
|
||||||
@ -1535,6 +1551,7 @@
|
|||||||
- **YourPorn**
|
- **YourPorn**
|
||||||
- **YourUpload**
|
- **YourUpload**
|
||||||
- **youtube**: YouTube
|
- **youtube**: YouTube
|
||||||
|
- **youtube:clip**
|
||||||
- **youtube:favorites**: YouTube liked videos; ":ytfav" keyword (requires cookies)
|
- **youtube:favorites**: YouTube liked videos; ":ytfav" keyword (requires cookies)
|
||||||
- **youtube:history**: Youtube watch history; ":ythis" keyword (requires cookies)
|
- **youtube:history**: Youtube watch history; ":ythis" keyword (requires cookies)
|
||||||
- **youtube:music:search_url**: YouTube music search URLs with selectable sections (Eg: #songs)
|
- **youtube:music:search_url**: YouTube music search URLs with selectable sections (Eg: #songs)
|
||||||
|
@ -582,9 +582,14 @@ class YoutubeDL:
|
|||||||
for type_, stream in self._out_files.items_ if type_ != 'console'
|
for type_, stream in self._out_files.items_ if type_ != 'console'
|
||||||
})
|
})
|
||||||
|
|
||||||
if sys.version_info < (3, 6):
|
MIN_SUPPORTED, MIN_RECOMMENDED = (3, 6), (3, 7)
|
||||||
self.report_warning(
|
current_version = sys.version_info[:2]
|
||||||
'Python version %d.%d is not supported! Please update to Python 3.6 or above' % sys.version_info[:2])
|
if current_version < MIN_RECOMMENDED:
|
||||||
|
msg = 'Support for Python version %d.%d has been deprecated and will break in future versions of yt-dlp'
|
||||||
|
if current_version < MIN_SUPPORTED:
|
||||||
|
msg = 'Python version %d.%d is no longer supported'
|
||||||
|
self.deprecation_warning(
|
||||||
|
f'{msg}! Please update to Python %d.%d or above' % (*current_version, *MIN_RECOMMENDED))
|
||||||
|
|
||||||
if self.params.get('allow_unplayable_formats'):
|
if self.params.get('allow_unplayable_formats'):
|
||||||
self.report_warning(
|
self.report_warning(
|
||||||
@ -1596,9 +1601,13 @@ class YoutubeDL:
|
|||||||
if not info:
|
if not info:
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
exempted_fields = {'_type', 'url', 'ie_key'}
|
||||||
|
if not ie_result.get('section_end') and ie_result.get('section_start') is None:
|
||||||
|
# For video clips, the id etc of the clip extractor should be used
|
||||||
|
exempted_fields |= {'id', 'extractor', 'extractor_key'}
|
||||||
|
|
||||||
new_result = info.copy()
|
new_result = info.copy()
|
||||||
new_result.update(filter_dict(ie_result, lambda k, v: (
|
new_result.update(filter_dict(ie_result, lambda k, v: v is not None and k not in exempted_fields))
|
||||||
v is not None and k not in {'_type', 'url', 'id', 'extractor', 'extractor_key', 'ie_key'})))
|
|
||||||
|
|
||||||
# Extracted info may not be a video result (i.e.
|
# Extracted info may not be a video result (i.e.
|
||||||
# info.get('_type', 'video') != video) but rather an url or
|
# info.get('_type', 'video') != video) but rather an url or
|
||||||
@ -1723,7 +1732,7 @@ class YoutubeDL:
|
|||||||
resolved_entries.append((playlist_index, entry))
|
resolved_entries.append((playlist_index, entry))
|
||||||
|
|
||||||
# TODO: Add auto-generated fields
|
# TODO: Add auto-generated fields
|
||||||
if self._match_entry(entry, incomplete=True) is not None:
|
if not entry or self._match_entry(entry, incomplete=True) is not None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
self.to_screen('[download] Downloading video %s of %s' % (
|
self.to_screen('[download] Downloading video %s of %s' % (
|
||||||
@ -2369,6 +2378,8 @@ class YoutubeDL:
|
|||||||
|
|
||||||
sanitize_string_field(info_dict, 'id')
|
sanitize_string_field(info_dict, 'id')
|
||||||
sanitize_numeric_fields(info_dict)
|
sanitize_numeric_fields(info_dict)
|
||||||
|
if info_dict.get('section_end') and info_dict.get('section_start') is not None:
|
||||||
|
info_dict['duration'] = round(info_dict['section_end'] - info_dict['section_start'], 3)
|
||||||
if (info_dict.get('duration') or 0) <= 0 and info_dict.pop('duration', None):
|
if (info_dict.get('duration') or 0) <= 0 and info_dict.pop('duration', None):
|
||||||
self.report_warning('"duration" field is negative, there is an error in extractor')
|
self.report_warning('"duration" field is negative, there is an error in extractor')
|
||||||
|
|
||||||
@ -2604,10 +2615,11 @@ class YoutubeDL:
|
|||||||
for fmt, chapter in itertools.product(formats_to_download, requested_ranges or [{}]):
|
for fmt, chapter in itertools.product(formats_to_download, requested_ranges or [{}]):
|
||||||
new_info = self._copy_infodict(info_dict)
|
new_info = self._copy_infodict(info_dict)
|
||||||
new_info.update(fmt)
|
new_info.update(fmt)
|
||||||
if chapter:
|
offset, duration = info_dict.get('section_start') or 0, info_dict.get('duration') or float('inf')
|
||||||
|
if chapter or offset:
|
||||||
new_info.update({
|
new_info.update({
|
||||||
'section_start': chapter.get('start_time'),
|
'section_start': offset + chapter.get('start_time', 0),
|
||||||
'section_end': chapter.get('end_time', 0),
|
'section_end': offset + min(chapter.get('end_time', 0), duration),
|
||||||
'section_title': chapter.get('title'),
|
'section_title': chapter.get('title'),
|
||||||
'section_number': chapter.get('index'),
|
'section_number': chapter.get('index'),
|
||||||
})
|
})
|
||||||
|
@ -108,7 +108,7 @@ class FileDownloader:
|
|||||||
|
|
||||||
@classproperty
|
@classproperty
|
||||||
def FD_NAME(cls):
|
def FD_NAME(cls):
|
||||||
return re.sub(r'(?<!^)(?=[A-Z])', '_', cls.__name__[:-2]).lower()
|
return re.sub(r'(?<=[a-z])(?=[A-Z])', '_', cls.__name__[:-2]).lower()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def format_seconds(seconds):
|
def format_seconds(seconds):
|
||||||
|
@ -23,7 +23,7 @@ class HttpQuietDownloader(HttpFD):
|
|||||||
def to_screen(self, *args, **kargs):
|
def to_screen(self, *args, **kargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
console_title = to_screen
|
to_console_title = to_screen
|
||||||
|
|
||||||
|
|
||||||
class FragmentFD(FileDownloader):
|
class FragmentFD(FileDownloader):
|
||||||
|
@ -385,6 +385,11 @@ class InfoExtractor:
|
|||||||
release_year: Year (YYYY) when the album was released.
|
release_year: Year (YYYY) when the album was released.
|
||||||
composer: Composer of the piece
|
composer: Composer of the piece
|
||||||
|
|
||||||
|
The following fields should only be set for clips that should be cut from the original video:
|
||||||
|
|
||||||
|
section_start: Start time of the section in seconds
|
||||||
|
section_end: End time of the section in seconds
|
||||||
|
|
||||||
Unless mentioned otherwise, the fields should be Unicode strings.
|
Unless mentioned otherwise, the fields should be Unicode strings.
|
||||||
|
|
||||||
Unless mentioned otherwise, None is equivalent to absence of information.
|
Unless mentioned otherwise, None is equivalent to absence of information.
|
||||||
|
@ -5978,14 +5978,43 @@ class YoutubeTruncatedURLIE(InfoExtractor):
|
|||||||
expected=True)
|
expected=True)
|
||||||
|
|
||||||
|
|
||||||
class YoutubeClipIE(InfoExtractor):
|
class YoutubeClipIE(YoutubeTabBaseInfoExtractor):
|
||||||
IE_NAME = 'youtube:clip'
|
IE_NAME = 'youtube:clip'
|
||||||
IE_DESC = False # Do not list
|
_VALID_URL = r'https?://(?:www\.)?youtube\.com/clip/(?P<id>[^/?#]+)'
|
||||||
_VALID_URL = r'https?://(?:www\.)?youtube\.com/clip/'
|
_TESTS = [{
|
||||||
|
# FIXME: Other metadata should be extracted from the clip, not from the base video
|
||||||
|
'url': 'https://www.youtube.com/clip/UgytZKpehg-hEMBSn3F4AaABCQ',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'UgytZKpehg-hEMBSn3F4AaABCQ',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'section_start': 29.0,
|
||||||
|
'section_end': 39.7,
|
||||||
|
'duration': 10.7,
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
self.report_warning('YouTube clips are not currently supported. The entire video will be downloaded instead')
|
clip_id = self._match_id(url)
|
||||||
return self.url_result(url, 'Generic')
|
_, data = self._extract_webpage(url, clip_id)
|
||||||
|
|
||||||
|
video_id = traverse_obj(data, ('currentVideoEndpoint', 'watchEndpoint', 'videoId'))
|
||||||
|
if not video_id:
|
||||||
|
raise ExtractorError('Unable to find video ID')
|
||||||
|
|
||||||
|
clip_data = traverse_obj(data, (
|
||||||
|
'engagementPanels', ..., 'engagementPanelSectionListRenderer', 'content', 'clipSectionRenderer',
|
||||||
|
'contents', ..., 'clipAttributionRenderer', 'onScrubExit', 'commandExecutorCommand', 'commands', ...,
|
||||||
|
'openPopupAction', 'popup', 'notificationActionRenderer', 'actionButton', 'buttonRenderer', 'command',
|
||||||
|
'commandExecutorCommand', 'commands', ..., 'loopCommand'), get_all=False)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'_type': 'url_transparent',
|
||||||
|
'url': f'https://www.youtube.com/watch?v={video_id}',
|
||||||
|
'ie_key': YoutubeIE.ie_key(),
|
||||||
|
'id': clip_id,
|
||||||
|
'section_start': int(clip_data['startTimeMs']) / 1000,
|
||||||
|
'section_end': int(clip_data['endTimeMs']) / 1000,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class YoutubeTruncatedIDIE(InfoExtractor):
|
class YoutubeTruncatedIDIE(InfoExtractor):
|
||||||
|
@ -2883,6 +2883,8 @@ class PlaylistEntries:
|
|||||||
for index in self.parse_playlist_items(playlist_items):
|
for index in self.parse_playlist_items(playlist_items):
|
||||||
for i, entry in self[index]:
|
for i, entry in self[index]:
|
||||||
yield i, entry
|
yield i, entry
|
||||||
|
if not entry:
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
# TODO: Add auto-generated fields
|
# TODO: Add auto-generated fields
|
||||||
self.ydl._match_entry(entry, incomplete=True, silent=True)
|
self.ydl._match_entry(entry, incomplete=True, silent=True)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Autogenerated by devscripts/update-version.py
|
# Autogenerated by devscripts/update-version.py
|
||||||
|
|
||||||
__version__ = '2022.05.18'
|
__version__ = '2022.06.22.1'
|
||||||
|
|
||||||
RELEASE_GIT_HEAD = 'b14d52355'
|
RELEASE_GIT_HEAD = 'a86e01e74'
|
||||||
|
Loading…
Reference in New Issue
Block a user