Утром зашёл на coub.com и увидел баннер с печальной новостью :

Проект Сoub закрывается 1 апреля 2022 года. Успейте скачать свои видео.

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

Скрипт из файла urls.txt по ссылке скачивает исходник страницы, ищет ссылки и скачивает отдельно музыку и отдельно видео (в максимальном качестве), а потом объединяет их (зацикливает видео, пока звучит аудиодорожка).

Создаём файл download_coubs.bat и копируем в него код:

 off cls SetLocal EnableExtensions EnableDelayedExpansion

rem берем ссылки из файла urls.txt For /F "Delims=" %%i In (urls.txt) Do ( Set url=%%i echo !url!

:curl rem скачиваем страницу куба curl.exe -# -k "!url!" > "coub_source" 2>nul if NOT %errorlevel% == 0 GOTO curl

rem берем код с ссылками sed.exe --text -n "/abuses/p" "coub_source" >"coub_abuses" 2>nul

rem находим ссылку на mp3 sed.exe --text --text -e "s/.*high....url...(.high.mp3)./\1/" "coub_abuses">"coub_mp3" 2>nul

rem находим ссылку на mp4 sed.exe --text --text -e "s/.*higher....url...(.huge.mp4)./\1/" "coub_abuses">"coub_mp4" 2>nul

rem находим ссылку на url sed.exe --text --text -e "s/.Simple...permalink...(.)","title.visibility_type./\1/" "coub_abuses">"coub_name" 2>nul

rem строчки из файлов вставляем в переменные For /F "usebackq tokens=* delims=" %%i In ("coub_mp3")  Do Set mp3url=%%i For /F "usebackq tokens=* delims=" %%i In ("coub_mp4")  Do Set mp4url=%%i For /F "usebackq tokens=* delims=" %%i In ("coub_name") Do Set titleurl=%%i

echo Downloading "!mp3url!" !titleurl!.mp3 curl.exe -# -k "!mp3url!" > "!titleurl!.mp3" 2>nul

echo Downloading "!mp4url!" !titleurl!.mp4 curl.exe -# -k "!mp4url!" > "!titleurl!.mp4" 2>nul

echo Merging video+audio ffmpeg -stream_loop -1 -i !titleurl!.mp4 -i !titleurl!.mp3 -shortest -map 0:v:0 -map 1:a:0 -y !titleurl!_merged.mp4

rem удаляем временные файлы

 del /F /A "coub_source" 2>nul del /F /A "coub_abuses" 2>nul

 del /F /A "coub_mp3" 2>nul

 del /F /A "coub_mp4" 2>nul

 del /F /A "coub_name" 2>nul )

pause exit

Для работы нужны три файла:

Всё скачиваем, копируем их из архивов и кладём в тот же каталог со скриптом.

Создаем в каталоге со скриптом файл urls.txt со списком адресов (каждая ссылка на отдельной строке)

например:

https://coub.com/view/316jkd

https://coub.com/view/316fme

Запускаем скрипт. Ждём.

Скрипт из файла urls.txt по ссылке скачивает исходник страницы, ищет ссылки и скачивает отдельно музыку и отдельно видео (в максимальном качестве), а потом объединяет их (зацикливает видео, пока звучит аудиодорожка).

Пардон за код, если не нравится, я не виноват.

Линуксоидам переделать код на bash думаю никаких трудов не составит...

