КейсыСтатьи

TikTok: Радуга. Как это работало

Админ канала: @djakoma Автор статьи: @de_sync

Всем привет, с наступающими праздниками!

*На момент написания тикток пофиксил всю эту историю, статья написана исключительно для общего развития*

Все мы были в ̶а̶х̶у̶е̶ шоке когда увидели адалт в тиктоке и залеты касаточки, все чаты разрывались в догадках, где-то появилась инфа про 540 фпс, что дало понимание в какую сторону копать. В поиске по чатам адекватного разбора радуги я не нашел по сей день, поэтому погнали.

Типичный залив 😢
Кто понял тот понял

Задача со звездочкой

Сам я до этого не лил с тиктока(кроме стримов гемблы), но разобраться как это работает и урвать свою долю трафика очень хотелось. После того как кто-то написал непонятный гайд с 540 фпс были попытки это повторить, из девайсов был только айфон, на котором видео с таким количеством кадров замедлялось и адекватно залить его не получалось, как это удалось пофиксить напишу в конце.

Так же было обсуждение что льют через апи, что похоже на правду, т.к. в ботах писалось что видео залито через камеру или оверлей, что по факту сделать с телефона было невозможно из-за специфики кодировки видео приложением, если заливать его через овер.

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

download_addr — видео которое скачивается из тиктока с телефона с вотермаркой — Дальше буду называть это видео «модерка»

play_addr — видео которое отображается в самом приложении — Дальше буду называть это видео «крео»

JSON с информацией о видео на странице

Если загрузить видео через веб в 540 фпс, то при скачивании из download_addr оно будет в 60 фпс, а play_addr — 30 фпс, сразу дошло что нужно заменить кадры из play_addr на креатив, а из download_addr — на любое белое видео, как я подумал оно уходит на модерацию и влияет на ЦА, поэтому подставлял туда видео с рыбалкой, машинами и так далее.

Перед тем как продолжим, хочу уточнить, что количество кадров в видео должно быть таким, которое при делении на 30 будет нецелым числом , т.к. тогда кадры с модерки будут попадать в креатив, принято решение использовать 399 fps для того что бы кадры видео с модерки и креатив не пересекались.

Генерация градиента и отбор кадров

*Весь код был написан с помощью chatgpt*

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

Gradient/gradientGen.py

    1. Генерируем каждый кадр рандомный градиент.
    2. Пишем на нем номер фрейма(кадра) для того что бы потом отобрать нужные
    3. Генерируем 5 секундное видео в 399 fps
    4. Заливаем видео в тикток через веб

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

Скачивание 30/60 фпс видео

Снифал через Нокс + HTTP Toolkit, настройка очень простая

    • Открываем нокс, если это другой эмулятор, нужно разрешить подключение через ADB в настройках
    • В HTTP Toolkit выбираем подключение через ADB, он установит апк и сертификат на эмуляторе

    • Переходим во вкладку View где будут отображаться все запросы

    • Обновляем страницу на которую мы залили видео, слева ищем ссылку — https://api16-core-c-alisg.tiktokv.com/aweme/v1/aweme/post/?…… Опускаемся вниз и копируем json в котором содержатся ссылки для скачивания видео

    • Для удобства использовал Json Formatter, слева вставляем ответ со сниффера, справа сверху информация о залитых видео на аккаунте

    • Раскрываем первое (последнее залитое) видео, дальше video — download_addr и play_addr, берем ссылки и скачиваем видео крео и модерку

Анализ скачанных видео и выбор кадров для замены

Теперь нам нужно разобрать покадрово скачанные видео, которые называем 30.mp4 (крео), 60.mp4 (модерка), для этого используем

fromTT/30.py и 60.py

В папках 30 и 60 появятся изображения с кадрами

*На момент написания статьи тикток начал кодировать видео так, что крео и модерка выгружаются с одинаковыми кадрами в 30 фпс, поэтому кадры будут взяты примерно*

Теперь выписываем через запятую все номера фреймов, которые будем использовать в финальном скрипте для замены на эти места кадров

Creo = 0, 6, 26, 39, 52, 65, 78, 91, 104, 117, 130, 143, 156, 169, 182, 195, 208, 221, 234, 247, 260, 273, 286, 299, 312, 325, 338, 351, 364, 377, 390, 403, 416, 429, 442, 455, 468, 481, 494, 507, 520, 533, 546, 559, 572, 585, 598, 611, 624, 637, 650, 663, 676, 689, 702, 715, 728, 741, 754, 767, 780, 793, 806, 819, 832, 845, 858, 871, 884, 897, 910, 923, 936, 949, 962, 975, 988, 1001, 1014, 1027, 1040, 1053, 1066, 1079, 1092, 1105, 1118, 1131, 1144, 1157, 1170, 1183, 1196, 1209, 1222, 1235, 1248, 1261, 1274, 1287, 1300, 1313, 1326, 1339, 1352, 1365, 1378, 1391, 1404, 1417, 1430, 1443, 1456, 1469, 1482, 1495, 1508, 1521, 1534, 1547, 1560, 1573, 1586, 1599, 1612, 1625, 1638, 1651, 1664, 1677, 1690, 1703, 1716, 1729, 1742, 1755, 1768, 1781, 1794, 1807, 1820, 1833, 1846, 1859, 1872, 1885, 1898, 1911, 1924, 1937, 1950, 1963, 1976, 1989

