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

Первые слова

Douyin — это музыкальная и творческая социальная программа для коротких видео, разработанная Toutiao. Программное обеспечение было запущено 20 сентября 2016 года. Это платформа сообщества коротких видео для всех возрастов.

Как активный пользователь Douyin, мне нравится смотреть видео каждый день и смеяться 😄. Но все знают, что видео, загруженные с Douyin, имеют водяные знаки. Программисту с обсессивно-компульсивным расстройством это категорически запрещено. В Интернете существует множество инструментов для удаления водяных знаков. Как они работают? Любопытство заставило меня начать исследование.

Удалить водяной знак из короткого видео

анализировать

Начнем со ссылки общего доступа Douyin. Формат ссылки общего доступа, скопированной из Douyin, следующий:

2.82 wsr:/ Happy birthday to Кобе.%баскетбол %Менталитет Мамбы % День рождения Коби Брайанта https://v.douyin.com/d8LpxMQ/ Скопируйте ссылку, выполните поиск по Daqi Douyin и посмотрите видео напрямую!

Есть адрес ссылки https://v.douyin.com/d8LpxMQ/,Давайте поместим это в браузер,Нашел эту ссылку перенаправленную,Перенаправленный адрес выглядит следующим образом:

https://www.iesdouyin.com/share/video/6999605370222054663/

Кажется, это бесполезно,Давайте возьмем пакет и посмотрим, есть ли интерфейс для запроса видео.,Посмотрите внимательно,кусать。Найденный item_ids интерфейс, а следующее значение — это последняя часть URL-адреса перенаправления (6999605370222054663). Я считаю, что это должен быть идентификатор видео. Адрес интерфейса следующий:

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6999605370222054663

Далее давайте посмотрим на данные, возвращаемые этим запросом интерфейса.,Ух ты,когда я нажимаю наPreviewкогда,Я внезапно стал просветленным,Копирайтинг с видео, автор, музыка, миниатюра, Адрес и т. д.

После того, как я вынул адрес видео, я скопировал его в браузер и открыл. URL-адрес видео следующий:

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fg10000c4hpfk3c77uar6l7cs90&ratio=720p&line=0

Но открыв его, я обнаружил, что водяной знак в левом верхнем углу видео все еще на месте. Посмотрите этот URL playwm,Обнаружить wmЭто немного похоже на название моего проекта,нетwatermarkАббревиатура?я удаляю wm,Затем скопировать зайдите в браузер и откройте его,Появилась волшебная сцена,Водяной знак видео исчез,Так взволнован. Адрес видео без водяного знака следующий:

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0d00fg10000c4hpfk3c77uar6l7cs90&ratio=720p&line=0

Оказывается, удалить водяные знаки с видео Douyin очень просто.,Все еще думаете об алгоритмах видео или о чем-то еще?,Это просто простой анализ. Ха-ха,Это просто заставляет меня чувствовать себя немного 🤭. Теперь, когда вы поняли принцип, стало ли писать код проще и приятнее?

Реализация кода
  • Наша ссылка на видео копировать представляет собой короткую ссылку на видео, смешанную с текстом.,Сначала извлеките ссылку,Давайте воспользуемся обычными правилами, чтобы справиться с этим.
Язык кода:javascript
копировать
 if len(re.findall('[a-z]+://[\S]+', content, re.I | re.M)) > 0:
        return re.findall('[a-z]+://[\S]+', content, re.I | re.M)[0]
  • После извлечения короткой ссылки на видео необходимо перенаправить запрос для получения видео. id。проходитьrequest библиотека для запросов.
Язык кода:javascript
копировать
header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/92.0.4515.107 Safari/537.36'}
# URL: перенаправленный URL
response = requests.get(url, headers=header)
return response.url
  • Нам нужно перенаправитьurlЗахват видеоid,как параметры интерфейса item_idsценить。
Язык кода:javascript
копировать
# realUrl: URL-адрес, полученный путем перенаправления.
startUrl = realUrl[0:realUrl.index('?')]
id = startUrl[startUrl.rindex('/') + 1:len(startUrl)]
  • Начните запрашивать интерфейс. GET-запрос, один параметр item_ids
