ilyhalight / voice-over-translation

Небольшое расширение, которое добавляет закадровый перевод видео из YaBrowser в другие браузеры
MIT License
3.6k stars 238 forks source link

Возможно, ли добавить Douyin.com? #876

Open MaksProger opened 4 weeks ago

MaksProger commented 4 weeks ago

Describe your feature / Опишите ваше предложение

Douyin так-то родственник TikTok, даже селектор CSS .xgplayer video выдает. Практически временные ссылки на видео чем то похожи. Например: v16-webapp-prime.tiktok.com/video/.... v3-web-prime.douyinvod.com/video/.... Но все же они как земля и небо. Douyin более прокачен. Поэтому стало интересно. Все таки часто я его открываю.

ilyhalight commented 3 weeks ago

Попробуйте эту версию. Не тестировал, но, вроде, должно работать

https://drive.google.com/file/d/185Zq6STP_AeLJH3UvU87mmLQi2WJ1YKO/view?usp=sharing

MaksProger commented 3 weeks ago

Нет кнопки, проверял и в ленте, на поисковой странице и отдельно ссылкой на конкретное видео. Если честно я уже пробовал такой фокус изменения в скрипте, tiktok на douyin, до написания темы. Правда, только в браузере firefox 115.16.1esr (64-разрядный), на win 7, Tampermonkey BETA v5.3.6216 Если заглянуть в консоль, инжектированный скрипт, выбивает ошибку. Uncaught (in promise) VideoDataError: Entered unsupported link: "douyin" Я не думаю, что другой браузер или ОС исправит эту ошибку. Единственное что напрягает это ссылки на видео, которые ведут на v3-dy-o.zjcdn.com или v3-web-prime.douyinvod.com т.е. на совсем другие домены, в отличие от тикток. По-хорошему мне нужно разобраться, как всё это работает. Конечно, чтобы разобраться на это нужно время и желание. Но машинный перевод с китайского, не соответствует действительности. Желание здесь и пропадает. Тема скорее из любопытства. Просто douyin это не совсем tiktok.

ilyhalight commented 2 weeks ago

Uncaught (in promise) VideoDataError: Entered unsupported link: "douyin"

Сейчас, перепроверил. Оказалось, что у doyuin немного не так формируются пути на видео, как у тиктока (не указывается юзернейм в ссылке), отсюда и ошибка. Но все равно, Яндекс не умеет (либо работает криво с китайскими видео, ибо те же видео с doyuin залитые с прямыми ссылками выдают ошибки с неудачным переводом) в перевод ссылок на douyin, как в тиктоке, так, что, так просто, это бы не сработало.

ilyhalight commented 2 weeks ago

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

MaksProger commented 2 weeks ago

