LINUX.ORG.RU

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

 ,


1

1

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

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

*Для бородатых линуксоидов, алиасы только через .bashrc/.zshrc.

Я не понял, этот пассаж к чему?

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

Ну, всегда же под любой темой «обязательно и несомненно» кто-то выскажется, что так не надо, а надо так… )

krasnh ★★★★
() автор топика

Extracted 1329 cookies from firefox

Каждый раз тратится время и ресурсы на извлечение тысяч кук, ужас!

минус издержки на склеивание dash-потоков видео и аудио средствами ffmpeg;

Плюс издержки на значительно больший трафик из-за TS контейнера и склейку сегментов.

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

А ИМХО лучше просто в GUI-программе настроить нужный формат, он и будет качаться. Зачем вообще терминал открывать для скачивания видео?

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

Extracted 1329 cookies from firefox

Хотел затереть из выхлопа, но подумал, что никто не докопается. )

Просто не использовать --cookies-from-browser.

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

Зачем вообще терминал

Привычка. Понравилось видео, скопировал ссылку, набрал в терминале несколько букв ) и все скачалось.

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

значительно больший трафик

Возможно, не смотрел в эту сторону. Но мне показалось удобней так при просмотре записанных стримов, когда есть возможность быстро перематывать скучные и не по делу куски. В старом варианте перемотка стала ну очень тормозной.

krasnh ★★★★
() автор топика

Хм… А -f "bestvideo+bestaudio" всё ещё работает как надо, или возможно получить видео или аудио лучше качеством, чем с такой опцией? (меня интересует сохранение в максимально доступном качестве, издержки и скорость второстепенны)

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

всё ещё работает как надо?

Да, дефолтно лучшее качество, и даже не надо прописывать -f 'bv+ba'.
Так что, при скачивании ссылки из этого коммента (там показана таблица форматов) будет лучшее 8k (702+251) качество.

$ yt-dlp 'https://youtu.be/emzsexkpVj4' --simulate
[youtube] Extracting URL: https://youtu.be/emzsexkpVj4
[youtube] emzsexkpVj4: Downloading webpage
[youtube] emzsexkpVj4: Downloading ios player API JSON
[youtube] emzsexkpVj4: Downloading player 81a0fcab
[youtube] emzsexkpVj4: Downloading m3u8 information
[info] emzsexkpVj4: Downloading 1 format(s): 702+251

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

Странно, в моей шпаргалке есть уже 720 (30 фпс, mp4) одним файлом под номером 22. Этот номер больше не актуален? А 95 в шпаргалке — это 720 (30 фпс, mp4) в режиме лайв (этот тоже одним файлом идет). Там номера поменяли что ли?

минус издержки на склеивание dash-потоков видео и аудио средствами ffmpeg

В smplayer+mpv вроде без ffmpeg нормально склеивает.

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

В шапке темы, в самом верху есть ссылка на issues/10206, где как раз и обсуждают, что «Формат 22 извлекается только иногда для некоторых видео».

Не поменяли, а его в принципе может не быть на некоторых видео. Только склейка. Или другая таблица, о чем и тема.

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

Как-то не обратил внимание на причины исчезновения 22. А ведь там черным по белому:

В основном это побочный эффект удаления клиента Android из-за добавления Google сертификации на стороне сервера. Format 22 больше не является достоверно доступным.

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

Я сам удивился. Удалил ffmpeg, кинул в smplayer ссылку на 60 фпс (там не бывает одним файлом) — он показывает и звучит.

papin-aziat ★★★★★
()

У меня вот такая шпора для mp4 (порядок по убыванию удобства прокрутки больших файлов):

301 -- 1080.60 Live
312 -- 1080.60 stream
299 -- 1080.60
300 --  720.60 Live
311 --  720.60 stream
298 --  720.60
96  -- 1080.30 Live
270 -- 1080.30 stream
137 -- 1080.30
22  --  720.30 (with audio)
95  --  720.30 Live
232 --  720.30 stream
136 --  720.30
94  --  480.30 Live
231 --  480.30 stream
135 --  480.30
18  --  360.30 (with audio)
93  --  360.30 Live
230 --  360.30 stream
134 --  360.30
92  --  240.30 Live
229 --  240.30 stream
133 --  240.30
91  --  144.30 Live
269 --  144.30 stream
160 --  144.30
597 --  144.15

Ещё есть похожий под номером 18, наверное такой же как и 22 (написано «with audio»).

Тот же порядок выбора файла/файлов в yt-dlp.conf:

--format 301/312+234/299+140/300/311+234/298+140/96/270+234/137+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

Твой вариант как-то можно в этот конфиг поставить в очередь выбора?

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

Ещё есть похожий под номером 18, наверное такой же как и 22 (написано «with audio»).

Да, такой же, но 360p.

Твой вариант как-то можно в этот конфиг поставить в очередь выбора?