Язык кода:javascript
копировать
 douyinUrl = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo'
 douyinParams = {
                'item_ids': id
            }
 douyinResponse = requests.get(url=douyinUrl, params=douyinParams, headers=headers)
 body = douyinResponse.text
  • json для получения копии видео и адреса видео. Среди них нет ссылок на видео с водяными знаками. playwm быть заменен на play
Язык кода:javascript
копировать
data = json.loads(body)
# видео копирайтинг
videoTitle = data['item_list'][0]['desc']
# URL-адрес водяного знака видео
videoUrl = data['item_list'][0]['video']['play_addr']['url_list'][0]
# Видео без URL-адреса водяного знака
realVideoUrl = f'{videoUrl}'.replace('playwm', 'play')
  • Наконец, мы проходим webbrowser Откройте в браузере библиотеку, воспроизведите видео и наслаждайтесь удовольствием без водяных знаков.
Язык кода:javascript
копировать
webbrowser.open(realVideoUrl)

Все коды следующие:

Язык кода:javascript
копировать
import json
import re
import webbrowser
import requests

def get_url(content):
    if len(re.findall('[a-z]+://[\S]+', content, re.I | re.M)) > 0:
        return re.findall('[a-z]+://[\S]+', content, re.I | re.M)[0]
    return None


def get_redirect_url(url, header):
    # URL: перенаправленный URL
    response = requests.get(url, headers=header)
    return response.url

if __name__ == '__main__':
    douyinUrl = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/92.0.4515.107 Safari/537.36'}
    inputContent = input('Пожалуйста, введите ссылку на видео: ')
    if inputContent.strip() is not None:
        if get_url(inputContent) is not None:
            realUrl = get_redirect_url(get_url(inputContent), headers)
            # realUrl: URL-адрес, полученный путем перенаправления.
            startUrl = realUrl[0:realUrl.index('?')]
            id = startUrl[startUrl.rindex('/') + 1:len(startUrl)]
            douyinParams = {
                'item_ids': id
            }
            if realUrl.__contains__('www.douyin.com/video'):
                douyinResponse = requests.get(url=douyinUrl, params=douyinParams, headers=headers)
                body = douyinResponse.text
                print(douyinResponse.url)
                data = json.loads(body)
                print(data['item_list'][0]['desc'])
                # видео копирайтинг
                videoTitle = data['item_list'][0]['desc']
                # URL-адрес водяного знака видео
                videoUrl = data['item_list'][0]['video']['play_addr']['url_list'][0]
                # Видео без URL-адреса водяного знака
                realVideoUrl = f'{videoUrl}'.replace('playwm', 'play')
                print(realVideoUrl)
                webbrowser.open(realVideoUrl)

Удаляйте водяные знаки из видео списка пользователей в пакетном режиме

анализировать

Основываясь на вышеизложенном принципе удаления водяных знаков в видео, мы продолжаем подробно изучать удаление водяных знаков в видео на личной домашней странице пользователя. я пойду тихокопироватьг-н Лей(Лэй Цзюнь)Поделиться ссылкой на домашнюю страницу。Профиль г-на Лэя в Douyin на домашней странице:“Любовь - это все причины и ответы。”,Так же, как я люблю технологии🤭. Ссылки на контент, размещенные на главной странице, следующие:

Запишите свою прекрасную жизнь на Douyin! https://v.douyin.com/d8NLmmR/

Затем мы перенаправляем URL-адрес общего доступа в браузере. URL-адрес перенаправления выглядит следующим образом:

https://www.iesdouyin.com/share/user/104815668206?u_code=jjjaal8a&sec_uid=MS4wLjABAAAAompXkPoYOGsA152dqYoytKycjIZ_aCCxHwGmLX5IsDM&did=MS4wLjABAAAAMsW9XGYpNp0gdiIm1yrzIfLLUU1Xn3eaP7TecSyN0xU&iid=MS4wLjABAAAAGXkY53W1WOgVg9mNmUzyPBaj5YZ53tZ3DoGXBPdXu4xu4OPn5opAMisJdquNQ1Oo&with_sec_did=1&timestamp=1629787737&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin

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

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

https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAompXkPoYOGsA152dqYoytKycjIZ_aCCxHwGmLX5IsDM&count=21&max_cursor=0&aid=1128&_signature=.PtrOQAAnehdkkyKHCi4r.z7ay&dytk=

