YT-DLP, очевидное-невероятное
В последнее время ютуб затеял какую-то реорганизацию и стал убирать из некоторых своих видео формат 22 (720p, единый файл, не dash). Может я наговариваю, конечно, на ютуб, но формат best (720p) всегда был, имхо.
Оказывается есть возможность получать другую таблицу форматов, отличную от дефолтной. У yt-dlp есть параметр --extractor-arg "youtube:player_client=mediaconnect"
([youtube] Format 22 is only sometimes extracted for some videos #10206).
Дефолтная таблица форматов:
$ yt-dlp -F 'https://youtu.be/eUyr9MJnj4w'
Extracting cookies from firefox
Extracted 1328 cookies from firefox
[youtube] Extracting URL: https://youtu.be/eUyr9MJnj4w
[youtube] eUyr9MJnj4w: Downloading webpage
[youtube] eUyr9MJnj4w: Downloading ios player API JSON
[youtube] eUyr9MJnj4w: Downloading player 5b22937f
[youtube] eUyr9MJnj4w: Downloading m3u8 information
[info] Available formats for eUyr9MJnj4w:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3 mhtml 48x27 0 │ mhtml │ images storyboard
sb2 mhtml 80x45 1 │ mhtml │ images storyboard
sb1 mhtml 160x90 1 │ mhtml │ images storyboard
sb0 mhtml 320x180 1 │ mhtml │ images storyboard
233 mp4 audio only │ m3u8 │ audio only unknown Default
234 mp4 audio only │ m3u8 │ audio only unknown Default
139 m4a audio only 2 │ 1.32MiB 49k https │ audio only mp4a.40.5 49k 22k low, m4a_dash
249 webm audio only 2 │ 1.30MiB 48k https │ audio only opus 48k 48k low, webm_dash
250 webm audio only 2 │ 1.70MiB 63k https │ audio only opus 63k 48k low, webm_dash
140 m4a audio only 2 │ 3.51MiB 129k https │ audio only mp4a.40.2 129k 44k medium, m4a_dash
251 webm audio only 2 │ 3.51MiB 130k https │ audio only opus 130k 48k medium, webm_dash
602 mp4 256x144 15 │ ~ 2.33MiB 86k m3u8 │ vp09.00.10.08 86k video only
394 mp4 256x144 30 │ 1.68MiB 62k https │ av01.0.00M.08 62k video only 144p, mp4_dash
269 mp4 256x144 30 │ ~ 4.16MiB 154k m3u8 │ avc1.4D400C 154k video only
160 mp4 256x144 30 │ 1.55MiB 57k https │ avc1.4D400C 57k video only 144p, mp4_dash
603 mp4 256x144 30 │ ~ 4.18MiB 154k m3u8 │ vp09.00.11.08 154k video only
278 webm 256x144 30 │ 2.35MiB 87k https │ vp9 87k video only 144p, webm_dash
395 mp4 426x240 30 │ 2.70MiB 100k https │ av01.0.00M.08 100k video only 240p, mp4_dash
229 mp4 426x240 30 │ ~ 5.70MiB 211k m3u8 │ avc1.4D4015 211k video only
133 mp4 426x240 30 │ 2.35MiB 87k https │ avc1.4D4015 87k video only 240p, mp4_dash
604 mp4 426x240 30 │ ~ 7.76MiB 287k m3u8 │ vp09.00.20.08 287k video only
242 webm 426x240 30 │ 3.59MiB 133k https │ vp9 133k video only 240p, webm_dash
396 mp4 640x360 30 │ 5.02MiB 186k https │ av01.0.01M.08 186k video only 360p, mp4_dash
230 mp4 640x360 30 │ ~ 11.41MiB 421k m3u8 │ avc1.4D401E 421k video only
134 mp4 640x360 30 │ 4.13MiB 153k https │ avc1.4D401E 153k video only 360p, mp4_dash
18 mp4 640x360 30 2 │ ≈ 7.64MiB 282k https │ avc1.42001E mp4a.40.2 44k 360p
605 mp4 640x360 30 │ ~ 15.03MiB 555k m3u8 │ vp09.00.21.08 555k video only
243 webm 640x360 30 │ 6.06MiB 224k https │ vp9 224k video only 360p, webm_dash
397 mp4 854x480 30 │ 8.40MiB 310k https │ av01.0.04M.08 310k video only 480p, mp4_dash
231 mp4 854x480 30 │ ~ 15.17MiB 561k m3u8 │ avc1.4D401F 561k video only
135 mp4 854x480 30 │ 6.09MiB 225k https │ avc1.4D401F 225k video only 480p, mp4_dash
606 mp4 854x480 30 │ ~ 20.80MiB 769k m3u8 │ vp09.00.30.08 769k video only
244 webm 854x480 30 │ 8.50MiB 314k https │ vp9 314k video only 480p, webm_dash
398 mp4 1280x720 30 │ 14.51MiB 536k https │ av01.0.05M.08 536k video only 720p, mp4_dash
232 mp4 1280x720 30 │ ~ 24.57MiB 908k m3u8 │ avc1.4D401F 908k video only
136 mp4 1280x720 30 │ 11.09MiB 410k https │ avc1.4D401F 410k video only 720p, mp4_dash
609 mp4 1280x720 30 │ ~ 31.59MiB 1167k m3u8 │ vp09.00.31.08 1167k video only
247 webm 1280x720 30 │ 13.61MiB 503k https │ vp9 503k video only 720p, webm_dash
399 mp4 1920x1080 30 │ 24.33MiB 899k https │ av01.0.08M.08 899k video only 1080p, mp4_dash
270 mp4 1920x1080 30 │ ~ 73.64MiB 2721k m3u8 │ avc1.640028 2721k video only
137 mp4 1920x1080 30 │ 39.45MiB 1458k https │ avc1.640028 1458k video only 1080p, mp4_dash
614 mp4 1920x1080 30 │ ~ 53.22MiB 1967k m3u8 │ vp09.00.40.08 1967k video only
248 webm 1920x1080 30 │ 26.78MiB 990k https │ vp9 990k video only 1080p, webm_dash
616 mp4 1920x1080 30 │ ~131.47MiB 4858k m3u8 │ vp09.00.40.08 4858k video only Premium
400 mp4 2048x1152 30 │ 60.94MiB 2252k https │ av01.0.08M.08 2252k video only 1080p, mp4_dash
620 mp4 2048x1152 30 │ ~151.23MiB 5589k m3u8 │ vp09.00.50.08 5589k video only
271 webm 2048x1152 30 │ 82.90MiB 3063k https │ vp9 3063k video only 1080p, webm_dash
Новая таблица форматов с единым файлом/потоком для 720p (и 1080p):
$ yt-dlp -F 'https://youtu.be/eUyr9MJnj4w' --extractor-arg "youtube:player_client=mediaconnect"
Extracting cookies from firefox
Extracted 1329 cookies from firefox
[youtube] Extracting URL: https://youtu.be/eUyr9MJnj4w
[youtube] eUyr9MJnj4w: Downloading webpage
[youtube] eUyr9MJnj4w: Downloading mediaconnect player API JSON
[youtube] eUyr9MJnj4w: Downloading m3u8 information
[info] Available formats for eUyr9MJnj4w:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3 mhtml 48x27 0 │ mhtml │ images storyboard
sb2 mhtml 80x45 1 │ mhtml │ images storyboard
sb1 mhtml 160x90 1 │ mhtml │ images storyboard
sb0 mhtml 320x180 1 │ mhtml │ images storyboard
140 m4a audio only 2 │ 3.51MiB 129k https │ audio only mp4a.40.2 129k 44k medium, m4a_dash
160 mp4 256x144 30 │ 1.55MiB 57k https │ avc1.4d400c 57k video only 144p, mp4_dash
91 mp4 256x144 30 │ ~ 4.16MiB 154k m3u8 │ avc1.4d400c mp4a.40.5
133 mp4 426x240 30 │ 2.35MiB 87k https │ avc1.4d4015 87k video only 240p, mp4_dash
92 mp4 426x240 30 │ ~ 5.70MiB 211k m3u8 │ avc1.4d4015 mp4a.40.5
134 mp4 640x360 30 │ 4.13MiB 153k https │ avc1.4d401e 153k video only 360p, mp4_dash
93 mp4 640x360 30 │ ~11.41MiB 421k m3u8 │ avc1.4d401e mp4a.40.2
18 mp4 640x360 30 2 │ ≈ 7.64MiB 282k https │ avc1.42001E mp4a.40.2 44k 360p
135 mp4 854x480 30 │ 6.09MiB 225k https │ avc1.4d401f 225k video only 480p, mp4_dash
94 mp4 854x480 30 │ ~15.17MiB 561k m3u8 │ avc1.4d401f mp4a.40.2
136 mp4 1280x720 30 │ 11.09MiB 410k https │ avc1.4d401f 410k video only 720p, mp4_dash
95 mp4 1280x720 30 │ ~24.57MiB 908k m3u8 │ avc1.4d401f mp4a.40.2
137 mp4 1920x1080 30 │ 39.45MiB 1458k https │ avc1.640028 1458k video only 1080p, mp4_dash
96 mp4 1920x1080 30 │ ~73.64MiB 2721k m3u8 │ avc1.640028 mp4a.40.2
Как скачивать 720p (формат единым файлом/потоком):
$ yt-dlp -f 95 'https://youtu.be/eUyr9MJnj4w' --extractor-arg "youtube:player_client=mediaconnect"
Как воспроизводить 720p (формат единым файлом/потоком):
$ mpv --ytdl-format=95 'https://youtu.be/eUyr9MJnj4w' --ytdl-raw-options=extractor-arg="youtube:player_client=mediaconnect"
Кроме того:
- Для mpv можно создать профиль [youtube] в mpv.conf, где прописать условие срабатывания на ютубных ссылках, типа
profile-cond=path:match('youtu%.?be') ~= nil
илиprofile-cond=path:find('youtu%.?be')
(1).
И добавив в профиль параметрytdl-raw-options=extractor-arg="youtube:player_client=mediaconnect"
иytdl-format=95/best
. - Для yt-dlp, чтобы при наборе команды в терминале мучительно долго не вспоминать указанную в начале заметки длиннющую опцию, можно создать алиас. В конфиге yt-dlp прописываем, как пример,
--alias 95f '-f 95 --extractor-arg="youtube:player_client=mediaconnect"'
. Теперь, чтобы скачать, пишемyt-dlp --95f 'https://youtu.be/eUyr9MJnj4w'
.
Для чего все это надо?
- минус издержки на склеивание dash-потоков видео и аудио средствами ffmpeg;
- возможность отправлять ссылку на стандартный вывод (stdout) какого-либо плеера, например vlc;
- плюс, оказывается, и для 1080p существует подобный формат единого файла.
- лучшая отзывчивость при перемотке во внешнем плеере (возможно верно для всех hls и не зависит от таблицы форматов)