LINUX.ORG.RU

YT-DLP, очевидное-невероятное

 ,


9

4

В последнее время ютуб затеял какую-то реорганизацию и стал убирать из некоторых своих видео формат 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 и не зависит от таблицы форматов)
★★★★

Проверено: hobbit ()
Последнее исправление: krasnh (всего исправлений: 8)

Ответ на: комментарий от krasnh

А попробуй тоже видео крутить с новой таблицей, удивишься, отзывчивость прям как в браузере

Не подтверждаю! Такой вариант:

mpv --ytdl-format=95 --ytdl-raw-options=extractor-arg="youtube:player_client=mediaconnect" https://youtu.be/cvUuGVUp9Vg --no-config

прокручивается так же плохо как и «мой» вариант, настроенный на 720. Тупо одно и то же.

А собственно, что должно измениться? Твой 95 (из новой таблицы) есть одним файлом то же самое:

95  mp4 1280x720 30 | ~ 9.82GiB 2644k m3u8 | avc1.4d401f mp4a.40.2 [ru]
232 mp4 1280x720 30 | ~ 9.82GiB 2644k m3u8 | avc1.4D401F 2644k video only

Что доказывает, что склейка с аудио на глаз не даёт никаких подтормаживаний. Хотя и странно, что размер у них одинаковый.

papin-aziat ★★★★★
()
Ответ на: комментарий от papin-aziat

Не подтверждаю

Эх, а я думал не только у меня эффект, и уже хотел в шапку темы добавить четвертым пунктом в «Для чего все это надо?». Но раз не подтверждается…

upd. Хотя я не ожидал, что ты будешь сравнивать тоже с hls (m3u8), думал, с привычным mp4.

krasnh ★★★★
() автор топика
Последнее исправление: krasnh (всего исправлений: 2)
Ответ на: комментарий от krasnh

Да, увы, в компах чудес не бывает.

Этот тест доказывает другое — «мой» вариант на твоём компе не будет тормозить.

papin-aziat ★★★★★
()
Ответ на: комментарий от krasnh

Хотя я не ожидал, что ты будешь сравнивать тоже с hls (m3u8), думал, с привычным mp4.

Вот тут ты и попал в непонятки 😁

Можешь спокойно юзать мой классический вариант и всё будет как надо без лишних ключей.

В yt-dlp.conf можешь попробовать добавить

--format 300/311+234/298+140/22/95/232+234/136+140/94/231+234/135+140/18/93/230+234/134+140/92/229+234/133+140/91/269+234/160+140/597+140

и потестить на любых видосах, оно тебе выдаст строго mp4 не более 720.60, правда в твоём случае, чтобы тебе вообще не предлагались простые большие видеофайлы, надо удалить:

298+140
22
136+140
135+140
134+140
133+140
160+140
597+140
papin-aziat ★★★★★
()
Последнее исправление: papin-aziat (всего исправлений: 2)
Ответ на: комментарий от krasnh

Как я понимаю. Лучшая прокрутка m3u8 (стрим) достигается за счёт какой-то там фрагментации файла, тогда как тупо целый видос (mp4) надо подкачивать более крупными блоками, отсюда тормоза у последнего и отзывчивость первого при прокрутке

papin-aziat ★★★★★
()
Ответ на: комментарий от papin-aziat

А сравни с классическим h264, который большинство юзеров и используют?

$ mpv --ytdl-raw-options="[format-sort]=[res:720,codec:avc:m4a]" 'https://youtu.be/cvUuGVUp9Vg' --no-config

Все-таки не оставляю надежду дополнить статью. )

krasnh ★★★★
() автор топика
Ответ на: комментарий от krasnh

Я оставил форматы с большими вялыми файлами на случай, если других не окажется. Давненько настраивал: просто смотрел по ключу -F на самых разных видео (старых и новых) чего предлагают и на основе этой инфы сформировал свой конфиг. Возможно имеет смысл оттуда выкинуть эти классические h264. Почему оставил, уже не помню, может таки попадались видосы, где предлагали только их.

papin-aziat ★★★★★
()
Ответ на: комментарий от papin-aziat