Moderka = 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360, 366, 372, 378, 384, 390, 396, 402, 408, 414, 420, 426, 432, 438, 444, 450, 456, 462, 468, 474, 480, 486, 492, 498, 504, 510, 516, 522, 528, 534, 540, 546, 552, 558, 564, 570, 576, 582, 588, 594, 600, 606, 612, 618, 624, 630, 636, 642, 648, 654, 660, 666, 672, 678, 684, 690, 696, 702, 708, 714, 720, 726, 732, 738, 744, 750, 756, 762, 768, 774, 780, 786, 792, 798, 804, 810, 816, 822, 828, 834, 840, 846, 852, 858, 864, 870, 876, 882, 888, 894, 900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966, 972, 978, 984, 990, 996, 1002, 1008, 1014, 1020, 1026, 1032, 1038, 1044, 1050, 1056, 1062, 1068, 1074, 1080, 1086, 1092, 1098, 1104, 1110, 1116, 1122, 1128, 1134, 1140, 1146, 1152, 1158, 1164, 1170, 1176, 1182, 1188, 1194, 1200, 1206, 1212, 1218, 1224, 1230, 1236, 1242, 1248, 1254, 1260, 1266, 1272, 1278, 1284, 1290, 1296, 1302, 1308, 1314, 1320, 1326, 1332, 1338, 1344, 1350, 1356, 1362, 1368, 1374, 1380, 1386, 1392, 1398, 1404, 1410, 1416, 1422, 1428, 1434, 1440, 1446, 1452, 1458, 1464, 1470, 1476, 1482, 1488, 1494, 1500, 1506, 1512, 1518, 1524, 1530, 1536, 1542, 1548, 1554, 1560, 1566, 1572, 1578, 1584, 1590, 1596, 1602, 1608, 1614, 1620, 1626, 1632, 1638, 1644, 1650, 1656, 1662, 1668, 1674, 1680, 1686, 1692, 1698, 1704, 1710, 1716, 1722, 1728, 1734, 1740, 1746, 1752, 1758, 1764, 1770, 1776, 1782, 1788, 1794, 1800, 1806, 1812, 1818, 1824, 1830, 1836, 1842, 1848, 1854, 1860, 1866, 1872, 1878, 1884, 1890, 1896, 1902, 1908, 1914, 1920, 1926, 1932, 1938, 1944, 1950, 1956, 1962, 1968, 1974, 1980, 1986, 1992

Всегда первые два кадра будут пересекаться, на их местах оставляем градиент

Генерация видео для залива

Final.py

Логика следующая

    • Генерируем градиент точно так же как и вначале, но теперь без нумерации фреймов и в виде изображений покадрово в папке temp, изображения формата frame_0000.jpg …
    • Берем рандомныe фрагменты видео длительностью 5 секунд из файлов creo.mp4 и moderka.mp4, разбиваем покадрово в соответствующие папки creo и moderka
    • Переименовываем файлы из папок creo и moderka с учетом индексов которые записали ранее, копируем их в папку temp с заменой
    • Берем рандомный фрагмент аудио из файла mix.mp3
    • Подгоняем все кадры под один размер, по размерам первого кадра градиента в папку temp_resized
    • Генерируем видео Final.mp4 из фреймов temp_resized с наложенным фрагментом аудио
    • Заливаем видео в тикток через веб либо апи и ждем когда он снесет линку 😁

Залив с айфона

Если залить такое видео с айфона, то тикток его замедлит, точнее сам телефон, для изменения скорости делаем видео в 239 fps, в редактировании видео ставим 100% — 240 fps

Только почему-то с таким градиентом не работало. После многих тестов залить все таки получилось.

    • Вместо градиента используем черный фон
    • Уменьшаем битрейт насколько это возможно, что бы не шакалить качество видео
    • Устанавливаем 100% скорость видео

Библиотеки для использования — pip install numpy moviepy pillow opencv-python

Скачать

Спасибо за внимание!

Конкурс проводится при поддержке:

1) MTRAF.io — дейтинг-смартлинка с максимальным профитом

2) ZennoPoster — лучший друг арбитражника. Автоматизируйте все рабочие процессы с помощью ZennoPoster и зарабатывайте не напрягаясь

3) LTEBOOST — качественные мобильные и резидентские прокси

Статья написана для чата MonteTraf. Админ канала @djakoma

Related Articles

Back to top button