Чет сложно у тебя. ) Не, так не получится, это разные таблицы с разной нумеровкой форматов.

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

mpv склейка не нужна … dash

Всегда считал, что это работа ffmpeg, тем более видя его упоминание в выхлопе mpv. Удивительное рядом…

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

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

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

Так он тебе и так дефолтом выдаст от максимального и без подобной шпоры. Только прописать условие mp4 Типа, ytdl-raw-options=format-sort="codec:h264" в mpv.conf.

А для yt-dlp - --format-sort="codec:h264"


*format-sort

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

Надо смотреть на практике, возможно условие придется расширить. Но не сложно добиться, чтобы качество шло от максимального 1080p 60fps в сторону уменьшения, с кодеком h264 и выходным контейнером mp4.

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

Я понимаю, что в результате будет короткая строчка, но у меня сходу не получилось разобраться, а вот мой вариант простой как пробка: в выхлопе -F есть числа — выбирай нужные и всё.

papin-aziat ★★★★★
()

В последнее время ютуб затеял какую-то реорганизацию и стал убирать из некоторых своих видео формат 22 (720p, единый файл, не dash). Может я наговариваю, конечно, на ютуб, но формат best (720p) всегда был, имхо.

Нет, так оно и есть, буквально неделю-другую, как стало по другому - подсовывается 480 вместо 720. В чем причина так и не понял.

Я смотрю видео через smtube со страницы youtube. Там есть возможность делать правки строк запуска для плейеров. Если задать в параметрах напрямую mpv u%, без best, и в настройках smtube сделать 720 по умолчанию, то показывает 720.

Оттуда же через smtube я закачиваю, прописав в параметрах отдельного «плейера» строку, нечто вроде:

-o %(title)s.%(ext)s -f 22/bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best -P /home/vova/Видео/ %u
My_quest ★★★★★
()
Последнее исправление: My_quest (всего исправлений: 1)

Это может быть полезым, хотя я обычно качаю 133+139 формат а дальше перекачиваю по необходимости.

kirill_rrr ★★★★★
()

наоборот всегда выбираю webm (видео+аудио), весит оно меньше, а по качеству картинки лучше
расстраиваюсь когда в старых видео его нет

z0idator
()

Очевидно, что пытаться брать видео по флагу формата это как напрашиваться на внезапный и болезненный полом скрипта. В yt-dlp выбор видео/аудио лучше производить по признакам.

Bfgeshka ★★★★★
()

YT-DLP

Зачем так кричать? :)

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

выбор видео/аудио лучше производить по признакам.

Сложно спорить с очевидным. ) Сам всегда скачивал с -f b и получал искомый 22 (720p).

В соседней теме ТС’у подсказывал, как получить нужные форматы по «признакам» с -S 'res:1080,codec:avc:m4a,+fps'.

krasnh ★★★★
() автор топика

меня калит другая проблема. Ютуб через yt-dlp ограничивает скорость загрузки 300-400КБ/с.

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

Ютуб режет по IP?

Тема, где ТС жаловался на низкую скорость, но с прокси было нормально. В конце треда его окончательно забанили на ютубе. )

upd. Само собой версия yt-dlp последняя? Как вариант, переключиться на nightly, Фикс yt-dlp dzen.ru который сломался 2024-04-10 (комментарий).

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

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

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

Попробуй вариант с aria2c для параллельной загрузки, некоторым это помогает (команда с issues/7716, что давал выше):

--downloader aria2c --downloader-args 'aria2c:--continue --max-concurrent-downloads=30 --max-connection-per-server=16 --split=30 --min-split-size=1M'
krasnh ★★★★
() автор топика

А есть видео где у какого нибудь идейного гуглера полыхает пукан от всяких альтернативных клиентов?

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

Не помогает. Всё то же самое.

Причём не важно, какой формат смотришь. Очень похоже, что их алгоритм это контролирует и даёт сорость, которая чуть медленнее воспроизведения.

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

В моем случае, с некоторых пор, что-то стало хуже при просмотре ютуба (mpv) - перемотка просто отвратительна, а с новой таблицей - замечательно.

Мелочь, но неприятно.

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

Extracted 1329 cookies from firefox

Каждый раз тратится время и ресурсы на извлечение тысяч кук, ужас!

И зачем? Вам дали анонимную качалку с возможностью класть болт на ToS, зачем специально палиться-то?

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

Это вопрос ко мне, ) специально включал --cookies-from-browser, точно не помню уже зачем, но вроде, чтобы свои плейлисты смотреть, которые не расшарены.

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

Набери ldd /usr/bin/mpv и увидишь у него в зависимостях libavformat и похожее - это и есть ffmpeg если ты не знал.

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

Любой многочасовой стрим (не онлайн). Возможно это лишь мой непостижимый частный случай. )

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