LINUX.ORG.RU

Избранные сообщения etar125

Новый платиновый тред ЛОР-а?

Форум — Talks

Хотя формально уже суббота, но тем не менее.

Помните ли вы те благословенные времена, когда деревья были выше, трава зеленее а на ЛОР-е блистали Царь, Метапрог и Космоспек? Я уж решил что все, старость-не-радость, увяли помидоры, но эта пятница сумела лично меня удивить. В казалось бы скучный, интересный только узким специалистам тред Чему равен логарифм корня из двух в IEEE754 (fp32)? ворвался подобно ракете наш новый Чемпион - Космический Инженер и Вычислитель, бескромпромиссный расставитель клоунов @Frohike! Конечно ему пока далеко до прошлых легенд ЛОР-а по харизме, но тем не менее я чувствую большой потенциал.

Вот список цитат которые ИМНО достойны мемориза. Начало тут. Изначально речь шла о том, что в одной из библиотек неверно считается выражение log(sqrt(2)):


Разве не очевидно, что любые операции с иррациональными числами приводят к приближённым результатам?

В чём проблема «логарифм корня из двух»? Не написали по какому основанию логарифм, но это издержки постсоветского образования, ничего не поделаешь

В том что он неправильно считается в newlib?

Это не проблема, он нигде не будет считаться правильно, по причине фундаментального свойства иррационального числа.


Нет разницы куда округлять, погрешность результата будет в пределах плюс/минус точности вычислений. Чем больше итераций, тем больше ошибка округления будет накапливаться в любом случае. Это значит то, что совершенно без разницы 0x3eb17217 или 0x3eb1730d (про значение log(sqrt(2))

Да, я тоже реализую космическую программу, нет разницы куда и как округлять. А не надо вычислять экспоненту, в этом нет никакого практического смысла. Вы теоретик что ли?

Скажем так, в численных методах я понимаю кратно больше вас, это для справки.

Доказательства в студию. Статьи в профильных журналах…

Первая форма, ну вы понимаете.


в какой именно области космической программы не имеет никакого значения число знаков после запятой?

Да в любой.

М. Ю. Овчинников ВВЕДЕНИЕ В ДИНАМИКУ КОСМИЧЕСКОГО ПОЛЁТА, Число обусловленности — изучайте до просветления.

Друг мой ситный, это дармоеды-теоретики,никакого отношения к программе не имеют. С тем же успехом можете почитать статьи про рептилоидов и масонов, отоношение к реальным проектам ровно такое же.

В программе Аполлон абсолютно плевать было на точность вычислений, корректировка курса была по наблюдаемым объектам, точнее если Луну видно в иллюминатор, значит летим правильно, не видно - корректируем курс руками. На «Аполлонах» этот сраный калькулятор, де-факто, только жрал электричество и обогревал пространство, больше он нафиг был не нужен.

Любой калькулятор имеет ОС реального времени

ТС неопытный и толком не знает что ему нужно, а ЭВМ всё сделала как надо оптимальным путём, ибо нет никакой значимой разницы между желанием пользователя и результатом машины. (про то, что log(sqrt(2)) в newlib посчитан с ошибкой в последних 12ти битах мантиссы из 23х).

Вы телепат?👽

Хуже, я Инженер.

(c) @Frohike, все права защищены.

 

AntonI
()

Вопросы по созданию git-репозитория своего проекта

Форум — Development

Какой хостинг репозиториев выбрать? НЕ github! Какой-нибудь более открытый и свободный. Savannah?

Какими командами инициировать создание нового проекта?
Никогда не пользовался git всерьёз, делал только git clone каких-то чужих проектов.
Т.е. нужно залить имеющийся тарбол в новый проект и создать необходимые ветки.

 , ,

teod0r
()

Включение фичи регистронезависимого режима ext4

Статьи — Игры

Зачем это может быть нужно?

Ответ простой — для виндовых игр. Например, авторы модов часто для обливиона, морровинда не заморачиваются с тем, чтобы названия директорий в моде было в том же регистре что и в игре. Таким образом, при подключении модов, игра просто не будет видеть файлы этих модов, потому что она будет искать их по тому пути, который прописан в игре. Аналогично, например, и с Crusader Kings 2, пусть она и нативная. Там моды приходиться портировать под линукс, чтобы все файлы и директории назывались в одном и том же регистре.

( читать дальше... )

 

vbcnthfkmnth123
()

GNU libunistring 1.4

Новости — GNU's Not Unix
Группа GNU's Not Unix

Состоялся релиз GNU libunistring 1.4 — библиотеки, которая позволяет работать с Unicode-строками в программах на C, а также со строками C в соответствии со стандартом Unicode.

Изменения в этом выпуске:

  • Алгоритмы и таблицы с данными обновлены до стандарта Unicode 17.0.
  • Исправлены проблемы с работой функций u*_grapheme_next и u*_grapheme_prev для символов Indic, Emoji и индикаторов региона.

Проект поддерживает UTF-8, UTF-16 и UTF-32. Распространяется на условиях LGPL 2.1.

>>> Код на savannah.gnu.org

>>> Сообщение в списке рассылки

 , libunistring,

cetjs2
()

HDD редко издает тихие странные звуки

Форум — Linux-hardware

При этом в dmesg:

[ 2853.507915] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 2853.510098] ata1.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
[ 2853.510110] ata1.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
[ 2853.513166] ata1.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
[ 2853.513178] ata1.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
[ 2853.514046] ata1.00: configured for UDMA/133
[ 2893.485021] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 2893.487183] ata1.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
[ 2893.487195] ata1.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
[ 2893.490195] ata1.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
[ 2893.490206] ata1.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
[ 2893.491062] ata1.00: configured for UDMA/133
и вчера успел заскринить вообще такое https://ibb.co/rKTkwK9G
В чем причина, как вы думаете? Вероятно это продолжение той темы - KARAUL! POMER HDD?