Комментарии (17)


  1. qark
    21.03.2022 11:50

    Чуть проще будет с yt-dlp. Он и ссылки на mp3/mp4 найдёт, и смёржит, и мусор уберёт.
    PS ffmpeg всё равно нужен для объединения, только вызывается автоматически.


  1. vvovas
    21.03.2022 11:51

    Глупый вопрос, наверное, но я не силен в скриптах: обработка ошибок есть какая-то?

    Я пока свои кубы скачивал, натыкался и на отсутствие куба как такового и на отсутствие аудиодорожки (вырезана из-за dmca)


    P.S. сегодня, кстати, плашки про закрытие сервиса у меня почему-то нет.


  1. shaytan
    21.03.2022 11:52
    +1

    Доступно средство для скачивания и инструкция:

    https://dtf.ru/u/400812-aleksandr-silivanov/1119500-instrukciya-kak-skachat-vse-lichnye-kouby-s-sayta-coub


  1. klevunin
    21.03.2022 11:56
    +2

    Жалко. Честно говоря проект с коротким видео роликами на которых красивая нарезка и музыка намного приятней смотреть чем кривлянья всяких блогеров. Отдали бы проект в Open source. Может кто-то и поднял был. Разработчики вроде его продали год или два назад. Видимо не в те руки продали.


    1. akakoychenko
      21.03.2022 12:09

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


    1. DWM
      22.03.2022 18:19

      Сейчас reCoub энтузиастами создается, есть Discord и Telegram с новостями по проекту. Планируют открыться с 22 до 24 марта.

      Насколько я знаю, у coub-а были проблемы с окупаемостью, но это не точно.


  1. FluD
    21.03.2022 12:16

    Нуже хабр, запилите аналог!

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


    1. anteo
      21.03.2022 12:35

      reCoub team (@recoubteam) уже занимаются созданием клона (recoub.com) Можно подписаться на их канал в телеграме.

      Я не отношусь к этой команде, просто надеюсь у них всё получится, и coub мы не потеряем насовсем


  1. Sanctuary_s
    21.03.2022 12:27

    Писал для себя. Можно подправить под Coub'ы: https://github.com/farag2/Utilities/blob/master/youtubedl.ps1


  1. Delsian
    21.03.2022 13:34

    А почему бы не использовать YouTube Shorts вместо коубов?


    1. forthuser
      21.03.2022 14:09

      Как ни прискорбно, но YouTube под угрозой отключения в/для России.

      P.S. Возможно на площадке vk.com возможно выделить подобный функционал коубов в отдельный сервис.


  1. andreymal
    21.03.2022 14:38

    Зацикливание выполняет транскодирование и тем самым убивает качество. Я считаю, что правильнее скачивать отдельные mp3 и mp4 без зацикливания, а зацикливать уже на уровне плеера (попытаться написать свой html5-плеер или типа того)


  1. Pompei
    21.03.2022 17:28

    Первое апреля... ничего не напоминает?


    1. DWM
      22.03.2022 18:25

      На ютубе один человек в комментариях также обратил на это внимание.

      Я могу ошибаться, но вроде шутки про первое апреля шутят 1-го апреля, а не заранее.

      А может быть разрабы coub-а пытаются привлечь внимание к проекту, и он поменяется сам. По идее, нужны прямые руки и аудитория у проекта, чтобы его обновить. И бизнес-идея.


  1. Maxim_Q
    21.03.2022 19:16

    Вот есть скрипт на питоне для скачки целых каналов:

    https://github.com/HelpSeeker/CoubDownloader/

    Стабильно работает только консольная версия coub.py, версия с графическим интерфейсом немного глючная и не скачивает некоторые кубы если указать в имени файла %title%.

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

    python.exe coub.py -c chanel_name --bestvideo --max-video high -p .\download_folder -o "%title%   %id%" 


  1. Demixoid
    21.03.2022 20:18

    У меня скрипт не заработал. Может, я что не так сделал при копировании, но поехали некоторые переносы плюс смутила куча лишних штук (типа > nul и лишних кавычек), без которых как будто бы все работает. Пришлось изменить регулярки, некоторые пути и параметры вызовов. Заодно освоил sed, как-то он мне раньше не попадался, буду как batch-regexp процессор использовать:).

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

    Особенности:

    1. Итоговые коубы выкладываются в подпапку Coubs.

    2. Имя коуба равно его короткому id. Не в курсе, как было изначально, но посчитал, что уж в ID не будет всяких символов, которые неприемлемы в имени файла. При необходимости можно спарсить что-то другое из кода страницы.

    3. После генерации коуба удаляются не только временные текстовики без расширения, но и mp3-mp4, из которых складывается merged.

    В папке скрипта я расположил curl.exe, sed.exe, curl-ca-bundle.crt, ffmpeg.exe. Создал папку Coubs (на всякий), urls.txt со ссылками и, собственно, bat с этим скриптом.

    Проц эти пироги грузят плотнячком, так что если ссылок много- идите чай пить:).

    Рад, если кому-то этот вариант поможет. И спасибо автору за оригинальную затравку:).

    chcp 65001
    
    echo %~dp0
    
    mkdir Coubs
    
    off cls 
    SetLocal EnableExtensions EnableDelayedExpansion
    
    rem берем ссылки из файла urls.txt 
    For /F "usebackq tokens=* delims=" %%i In ("urls.txt") Do ( 
    
    	Set url=%%i  
    
    	:curl 
    	rem скачиваем страницу куба 
    	curl !url! > coub_source
    
    	if NOT %errorlevel% == 0 GOTO curl
    
    	rem берем код с ссылками 
    	sed --text -n "/abuses/p" "coub_source" > coub_abuses
    	rem находим ссылку на mp3 
    	sed --text -r -e "s/.*audio.*url...(.*?high.mp3).*/\1/" coub_abuses > coub_mp3
    	rem находим ссылку на mp4 
    	sed --text -r -e "s/.*higher....url...(.*?huge.mp4).*/\1/" coub_abuses > coub_mp4
    	rem находим ссылку на url 
    	sed --text -r -e "s/.*Simple...permalink...(......).*/\1/" coub_abuses > coub_name
    	rem строчки из файлов вставляем в переменные 
    	For /F "usebackq tokens=* delims=" %%i In ("coub_mp3")  Do Set mp3url=%%i 
    	For /F "usebackq tokens=* delims=" %%i In ("coub_mp4")  Do Set mp4url=%%i 
    	For /F "usebackq tokens=* delims=" %%i In ("coub_name") Do Set titleurl=%%i
    	echo Downloading "!mp3url!" !titleurl!.mp3 
    	curl !mp3url! > !titleurl!.mp3
    	
    	echo Downloading "!mp4url!" !titleurl!.mp4 
    	curl !mp4url! > !titleurl!.mp4
    	
    	echo Merging video+audio 
    	ffmpeg -stream_loop -1 -i !titleurl!.mp4 -i !titleurl!.mp3 -shortest -map 0:v:0 -map 1:a:0 -y %~dp0\Coubs\!titleurl!_merged.mp4
    	
    	rem удаляем временные файлы
    	del /F /A coub_source
    	del /F /A coub_abuses
    	del /F /A coub_mp3
    	del /F /A coub_mp4
    	del /F /A coub_name
    	del /F /A !titleurl!.mp4
    	del /F /A !titleurl!.mp3
     
    )
    
    pause


  1. S-trace
    23.03.2022 00:17

    У меня этой плашки о закрытии сейчас не видно (хотя раньше я её видел), да и на джое проскакивала информация о том, что вроде как (по непроверенной информации) нашёлся покупатель, и сервис продлжит жить.

    Конечно, стОит забэкапить любимые коубы, но есть надежда что сервис продолжит жить, а не породит кучу трупоссылок по всем интернетам.