не указывается юзернейм в ссылке Я не понимаю. Я не знаю, какие запросы должен делать скрипт. И что, скармливается Яндекс переводчику. Я не интересовался этой темой. Поэтому ваше сообщение, не особо понятно для меня. Сам я раньше никогда не касался направления клиент - серверных приложений. Для меня это ново. После долгих раздумий, над вашим сообщением. Я все же решил написать сообщение. К тому же я ошибочно сделал вывод про плеер. Если в TikTok отчетливо видно, что страница использует npm-xgplayer, и для xgplayer спокойно можно посмотреть события, свойственные ему. У того же, например, bilibili, по событиям можно утверждать, что плеер скорее xgplayer. Но douyin, если открывать видео по ссылке, и заглянуть в ресурсы, название скриптов штук 9 с названием player-0 и т.д по порядку. Если даже на это не обращать внимание, то и событий (play, pause…) попросту нет. А на главной странице, событий через, чур, много. Не совсем стандартно. douyinlenta И даже если скрипт расширение функционала плеера, скаченный с сайта «Жирная вилка» «HTML5视频播放工具» на главной странице douyin, еще условно работает, который понятное дело работает и на bilibili тоже, то по ссылке на видео, он превращает страницу в белый фон, и в верхнем левом углу вечно надпись «Please wait…». Но это не столь важно, скрип может быть устаревшим. К тому же, скорее плеер будет влиять на воспроизведение дорожки (соответствие вашего скрипта). А дорожку еще надо получить. Но факт в том, что в пределах сайта не только шаблон прыгает. Конечно, я понимаю, если было бы так просто, эта тема и не создавалась. Можно было вписывать, например, douyin в bilibili. Но. Например, у били bvid в запросе, у доинг vid и другие есть различия. Та же маска для поиска ресурсов… Понятное дело результат будет, ожидаемо не рабочим. Если функция заточена именно под один шаблон. doubili Конечно, я немного ознакомился со скриптом. Но на стороне клиента сделать что-то - это одно. А здесь совсем другое. Даже что в переменных находиться, для чего они, как должен быть построен запрос, без понятия. И что должно находиться в нем. И также. Просто если Яндексу скармливается сслыка на страницу, первое сслылка шара с этого сайта, имеет вид v.douyin.com/****/ и при переходе по ней становиться www.douyin.com/video/*, но обе ссылки рабочие, проверено через онлайн загрузчики. Но опять же не все онлайн загрузчики могут работать с сайтом, хоть, и заявлена поддержка, скорее из-за частых изменений на сайте, что не всем быстро удается адаптироваться. Но по такому, если предположить худший вариант, Яндекс сам производит манипуляции с сайтом и не умеет работать с таким сайтом, на ум приходит только одно. Я не разбирался в документации по доинг https://developer.open-douyin.com/docs-page в тех же API JS, например, в нюансах сознание worker. Но для меня, как вариант, проще промежуточный сервер, который условно буферизовал бы видео, чтобы привести к виду более понятному для скрипта. Грубо говоря, сайт конвертер, тупо гнать трафик, как бы через прокси. Но как я понимаю, пока это не требуется. Яндекс не умеет (либо работает криво с китайскими видео… те же видео с doyuin залитые с прямыми ссылками выдают ошибки…) Сложное предложение, трудно перевариваемое. С одной стороны можно расценить, как не соответствует кодек для декодирования, у самого сервера Яндекса (Но MPEG AAC Audio (mp4a), так же на том же youtube используется, единственное, что компрессия и версия может повлиять), а с другой, что само аудио не усваивается. Да я понимаю, разные диалекты в каждой части Китая и дикция, плюс еще выражение каких-нибудь чувств. Но если диктор быстро и хорошо произносит речь, то и перевод получается, даже очень идеальным для переводчика. Проверял на обзоре одного фильма на били. За исключением, все же звуков в нашем языке больше, и аудиодорожка идет в очень ускоренном произношении, чтобы не отстать от видео. И переводчик в переводе матом ругается, если переводит ссоры. К тому же, бывает, вроде девушка, а в переводе мужская озвучка. Задумываешься, как он догадался. Но это мелочи. По идее на том же douyin, такие обзоры он должен переводить.

ilyhalight commented 2 weeks ago

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

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

Сложное предложение, трудно перевариваемое

Если более простым языком. Для перевода TikTok указывается обычная ссылка на видео. Например, https://www.tiktok.com/@USERNAME/video/VIDEO_ID. Дополнительные манипуляции с ссылкой никакие не проводятся. Яндекс сам скачивает видео и переводит его. Все работает.

Подобная ссылка для перевода Douyin не работает. Перевод по ссылке на видео с CDN douyin (.zjcdn.com,.douyinvod.com) тоже не работает. Из-за этого сделал вывод, что проблема именно в переводе китайских видео

Перевод по ссылке на видео с CDN douyin (.zjcdn.com,.douyinvod.com) тоже не работает. Из-за этого сделал вывод, что проблема именно в переводе китайских видео

Пока отвечал, кажется, случайно нашел причину из-за чего не работает перевод по ссылке на CDN douyin. Скорее всего, вина в каких-то спец символах внутри параметров ссылки. Если переделаю медиа прокси, то должно все-таки, получится добавить перевод. Пускай issue повисит, пока не проверю эту теорию

MaksProger commented 2 weeks ago

Перевод по ссылке на видео с CDN douyin (.zjcdn.com,.douyinvod.com) тоже не работает.

А временные ссылки, например с Tiktok работают? У меня, по крайней мере, нет. Я до этого не писал, так как думаю, проверял уже. Да и конкретной информации у самого не было.

Эксперименты показали, временная сслылка остается рабочей в случае: Tiktok – если удалить дополнительные параметры в ссылке (после знака вопроса), до expire, дальше ничего изменять нельзя, даже в значения, будет выдавать страницу, доступ запрещен.

перевод по ссылке на CDN douyin. Скорее всего, вина в каких-то спец символах внутри параметров ссылки.

Douyin – можно всё удалить после знака, вместе с вопросом, оставив только ссылку, ссылка будет рабочей.

Но как я понял из мануала по скрипту, Яндекс переводит все прямые ссылки, а значит, файервулы серверов не дают доступа на файлы по временным ссылкам.

Я вспоминаю времена, когда интернет был не стабилен. К тому же когда появились файлообменники, в бесплатном аккаунте, скорость не позволяла скачать быстро. Качалось не один час, а при разрыве связи, приходилось закачку ставить по новой и не один раз. Рулили менеджеры закачек, так как можно было докачивать, но с динамическим IP, ссылка становилась не доступной, после нового подключения, приходилось заново перехватывать временную ссылку из браузера и изменять её на не докаченном файле. Т.е. была фильтрация по IP. Второе. User-Agent должен быть, такой же, как и у браузера, по которому выдается временная ссылка. Иначе скачивался файл, типа, доступ запрещен, если бы он открывался в браузере.

TikTok ссылки при открытии в другом браузере, доступ запрещен, в третьем также, даже при смене UserAgent , правда через дополнение, полностью вручную скопировав, на браузер в котором ссылка была получена. Но там дополнительные параметры в ссылке, как token, не знаю, как работает, но понятное дело, другой браузер уже скорее и не откроет. К тому же сайт ни разу не открывался в этих браузерах, не пользуюсь этим ресурсом.

Douyin временная ссылка с удаленными параметрами, да и целая, при смене IP, остается рабочей, даже проверено по WEB прокси. Но замечено, что не везде открывается. В другом браузере работает. Даже в IE древнем, VLC открывает. Но это естественно, так как у них есть дополнительные программы, например, загрузчик видео, понятное дело нажатие на сайте скачать, скачивание перейдет в программу, которая скорее и наложит водяные знаки. В принципе еще установлено и приложение для виндовс, но не пользуюсь, такая же веб версия, висит просто в фоне. Поэтому все же прыжки из одного в другое, точно агент строго фиксироваться не будет. Да и при постоянном движении, например, со смартфона ip также может прыгать, подключаясь от точки к точки. Все таки там Китай.

Единственное, что в голову приходит, посмотреть на поведение Яндекс переводчика, залив на сервер видео и скормив ему, и посмотреть параметры клиента, какой видео скачает, попробовать подстроиться под него. Получить временную ссылку с такими параметрами и скормить ему. По логике он должен иметь поведение параметры Яндекс браузера. Но Яндекс браузер мне запомнился, как шпион, который User-Agent тырил у браузера по умолчанию, со всеми данными. Сейчас не знаю. Есть подозрение, но это не точно, если запрос к ресурсам делает уникальный клиент, например выдающий сервер, файервул может блокировать, как защиту от парсинга, в крайнем случае, даже может быть заблокирован ip. Выводы делать рано, так как не все проверено. Но по хорошему, по правилам, Яндекс сам должен получать временную ссылку.

hugepower commented 2 weeks ago

The video at https://www.douyin.com/video/7414024495712718095 has a direct playback link:  https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000crhueh7og65qq74l3r10&line=0

MaksProger commented 1 week ago

https://www.douyin.com/aweme/v1/play/?video_id

Web API?

https://www.douyin.com/aweme/v1/play/?{ video_id }

example:

https://v.douyin.com/irwRJJ2e/ https://www.douyin.com/aweme/v1/play/?video_id=v0300fg10000cr3i457og65vli2216a0

ilyhalight commented 1 week ago

А временные ссылки, например с Tiktok работают? У меня, по крайней мере, нет. Я до этого не писал, так как думаю, проверял уже. Да и конкретной информации у самого не было.

Не проверял. Ибо, пока работает по обычной ссылке, не было смысла тестировать с временными ссылками.

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

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

https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000crhueh7og65qq74l3r10&line=0

Web API?

с проксированием такой ссылки, вроде бы, последний раз и тестировал. Она как раз и редиректит на один из их cdn (на какой точно - не помню). Но как таковой разницы нет, что с /aweme/... ссылкой или со ссылкой сразу на cdn - не хотел переводить

MaksProger commented 1 week ago

что с /aweme/... ссылкой или со ссылкой сразу на cdn - не хотел переводить

А здесь нет такого, при обращении Яндекс переводчика к сайту ресурсов, он тащит за собой кучу информации, типа я Яндекс? Потому что если, даже в теме пример ссылки с aweme, кликнуть на пример, и даже правой кнопкой открыть в новом окне выдаст ошибку 403. Только, открытие в новом приватном окне, или скопировав, вставив в адресную строку, тогда сервер дает доступ к ресурсам.

ilyhalight commented 1 week ago

что с /aweme/... ссылкой или со ссылкой сразу на cdn - не хотел переводить

А здесь нет такого, при обращении Яндекс переводчика к сайту ресурсов, он тащит за собой кучу информации, типа я Яндекс?

вроде нет

Потому что если, даже в теме пример ссылки с aweme, кликнуть на пример, и даже правой кнопкой открыть в новом окне выдаст ошибку 403. Только, открытие в новом приватном окне, или скопировав, вставив в адресную строку, тогда сервер дает доступ к ресурсам.

видимо, у них в aweme сделана проверка на referer. Если он не пустой или не равен домену douyin, то возвращает ошибку

ilyhalight commented 1 week ago

Если переделаю медиа прокси, то должно все-таки, получится добавить перевод

Действительно помогло. В ближайшее время добавлю кнопку для перевода на сайт