Fix (но не окончательный): HDD редко издает тихие странные звуки (комментарий)

 ,

superuser
()

программа из одной строчки ни Perl

Форум — Development

помогите, пожалуйста исправить такую программу:

cat "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'

- не печатает

anonymous
()

Linux и eSIM

Статьи — Мобильные устройства

Понадобилось тут завести модем с eSIM в онтопике. Использовал модем Qualcomm® Snapdragon™ X16 LTE Modem на планшете Microsoft Surface Go 2 на Debian GNU/Linux 13 (trixie).

( читать дальше... )

Перемещено hobbit из desktop

 ,

ann_lortemp2
()

LOR до Dimez`a :)

Галерея — Скриншоты

Было это братцы давным-давно. Черные силы MS пришли войной… @Dimez, сорри, кликбейтный заголовок :)

 

Old-Old-Cat
()

Анонсирована замена Интернета: Betanet

Форум — Talks

Наткнулся (внезапно на ютубе, но там нечего смотреть).

Суть: Betanet это как тор и I2P но без их недостатков:

  1. обязательная маскировка трафика под обычный интернет

  2. Не опирается на волонтёров: релеи получают оплату за транзит трафика (криптой)

  3. развитие протокола управляется голосованием.

Приглашают разработчиков, предлагают деньги (си, раст)

Я пока не всё понял, как у них что будет работать.

Зачем нужен неподцензурный интернет, полагаю, не надо объяснять.

вот спеки поректа: https://ravendevteam.org/betanet/

 , ,

legolegs
()

У меня лор перестал работать, через впн работает

Форум — Linux-org-ru
traceroute linux.org.ru
traceroute to linux.org.ru (178.248.233.6), 70 hops max, 40 byte packets
traceroute: sendto: Permission denied
 1 traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *
 2 traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *
 3 traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied
 *traceroute: wrote linux.org.ru 40 chars, ret=-1
traceroute: sendto: Permission denied

...
ping linux.org.ru
PING linux.org.ru (178.248.233.6): 56 data bytes
64 bytes from 178.248.233.6: icmp_seq=0 ttl=55 time=61.108 ms
64 bytes from 178.248.233.6: icmp_seq=1 ttl=55 time=61.143 ms
64 bytes from 178.248.233.6: icmp_seq=2 ttl=55 time=61.183 ms
64 bytes from 178.248.233.6: icmp_seq=3 ttl=55 time=61.639 ms
^C
curl -k -v  https://178.248.233.6/
*   Trying 178.248.233.6:443...
* connect to 178.248.233.6 port 443 from 192.168.1.7 port 49881 failed: Operation timed out
* Failed to connect to 178.248.233.6 port 443 after 75000 ms: Could not connect to server
* closing connection #0
curl: (28) Failed to connect to 178.248.233.6 port 443 after 75000 ms: Could not connect to server
nslookup www.linux.org.ru
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
Name:   www.linux.org.ru
Address: 178.248.233.6
nslookup www.linux.org.ru ns1.selectel.org
nslookup: couldn't get address for 'ns1.selectel.org': not found
nslookup www.linux.org.ru ns2.selectel.org
nslookup: couldn't get address for 'ns2.selectel.org': not found
nslookup www.linux.org.ru ns3.selectel.org
nslookup: couldn't get address for 'ns3.selectel.org': not found
nslookup www.linux.org.ru ns4.selectel.org
nslookup: couldn't get address for 'ns4.selectel.org': not found

 

Clockwork
()

Бинарные сборки Wine

Форум — General

Часто бывает так, что в очередной минорной версии разработчики Wine что-нибудь ломают для одной конкретной программы или игры, при этом все остальные программы работают нормально. И пользователю приходится либо откатываться до предыдущей версии Wine (это возможно не во всех дистрибутивах), ставить PlayOnLinux, что не всем нравится, либо компиллировать самому.

Чтобы предотвратить это неудобство, я с некоторых пор делаю бинарные сборки Wine и выкладываю их для всех желающих. Располагаются они здесь. Когда задумывал это, то вдохновлялся примером PlayOnLinux, которые тоже делают собственные бинарные сборки Wine, но обладают некоторыми недостатками:

  1. Выходят нерегулярно.
  2. Скрипта, который их формирует, я так и не нашел.
  3. Мне нужна еще версия с патчами Staging, а они не для каждой версии их делают.

Поэтому я несколько месяцев назад написал свой собственный скрипт, c помощью которого можно скомпиллировать любую версию Wine, в том числе на выбор, со staging патчами или без.

Преимущество бинарных сборок:

  1. Идут практически любом современном дистрибутиве. За абсолютно все дистрибутивы любой давности ручаться не буду, сам проверял только на паре дистрибутивов, поэтому хотелось бы чтобы вы их протестировали и подтвердили или опровергли это утверждение.
  2. Для использования не требуется ничего, установленных зависимостей для Wine. Сам системный Wine при этом даже необязателен.
  3. Можно иметь хоть с десяток разных версий Wine для разных программ и с легкостью переключаться между ними без каких-то переустановок. Чтобы установить бинарную сборку, достаточно лишь ее распаковать в любой каталог.

В процессе создания бинарных сборок я целенаправленно не применял никаких сторонних патчей. В версии с патчами Staging присутствует только набор патчей из Staging и больше ничего. В ванильной версии не применяются никакие патчи. Даже несмотря на то, что начиная с какой-то версии из ветки 1.9.x Wine стало невозможно скомпиллировать с помощью gcc 5.3.0 и патч довольно оперативно написали, я предпочел откатиться до gcc 4.8.5, чем применять этот патч. Сомневающимся могу порекомендовать скачать мой скрипт, собрать Wine самому с помощью gcc 4.8.5 и после чего сравнить свой хэш получившегося архива с моим.

Для чего эта тема? Во-первых, для информации. Может кому-нибудь пригодятся мои бинарные сборки, мне будет приятно. И еще протестируйте их пожалуйста на своих разных дистрибутивах разных версий, чтобы посмотреть, действительно ли они дистронезависимые или нет?

И еще раз ссылки:

  1. Сайт с бинарными сборками Wine
  2. Скрипт, по которому они формируются

P.S. Перед использованием скрипта отредактируйте его и измените содержимое переменных WORKDIR (каталог, в котором будет компиллироваться Wine) и GCC_VERSION (версия GCC, которая применяется для сборки) в соответствии со своими предпочтениями. А то там сейчас стоят мои значения.

Обновлено 04.02.17:
В связи с тем, что после выхода Wine 2.0 сменилась нумерация промежуточных версий (промежуточная версия теперь 2.1 и все исходники будут лежать в папке 2.x и еще они сменили формат архива), то скрипт для сборки разделен. Скрипт wine_build_1.9.x-2.0.sh - для сборки всех предыдущих версий Wine до версии 2.0 включительно и wine_build-2.x.sh - для всех версий после 2.0. Да, это неудобно. Но это лучше, чем если бы в одном скрипте писать кучу костылей по парсингу мажорной версии, минорной версии и их какого-то совмещения. Размер скрипта значительно увеличился бы, он стал бы трудночитаемым и вряд ли это решение было бы совсем безглючным.

Обновлено 25.10.18:
Я закрываю формирование бинарных сборок в связи с тем, что Wine в последнее время оброс сторонними патчсетами, вроде esync, да и самому мне это все надоело. К тому же появился Steam Play. Все предыдущие сборки вы можете скачать отсюда, но новые формироваться вряд ли будут. Там же вы найдете скрипт, с помощью которого можно будет сделать свою собственную сборку.

Обновлено 24.10.20:
В силу некоторых причин пришлось снова расчехлить мой скрипт для формирования бинарных сборок. Только сами бинарные сборки я выкладывать не буду: мне и влом, и места на хостинге жалко, да и проблемы совместимости с разными версиями glibc в разных дистрибутивах.
Вместо этого я адаптировал сам скрипт согласно современным реалиям и выложил его на GitHub - пользуйтесь, если хотите. Скрипт пришлось практически полностью переписать, убрать костыли, а заодно и поддержку сборки из git. Для сборки из git надо писать отдельный скрипт, поскольку там другие пути и сценарии распаковки и сборки. Может займусь этим когда-нибудь.

 ,

Rinaldus
()

Как правильно создать deb-пакет приложения, чтобы он одновременно работал и в x11, и в wayland?

Форум — Development

Здравствуйте,

Toolkit-ы не использую.

Самый очевидный способ - это при сборке пускового файла поставить на компьютер все нужные библиотеки x11 и wayland одновременно. Это позволяет собрать результат, но это также требует в зависимостях пакета указывать runtime-версии всех нужных библиотек опять же и под x11, и под wayland. В результате при установке пакета в систему влетят библиотеки из другого дисплейного менеджера, что вроде бы некритично, но может и не очень красиво выглядит. Это правильный способ или можно всё решить как-то изящнее? Например, можно сделать экспорт функций из runtime-библиотек, тогда эти библиотеки не будут явно требоваться при старте приложения. Плюс вроде в этом есть, но как-то всё это стрёмно выглядит. И если экспорт функций в x11 прокатывает без проблем

void* handle=dlopen("libX11.so.6", RTLD_LAZY);
    if (!handle)
    {
        fprintf(stderr, "Failed to load libX11.so.6: %s\n", dlerror());
        return false;
    }
    exp_XConvertSelection=(PFN_XConvertSelection)dlsym(handle, "XConvertSelection");
    exp_XGetWindowAttributes=(PFN_XGetWindowAttributes)dlsym(handle, "XGetWindowAttributes");

, то wayland вообще обрубил меня на первой же функции:

uint32_t wlnd_proxy_get_version(struct wl_proxy *proxy)

Даже выбросив все обращения на функцию wlnd_proxy_get_version в программе я всё равно получаю на ней ошибку линковки, потому что wayland где-то внутри всё равно к ней обращается.

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

 , , , ,

Odin_KG
()

Из c++ начать выполнять код с определенного адреса

Форум — Development

Добрый вечер, подскажите как это сделать, есть у меня допустим на c++ код, в котором я например прочитал инструкции из бинаря. Как мне этот код исполнить? Если я например выделю буфер в сегменте данных то туда jmp я наверное из программы на c++ не сделаю, страница может быть помечена как RW. Код там не привязан к смещения, так что ничего не должно упасть, просто проделает несколько инструкции. И еще в каком сегменте памяти разместить этот буфер, где будет исполняться код? Написал немного сумбурно, подумал и если точнее есть машинные инструкции в файле, нужно во время работы программы их загрузать в адресное пространство процесса и там выполнить.

 

da17
()

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

Статьи — Desktop

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

 ,

krasnh
()