Вот!11 Все, отредактировал статью, если что, буду ссылаться на тебя. )

Я никогда раньше не воспроизводил с hls, только с h264, поэтому до сих пор так удивляюсь эффекту.

krasnh ★★★★
() автор топика
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

В результате-то есть опции, которые можно поместить в yt-dlp.conf, чтобы получать альтернативную таблицу и сформировать последовательность как у меня в конфиге?

papin-aziat ★★★★★
()

ну ты и простыню накатал :)

У меня по твоей ссылке видео со звуком с айдишником 18. Всегда так было: он то 18, то 22. От чего это зависит, я хз. Но я никогда не парился опциями в yt-dlp кроме -F, после чего -f + нужный айдишник.

Gonzo ★★★★★
()
Последнее исправление: Gonzo (всего исправлений: 2)
Ответ на: комментарий от burato

Версия yt-dlp обновлена. Да, именно режет. На разных айпи по разному, но больше 1МБ/с нигде не выдаёт

Скорость 1Мб только вначале скачивания, затем падает до 100кБ, а временами и до 40 кБ/с.

Вдобавок если хочешь скачать плейлист целиком, то скачивает только первый ролик и останавливается. Весь лист не дает скачать.

Chord ★★★★
()
Ответ на: комментарий от burato

Возможно, это реакция ютуба на частое массовое скачивание.

Можно было бы скачивать с invidious, но yt-dlp перенаправляет ссылки на ютуб.

krasnh ★★★★
() автор топика
22 августа 2024 г.
Ответ на: комментарий от krasnh

18 (360p) уже очень и очень мало в 2024.

Только что скачал 30 видео, половина — нынешнего года. 18 есть везде.

Достоинством 22 формата было то, что он часто был меньше объёмом и выше качеством видео, чем 136. (Из-за неоднократного пережатия?) 96, судя по таблицам, раза в 2 больше. (Или таблицы врут?) Склейка ffmpeg-ом или средствами самого yt-dlp (наблюдал в системах без ffmpeg) происходит почти мгновенно и на качество не влияет.

question4 ★★★★★
()
Ответ на: комментарий от temak

в высоком качестве

Одним файлом - 18 (360p), 22 (720p). И все. Причем 22 - исчезающий вид.
Правда в новой таблице, что я показал в шапке темы, помимо 95 (720p) есть еще и 96 (1080p) одним файлом.
Но как верно было замечено в обсуждении, новая таблица дает больший размер файла (m3u8). Так что все это «тщетность и суета».

Суть, помимо единого файла не самого большого размера, была в удобстве - набираешь в терминале yt-dlp -f b "url" и качаешь 720p. Быстрота набора команды, плюс легко запомнить нужный параметр b.
Сейчас аналог простенького -f b - длиннющая -S 'res:720,codec:avc:m4a,+fps', скачивающая аудио и видео, и склеивающая их.

krasnh ★★★★
() автор топика
Ответ на: комментарий от krasnh

Сейчас аналог простенького -f b - длиннющая -S ‘res:720,codec:avc:m4a,+fps’, скачивающая аудио и видео, и склеивающая их.

Достаточно указать номера видео- и аудиодорожек через плюс без пробелов. Например -f 248+249 или -f 315+139. Работает даже под Андроидом. Единственная проблема — каждый раз смотреть через -F что доступно.

question4 ★★★★★
()
Ответ на: комментарий от question4

Единственная проблема

Поэтому, «в лучших домах Лондона и Парижа» так не делается. )

Проще алиас прописать в yt-dlp.conf, например --alias 720b '--format-sort="res:720,codec:avc:m4a,+fps"'. Команда будет yt-dlp --720b "url".

krasnh ★★★★
() автор топика
Ответ на: комментарий от krasnh

А если писать alias, тогда какая разница?

Но я пользуюсь -F, так как далеко не все интересные мне видео имеют 720.

question4 ★★★★★
()
Ответ на: комментарий от question4

Но ведь моя строка универсальна. Попробуй, и не удивлюсь, что во всевозможных вариантах ссылок, она всегда выберет именно то, что нужно тебе, а значит незачем каждый раз водить пальцем по таблице форматов (-F).

krasnh ★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.