Параметры запроса следующие:

Внимательно читайте значение каждого параметра анализировать,sec_uid и перенаправить URL sec_id То же значение,count Это должно быть количество запросов за раз.,Это также должен быть пейджинговый запрос.。max_cursor Это просто курсор,Используется для запроса следующей страницы。Этот интерфейс значений будет возвращаться каждый раз。aid Не уверен._signature 应该是加密的一个签名。dytk Не уверен. Что делать, если я не знаю этих параметров? Что произойдет, если я удалю их из GET-запроса? Удалите последние три параметра и повторите запрос. Происходит волшебная сцена, а интерфейс все еще открыт. Я скопировал несколько ссылок и заменил их sec_uid,Все еще нет проблем. этот? Пакетное получение прошло успешно,Ха-ха-ха. Интерфейс после удаления выглядит следующим образом:

https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAA5mIrbhVT9ffFBXvDq-3ukbcoZdWrKLzB-J-diEUzit4&count=21&max_cursor=0

Далее приступайте к написанию кода.

Реализация кода

Извлечение ссылок, перенаправление запросов и sec_uid Код перехвата значения такой же, как указано выше.

  • Начните запрашивать интерфейс для получения списка видео. GET-запрос, три параметра.
Язык кода:javascript
копировать
douyinUrl = 'https://www.iesdouyin.com/web/api/v2/aweme/post/'
douyinParams = {
     'sec_uid': id,
     'count': 24,
     'max_cursor': 0,
}
response = requests.get(url=douyinUrl, params=douyinParams, headers=headers)
body = response.text
  • json для получения всех копирайтинговых и видеоадресов списка видео. Здесь получается непосредственно адрес видео без водяных знаков.
Язык кода:javascript
копировать
 data = json.loads(body)
 for content in data['aweme_list']:
     if len(content['video']['play_addr']['url_list']) > 0:
         print(content['desc'] )
         print(content['video']['play_addr']['url_list'][0])
  • Получите список видео для следующей страницы. Просто параметры max_cursor Что-то изменилось. Все копирайтинговые и видео адреса для запроса и получения списков видео такие же, как указано выше.
Язык кода:javascript
копировать
douyinParams = {
    'sec_uid': id,
    'count': 24,
    'max_cursor': data['max_cursor'],
}
  • В интерфейсе есть поле has_more ,Он используется для определения того, есть ли еще видео,has_more =true, это означает, что видео получено.
Язык кода:javascript
копировать
if data['has_more']:
    print('Нет видео')
    exit()
  • Здесь я элегантно обошелся с видеокопией и адресом, которые только что были напечатаны на консоли. Я создаю его локально с помощью douyin.md файл, а затем передать markdown синтаксис, написанный как ссылка на douyin.md в файле,Когда я вижу такую ​​копию,,Нажмите на копию, чтобы воспроизвести видео。markdown Пример синтаксиса ссылки выглядит следующим образом:
Язык кода:javascript
копировать
[видео копирайтинг](Видео адрес)

Напишите код следующим образом:

Язык кода:javascript
копировать
for content in data['aweme_list']:
    with open('douyin.md', 'a', encoding='utf-8') as f:
        if len(content['video']['play_addr']['url_list']) > 0:
            f.write(
                    '[' + content['desc'] + ']' + '(' + content['video']['play_addr']['url_list'][0] + ')' + '  <br />')
  • Наконец, взгляните на скриншот видеосписка г-на Лея, который я получил.

Как насчет этого, неплохо! Если вам понравилось видео девушки, вы можете спокойно сохранить его и посмотреть позже🤭, хахаха.

Подвести итог

Я думаю, что многие вещи такие. Прежде чем я их изучаю, они всегда кажутся непостижимыми. Когда я изучаю принципы технологии, я нахожу их такими простыми. Это показывает, что большинство вещей можно примерно понять, если вы готовы провести исследование. Позвольте мне рассказать вам небольшой секрет. Возможно, это уже не секрет. . . Куайшоу короткое видеоидтиОбработка водяных знаковПодобным образом,Просто добавьте его при получении партиями cookie,Я реализовал код,Заинтересованные друзья могут попробовать это самостоятельно.

заявление

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose