LINUX.ORG.RU

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

 , ,


0

1

Все имеющиеся способы (типа yt-dlp) рассчитаны на конкретные сайты. А если для нужного мне сайта инструмента нет? Ведь всё то, что можно воспроизвести, можно и записать. Можно же тупо записать весь отправляемый на звуковую карту звук. Можно записать то, что показано на экране. Теоретически же можно записать звук только с конкретного источника конкретной вкладки браузера и видео без масштабирования. Есть ли инструменты для этого дела?


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

Нет.

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

Можно. Только это дебильный способ — lossy2lossless или lossy2lossy кодирование. А главное, нет никакого смысла таким заниматься, если видео и аудио в удобоваримом формате у браузера уже есть. Наиболее универсальным способом, наверное, будет «достать из кэша браузера», но это не очень удобно. Гораздо удобнее всё же расковыривать, как именно сайт отдаёт нужные данные, и, соответственно, делать качалки, которые могут это получить и сохранить удобным образом (как тот же yt-dlp).

Основная причина, почему нет универсального способа это сделать, в том, что часть сайтов (тот же YouTube как яркий пример) намеренно этому сопротивляются и стараются всё усложнить, а старые инструменты «сломать» (ну то есть, сделать, чтобы они перестали работать с новой выдачей). Тем не менее, любая хитро сделанная штука расшифровывается. Если браузер может получить видеопоток и показать его юзеру, то и другая софтина сможет, поэтому авторы yt-dlp таки справляются с тем, чтобы он продолжал работать после всех выкрутасов гугла. С другими сайтами это делается обычно проще, потому что обычно и заморачиваются они меньше гугла.

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

Наиболее универсальным способом, наверное, будет «достать из кэша браузера», но это не очень удобно.

Элементарно пишется js-плеер который ничего полезного в кеше не оставляет. И сниффер http-запросов тоже никаких медиапотоков в известных форматах не найдёт. Ценой дополнительной нагрузки на проц клиента, но как будто это волнует владельцев таких сайтов.

Но после принятия вышеуказанных мер просниффить всё равно относительно просто, надо добавить js-хук в MSE и сохранять куда-то всё что там в медиабуфер добавляют.

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

Элементарно пишется js-плеер который ничего полезного в кеше не оставляет. И сниффер http-запросов тоже никаких медиапотоков в известных форматах не найдёт.

Это прям с декодером на JS что ли, и в canvas? Или не до такой степени?

В любом случае, если оно в итоге показывается юзеру именно как видео, это видео можно точно так же и сохранить — пусть даже из того же JS. Но да, именно вариант с кэшем обойти можно. Впрочем, обычно не стараются. На большинстве не особо популярных сайтов просто не заморачиваются и делают «защиту» лишь от сохранения по правому клику, при этом порой даже целиком видеофайл на самом деле отдавая, то есть «от честных людей». Прям сильно заморачиваются обычно только на реально популярных — но их как раз таки yt-dlp умеет.

Но в общем да, универсального способа нет. С каждым сайтом надо разбираться отдельно. Это плохая новость. Хорошая же в том, что с 99% сайтов будет значительно проще, чем с пресловутым ютубом.

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

Всё проще - по сети шлёшь что-то обфусцированное (и в кеше тоже оно остаётся), а перед засовыванием в медиа-буфер обфускацию снимаешь. Ключ обфускации слать отдельно от потока например через куки. Можно даже diffie-hellman организовать чтобы никакой http-сниффер его не смог достать точно. Но против влезания в js отладчиком это не поможет разумеется.

Но в общем да, универсального способа нет.

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

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

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

В некоторых случаях устроит. Если это, например, песня.

Wapieth
() автор топика

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

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

но если нет работающего способа сохранить напрямую, как yt-dlp

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

Просто может понадобиться чуть-чуть поковыряться в коде сайта. Обычно не то чтобы очень сильно.

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

Если браузер может показать видеоряд пользователю, то ничто не мешает его же и сохранить. Без вот этого вот ужаса с экранками.

Подскажи как сохранить видеоряд Яндекс-Телемоста без ужаса с экранками и без установки яндекс браузера. Штатно для этого нужен Яндекс Браузер, в Chrome/Chromium сохраняется только 30 минут общения, в Firefox телемост вообще функцию отключает.

Я не нашел вариантов кроме obs-studio, хотя вещь востребованная, если бы было просто сделать, уже кто-нибудь бы расковырял или плагин написал.

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

Подскажи как сохранить видеоряд Яндекс-Телемоста

Не знаю, не пользовался им.

Штатно для этого нужен Яндекс Браузер в Chrome/Chromium сохраняется только 30 минут, в Firefox телемост вообще ыункцию отключает.

Какую функцию? Телемоста этого? Или сохранения только?

Ну как вариант, просто сохранять по 30 минут в хромиуме, если совсем лень ковыряться — почему бы нет? Ну а так — смотри код страницы, вероятно куски видео запрашиваются скриптом. Вот туда можно вклиниваться и так же запрашивать, но своей качалкой. Надо понимать JS, да.

А yt-dlp не качает оттуда?

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

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

Мне кажется ТС намеренно использует слово «универсальный» чтобы показать, что ищет решение независимо от сайта. Тогда только экранка, только платы видеозахвата.

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

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

Мне кажется ТС намеренно использует слово «универсальный» чтобы показать, что ищет решение независимо от сайта.

И на этот запрос я ответил первым же словом в первом же сообщении темы.

Способ с экранкой действительно универсальный, но идиотский. И это не способ сохранения, это способ записи.

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

Думаю так же как с другими плеерами: подменой вот этой функции https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer на свою реализацию, которая всё присылаемое, кроме передачи в настоящий appendBuffer(), ещё куда-то зеркалит. Насколько я знаю, это (SourceBuffer) единственный способ проигрывания в браузере видео, у которого нет конкретного (скачиваемого) урла для какого-нить mp4 или подобного, так что мимо него они никак не пройдут.

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

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

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

Какую функцию? Телемоста этого? Или сохранения только?

Сохранения.

Ну как вариант, просто сохранять по 30 минут в хромиуме, если совсем лень ковыряться — почему бы нет?

Не получится. После нажатия кнопки записи через 30 минут происходит сохранение, потом кнопки нет.

Сохраняется не из буфера браузера/кэша/etc, а это прямо api у сайта, видеофайл с записью телемоста скачивается с самого яндекса.

Возможно вообще только юзерагентом.

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

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

Думаю так же как с другими плеерами: подменой вот этой функции https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer на свою реализацию, которая всё присылаемое, кроме передачи в настоящий appendBuffer(), ещё куда-то зеркалит.

Хм, а готовых плагинов/сборок неужели нет? Фича вроде как востребованная.

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

Я имел в виду за исключением DRM (widevine). Что-то давно на него не натыкался. У меня почему-то просят (точнее firefox просит) его включить сайты, где нет никакого подобного контента.

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

Зачем плагины? Открываешь js-консоль, пишешь туда

SourceBuffer.prototype.origAppendBuffer = SourceBuffer.prototype.appendBuffer;
SourceBuffer.prototype.appendBuffer = function (data) { save_to_sniffer(data) /* тут отправляем этот блоб куда-нить например ajax-ом */; this.origAppendBuffer(data); } 
Текст этого «патча» можно заранее где-то приготовить и просто копипастить в консоль. Единственное небольшое неудобство - если плеер запустится раньше чем это сделано, часть видео он может успеть загрузить мимо этого сниффера. Ну, можно что-нить предпринять чтобы страница не грузилась слишком быстро, или вставить этот js каким-нить аддоном на кастомные js.

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

Вот пример сниффера который никуда не шлёт а просто сохраняет в js-переменных (это жрёт оперативную память браузера).

window.clog = [];

SourceBuffer.prototype.appendBuffer = function (data) { window.clog.push({ t: Date.now(), b: this, d: data}); this.origAppendBuffer(data); } 
Потом можно смотреть содержимое window.clog и там будет история всех вставок.

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

Тоже замечал. Подозреваю это какие-то следящие штуки собирают данные о твоей системе и в том числе трогают апи этой штуки. Ещё синтезатор речи тоже так же иногда спрашивает разрешить или нет.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Можно же тупо записать весь отправляемый на звуковую карту звук. Можно записать то, что показано на экране. Теоретически же можно записать звук только с конкретного источника конкретной вкладки браузера и видео без масштабирования. Есть ли инструменты для этого дела?

OBS Studio.

Но результат будет хуже любого другого метода.

Если есть возможность — лучше сохранять средствами браузера. Или брать из кеша. Или смотреть запросы в консоли и повторять их curl-ом или скриптом. Или более сложными средствами отладки (как Selenium). Если последнее сильно усложняют, становится нужен yt-dlp.

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

— Есть ли универсальный способ сделать скриншот, чтоб работало и в Wayland и в Xorg и в фреймбуфере mpv из ядерной консоли.
— Возьми Polaroid и сфоткай экран.

Вот примерно так эти советы выглядят. Да, этот способ универсальный, но это не скриншот в случае с фотиком, и не сохранение видео с сайта в случае с записью экрана. А если ему ещё и песни надо, то качество звука, которое там и без того небось что-нибудь вроде mp3@192kbps было, уйдёт в нулину (ну или он будет писать в лосслесс, тратя огромную кучу места без толку).

Как самый крайний вариант, когда совсем ничего больше не работает, конечно, можно и так, но всерьёз рассматривать это, не попробовав сделать нормально — это финиш. Тем более, что в подавляющем большинстве случаев разобраться, как сохранить нормально, не так уж сложно. Хотя и придётся для каждого сайта (не запиленного уже в том же yt-dlp, orpheus-dl и прочих) это делать отдельно.

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

Открываешь консоль разработчика на вкладке Network, запускаешь воспроизведение и находишь там свой видеофайл и жмёшь Save as. Если повезёт. Если не повезёт, там будет не один видеофайл, а много, но тогда надо искать m3u со списком всех секций и качать уже его.

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

«Список секций» не обязательно в m3u8. Он ещё может быть в формате mpd - из стандартных. А ещё может быть в любом нестандартном т.к. парсится он джаваскриптами а их можно написать любые. Исключение только яблоустройства, там современные медиапотоки до сих пор не поддерживаются, зато есть захардкоденная в браузерах поддержка m3u8.

firkax ★★★★★
()